Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2020-02-12 20:05:06 +0100
committerArthur de Jong <arthur@arthurdejong.org>2020-02-12 20:05:06 +0100
commite513888762af9c0d5fd698810e124cb9b5a47a92 (patch)
tree48e507af214e80e6ec42a5ee4eaf01b0f4885956
parent77a77ba75706f8ebae5c5ef87146944ce5322c88 (diff)
Fix issue with extra plus or minus in se.personnummer
Fixes 5441ffa Closes https://github.com/arthurdejong/python-stdnum/issues/188
-rw-r--r--stdnum/se/personnummer.py12
-rw-r--r--tests/test_se_personnummer.doctest12
2 files changed, 14 insertions, 10 deletions
diff --git a/stdnum/se/personnummer.py b/stdnum/se/personnummer.py
index a495242..95d6180 100644
--- a/stdnum/se/personnummer.py
+++ b/stdnum/se/personnummer.py
@@ -2,7 +2,7 @@
# coding: utf-8
#
# Copyright (C) 2018 Ilya Vihtinsky
-# Copyright (C) 2018 Arthur de Jong
+# Copyright (C) 2018-2020 Arthur de Jong
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -32,8 +32,6 @@ More information:
>>> validate('880320-0016')
'880320-0016'
->>> validate('8803200016')
-'880320-0016'
>>> validate('880320-0018')
Traceback (most recent call last):
...
@@ -59,7 +57,7 @@ def compact(number):
number = clean(number, ' :')
if len(number) in (10, 12) and number[-5] not in '-+':
number = '%s-%s' % (number[:-4], number[-4:])
- return number
+ return number[:-5].replace('-', '').replace('+', '') + number[-5:]
def get_birth_date(number):
@@ -102,10 +100,8 @@ def validate(number):
number = compact(number)
if len(number) not in (11, 13):
raise InvalidLength()
- if number[-5] not in '-+':
- raise InvalidFormat()
- digits = clean(number, '-+')
- if not isdigits(digits):
+ digits = number[:-5] + number[-4:]
+ if number[-5] not in '-+' or not isdigits(digits):
raise InvalidFormat()
get_birth_date(number)
luhn.validate(digits[-10:])
diff --git a/tests/test_se_personnummer.doctest b/tests/test_se_personnummer.doctest
index 2238e63..6c49322 100644
--- a/tests/test_se_personnummer.doctest
+++ b/tests/test_se_personnummer.doctest
@@ -1,7 +1,7 @@
test_se_personnummer.doctest - more detailed doctests for stdnum.se.personnummer module
Copyright (C) 2018 Ilya Vihtinsky
-Copyright (C) 2018 Arthur de Jong
+Copyright (C) 2018-2020 Arthur de Jong
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -26,8 +26,16 @@ is not really useful as module documentation.
>>> from stdnum.se import personnummer
-Test for non-digit number.
+Test for various formats and corner cases.
+>>> personnummer.validate('8803200016')
+'880320-0016'
+>>> personnummer.validate('19670-19-9535')
+Traceback (most recent call last):
+ ...
+InvalidLength: ...
+>>> personnummer.validate('8803-20-0016')
+'880320-0016'
>>> personnummer.validate('a' * 10)
Traceback (most recent call last):
...