8000 Fix issue with extra plus or minus in se.personnummer · adh/python-stdnum@e513888 · GitHub
[go: up one dir, main page]

Skip to content

Commit e513888

Browse files
committed
Fix issue with extra plus or minus in se.personnummer
Fixes 5441ffa Closes arthurdejong#188
1 parent 77a77ba commit e513888

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

stdnum/se/personnummer.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# coding: utf-8
33
#
44
# Copyright (C) 2018 Ilya Vihtinsky
5-
# Copyright (C) 2018 Arthur de Jong
5+
# Copyright (C) 2018-2020 Arthur de Jong
66
#
77
# This library is free software; you can redistribute it and/or
88
# modify it under the terms of the GNU Lesser General Public
@@ -32,8 +32,6 @@
3232
3333
>>> validate('880320-0016')
3434
'880320-0016'
35-
>>> validate('8803200016')
36-
'880320-0016'
< 10000 code>3735
>>> validate('880320-0018')
3836
Traceback (most recent call last):
3937
...
@@ -59,7 +57,7 @@ def compact(number):
5957
number = clean(number, ' :')
6058
if len(number) in (10, 12) and number[-5] not in '-+':
6159
number = '%s-%s' % (number[:-4], number[-4:])
62-
return number
60+
return number[:-5].replace('-', '').replace('+', '') + number[-5:]
6361

6462

6563
def get_birth_date(number):
@@ -102,10 +100,8 @@ def validate(number):
102100
number = compact(number)
103101
if len(number) not in (11, 13):
104102
raise InvalidLength()
105-
if number[-5] not in '-+':
106-
raise InvalidFormat()
107-
digits = clean(number, '-+')
108-
if not isdigits(digits):
103+
digits = number[:-5] + number[-4:]
104+
if number[-5] not in '-+' or not isdigits(digits):
109105
raise InvalidFormat()
110106
get_birth_date(number)
111107
luhn.validate(digits[-10:])

tests/test_se_personnummer.doctest

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
test_se_personnummer.doctest - more detailed doctests for stdnum.se.personnummer module
22

33
Copyright (C) 2018 Ilya Vihtinsky
4-
Copyright (C) 2018 Arthur de Jong
4+
Copyright (C) 2018-2020 Arthur de Jong
55

66
This library is free software; you can redistribute it and/or
77
modify it under the terms of the GNU Lesser General Public
@@ -26,8 +26,16 @@ is not really useful as module documentation.
2626
>>> from stdnum.se import personnummer
2727

2828

29-
Test for non-digit number.
29+
Test for various formats and corner cases.
3030

31+
>>> personnummer.validate('8803200016')
32+
'880320-0016'
33+
>>> personnummer.validate('19670-19-9535')
34+
Traceback (most recent call last):
35+
...
36+
InvalidLength: ...
37+
>>> personnummer.validate('8803-20-0016')
38+
'880320-0016'
3139
>>> personnummer.validate('a' * 10)
3240
Traceback (most recent call last):
3341
...

0 commit comments

Comments
 (0)
0