From 399a107c8cff8fa84c5bc6def4ce0a29748949fa Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 14:25:52 +0300 Subject: [PATCH 01/10] Added Norway PersonNumber --- stdnum/no/ssn.py | 60 ++++++++++++++++++++++++++++++++++ tests/test_no_ssn.py | 77 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 stdnum/no/ssn.py create mode 100644 tests/test_no_ssn.py diff --git a/stdnum/no/ssn.py b/stdnum/no/ssn.py new file mode 100644 index 00000000..7568eb95 --- /dev/null +++ b/stdnum/no/ssn.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +from stdnum.util import clean +from stdnum.exceptions import * + + +class PersonNumber(object): + mapping = { + 0: 'd1', + 1: 'd2', + 2: 'm1', + 3: 'm2', + 4: 'y1', + 5: 'y2', + 6: 'i1', + 7: 'i2', + 8: 'i3', + 9: 'k1', + 10: 'k2' + } + + def __init__(self, number_str): + self.number_str = number_str + for index, item in self.mapping.items(): + setattr(self, item, int(number_str[index])) + + def validate(self, gender=None): + n = self + if gender is not None and n.i3 % 2 != gender: + raise ValidationError('Gender check failed') + + checksum_1 = 11 - (((3 * n.d1) + (7 * n.d2) + (6 * n.m1) + (1 * n.m2) + (8 * n.y1) + (9 * n.y2) + (4 * n.i1) + (5 * n.i2) + (2 * n.i3)) % 11) + if checksum_1 == 11: + checksum_1 = 0 + + checksum_2 = 11 - (((5 * n.d1) + (4 * n.d2) + (3 * n.m1) + (2 * n.m2) + (7 * n.y1) + (6 * n.y2) + (5 * n.i1) + (4 * n.i2) + (3 * n.i3) + (2 * checksum_1)) % 11) + if checksum_2 == 11: + checksum_2 = 0 + + if n.k1 == checksum_1 and n.k2 == checksum_2: + return self.number_str + else: + raise ValidationError + + +def validate(number, gender=None): + """Check if the number is a valid Norwegian PersonNumber.""" + number = clean(number, ' -:') + if len(number) != 11: + raise InvalidLength + if not number.isdigit(): + raise InvalidFormat + return PersonNumber(number).validate(gender) + + +def is_valid(number, gender=None): + try: + return bool(validate(number, gender)) + except ValidationError: + return False diff --git a/tests/test_no_ssn.py b/tests/test_no_ssn.py new file mode 100644 index 00000000..9c7deb27 --- /dev/null +++ b/tests/test_no_ssn.py @@ -0,0 +1,77 @@ +import unittest + +from stdnum.no import ssn +from stdnum.exceptions import ValidationError + + +VALID_SSN = ( + ('42957044500', 1), + ('11027794191', 1), + ('31042639152', 1), + ('71946503120', 1), + ('95700625908', 1), + ('68413152112', 1), + ('56653047547', 1), + ('70624830529', 1), + ('75442702381', 1), + ('34831582121', 1), + ('27389446152', 1), + ('96517753502', 1), + ('46929323343', 1), + ('92782833709', 1), + ('40070897972', 1), + ('56403643756', 1), + ('24396859900', 1), + ('89829529360', 1), + ('30383131118', 1), + ('30777674125', 1), + ('71494457037', 0), + ('83814827871', 0), + ('40673759612', 0), + ('44207789809', 0), + ('70341666064', 0), + ('11051996811', 0), + ('39043009846', 0), + ('27213364885', 0), + ('70031073454', 0), + ('42115114470', 0), + ('19575770838', 0), + ('50067834221', 0), + ('63282310041', 0), + ('42485176432', 0), + ('98576936818', 0), + ('79318270827', 0), + ('21918484865', 0), + ('79189404641', 0), + ('82938389280', 0), + ('45014054018', 0), +) + + +class TestNorwaySSN(unittest.TestCase): + def test_non_digit(self): + try: + ssn.validate('It is a bad SSN') + self.assertTrue(False, 'Should throw ValidationError') + except ValidationError: + self.assertTrue(True, 'Should throw ValidationError') + + def test_valid(self): + for number, _ in VALID_SSN: + ssn.validate(number) + self.assertTrue(ssn.is_valid(number)) + + def test_valid_gender(self): + # 1 - Male, 0 - Female + for number, gender in VALID_SSN: + self.assertTrue(ssn.is_valid(number, gender)) + self.assertFalse(ssn.is_valid(number, 0 if gender else 1)) + + def test_invalid_checksum(self): + for num, gender in VALID_SSN: + k2 = int(num[-1]) + k2 = k2 - 1 if k2 > 0 else 1 + number = num[:-1] + str(k2) + self.assertFalse(ssn.is_valid(number)) + self.assertFalse(ssn.is_valid(number, 0 if gender else 1)) + self.assertFalse(ssn.is_valid(number, gender)) From e6fd331be91c826fcc9e57037e9d8cc7249cb2eb Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 14:46:41 +0300 Subject: [PATCH 02/10] Test more incorrect Norway PersonNumbers --- tests/test_no_ssn.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/test_no_ssn.py b/tests/test_no_ssn.py index 9c7deb27..67f3d531 100644 --- a/tests/test_no_ssn.py +++ b/tests/test_no_ssn.py @@ -68,10 +68,16 @@ def test_valid_gender(self): self.assertFalse(ssn.is_valid(number, 0 if gender else 1)) def test_invalid_checksum(self): - for num, gender in VALID_SSN: - k2 = int(num[-1]) - k2 = k2 - 1 if k2 > 0 else 1 - number = num[:-1] + str(k2) + def check_number(number, gender): self.assertFalse(ssn.is_valid(number)) self.assertFalse(ssn.is_valid(number, 0 if gender else 1)) self.assertFalse(ssn.is_valid(number, gender)) + + for num, gender in VALID_SSN: + checksum = int(num[-2:]) + + for n in xrange(0, 100): + if n == checksum: + continue + number = num[:-2] + '%02d' % n + check_number(number, gender) From 5a33bdcdc7709dcebd6ac56a61e4ca4278280786 Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 14:50:01 +0300 Subject: [PATCH 03/10] Added Norwegian Person Number to readme --- README | 1 + 1 file changed, 1 insertion(+) diff --git a/README b/README index 60ef4de9..c5a7f1e2 100644 --- a/README +++ b/README @@ -132,6 +132,7 @@ Currently this package supports the following formats: * Onderwijsnummer (the Dutch student identification number) * Postcode (the Dutch postal code) * Norwegian IBAN (International Bank Account Number) + * Norwegian eleven-digit birth number (fødselsnummer) * Konto nr. (Norwegian bank account number) * MVA (Merverdiavgift, Norwegian VAT number) * Orgnr (Organisasjonsnummer, Norwegian organisation number) From 6d659b2d07de2ce0164a6843a06882d2a25cf701 Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 16:01:51 +0300 Subject: [PATCH 04/10] Moved test --- tests/{test_no_ssn.py => no_ssn_test.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/{test_no_ssn.py => no_ssn_test.py} (100%) diff --git a/tests/test_no_ssn.py b/tests/no_ssn_test.py similarity index 100% rename from tests/test_no_ssn.py rename to tests/no_ssn_test.py From a55f244d28424d8c28451a519b2db669fe85f80e Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 16:16:38 +0300 Subject: [PATCH 05/10] Fixed test in python3 --- tests/no_ssn_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/no_ssn_test.py b/tests/no_ssn_test.py index 67f3d531..f66e3b08 100644 --- a/tests/no_ssn_test.py +++ b/tests/no_ssn_test.py @@ -76,7 +76,7 @@ def check_number(number, gender): for num, gender in VALID_SSN: checksum = int(num[-2:]) - for n in xrange(0, 100): + for n in range(0, 100): if n == checksum: continue number = num[:-2] + '%02d' % n From 98a9a469364c7afc01d1c1ca05b0fd0531b54555 Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 17:38:20 +0300 Subject: [PATCH 06/10] Added Swedish SSN https://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) --- README | 1 + stdnum/se/ssn.py | 24 ++++++++++++++++++++++++ tests/se_ssn_test.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 stdnum/se/ssn.py create mode 100644 tests/se_ssn_test.py diff --git a/README b/README index c5a7f1e2..0d8c0879 100644 --- a/README +++ b/README @@ -146,6 +146,7 @@ Currently this package supports the following formats: * ИНН (Идентификационный номер налогоплательщика, Russian tax identifier) * Orgnr (Organisationsnummer, Swedish company number) * VAT (Moms, Mervärdesskatt, Swedish VAT number) + * Swedish Personal identity number * ID za DDV (Davčna številka, Slovenian VAT number) * IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) * RČ (Rodné číslo, the Slovak birth number) diff --git a/stdnum/se/ssn.py b/stdnum/se/ssn.py new file mode 100644 index 00000000..a48e2623 --- /dev/null +++ b/stdnum/se/ssn.py @@ -0,0 +1,24 @@ +# coding: utf-8 +""" +Validation for Swedish SSN +https://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) +""" +from stdnum.exceptions import * +from stdnum.util import clean +from stdnum import luhn + + +def validate(number): + number = clean(number, ' -+:') + if len(number) != 10: + raise InvalidLength + if not number.isdigit(): + raise InvalidFormat + return luhn.validate(number) + + +def is_valid(number): + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/se_ssn_test.py b/tests/se_ssn_test.py new file mode 100644 index 00000000..3527e5df --- /dev/null +++ b/tests/se_ssn_test.py @@ -0,0 +1,37 @@ +import unittest + +from stdnum.se import ssn +from stdnum.exceptions import ValidationError + + +VALID_SSN = ['880320-0016', '880320-0057', '8803200073', '8803200099', '8803200420', + '8803200115', '8803200131', '8803200156', '8803200172', '8803200198'] + + +class TestSwedenSSN(unittest.TestCase): + def test_non_digit(self): + try: + ssn.validate('It is a bad SSN') + self.assertTrue(False, 'Should throw ValidationError') + except ValidationError: + self.assertTrue(True, 'Should throw ValidationError') + + def test_valid(self): + for number in VALID_SSN: + ssn.validate(number) + self.assertTrue(ssn.is_valid(number)) + + def test_invalid_checksum(self): + for num in VALID_SSN: + checksum = int(num[-1:]) + + for n in range(0, 10): + if n == checksum: + continue + number = num[:-1] + str(n) + self.assertFalse(ssn.is_valid(number)) + try: + ssn.validate(number) + self.assertTrue(False, 'Should throw ValidationError') + except ValidationError: + self.assertTrue(True, 'Should throw ValidationError') From f83ed555428f8416011a74b5000e415bfe6a0002 Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 17:49:12 +0300 Subject: [PATCH 07/10] Made Chinese region validation optional. I get list of Chinese RICs from this forum, that do not pass region validation - http://www.mpgh.net/forum/showthread.php?t=721136&s=8bc841034116f9042eb22f5e4033f1c4 --- stdnum/cn/ric.py | 7 ++++--- tests/cn_ssn_test.py | 38 ++++++++++++++++++++++++++++++++++++++ tests/test_cn_ric.doctest | 2 +- 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 tests/cn_ssn_test.py diff --git a/stdnum/cn/ric.py b/stdnum/cn/ric.py index e5289109..fbf832e0 100644 --- a/stdnum/cn/ric.py +++ b/stdnum/cn/ric.py @@ -75,7 +75,7 @@ def calc_check_digit(number): return 'X' if checksum == 10 else str(checksum) -def validate(number): +def validate(number, validate_region=False): """Check if the number is a valid RIC number. This checks the length, formatting and birth date and place.""" number = compact(number) @@ -88,11 +88,12 @@ def validate(number): if number[-1] != calc_check_digit(number): raise InvalidChecksum() get_birth_date(number) - get_birth_place(number) + if validate_region: + get_birth_place(number) return number -def is_valid(number): +def is_valid(number, validate_region=False): """Check if the number is a valid RIC number.""" try: return bool(validate(number)) diff --git a/tests/cn_ssn_test.py b/tests/cn_ssn_test.py new file mode 100644 index 00000000..5bdf3bb8 --- /dev/null +++ b/tests/cn_ssn_test.py @@ -0,0 +1,38 @@ +import unittest + +from stdnum.cn import ric +from stdnum.exceptions import ValidationError + + +VALID_SSN = ['486268198802140611', '354133198209290022', '338720197801060214', + '387908198001010226', '341617198002120424', '38064219921117061X', + '45883019880120031X'] + + +class TestChinaRic(unittest.TestCase): + def test_non_digit(self): + try: + ric.validate('It is a bad SSN') + self.assertTrue(False, 'Should throw ValidationError') + except ValidationError: + self.assertTrue(True, 'Should throw ValidationError') + + def test_valid(self): + for number in VALID_SSN: + ric.validate(number) + self.assertTrue(ric.is_valid(number)) + + def test_invalid_checksum(self): + for num in VALID_SSN: + checksum = num[-1:] + + for n in range(0, 10): + if str(n) == checksum: + continue + number = num[:-1] + str(n) + self.assertFalse(ric.is_valid(number)) + try: + ric.validate(number) + self.assertTrue(False, 'Should throw ValidationError') + except ValidationError: + self.assertTrue(True, 'Should throw ValidationError') diff --git a/tests/test_cn_ric.doctest b/tests/test_cn_ric.doctest index 5b219481..ce0a2e7d 100644 --- a/tests/test_cn_ric.doctest +++ b/tests/test_cn_ric.doctest @@ -84,7 +84,7 @@ InvalidChecksum: ... Invalid location: ->>> ric.validate('990426199112010074') # unknown birth place code +>>> ric.validate('990426199112010074', validate_region=True) # unknown birth place code Traceback (most recent call last): ... InvalidComponent: ... From 369a7bb45a671e923b12e729d7c6fb2df1d0bcf0 Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 27 Nov 2018 17:59:14 +0300 Subject: [PATCH 08/10] Raise exception object --- stdnum/no/ssn.py | 6 +++--- stdnum/se/ssn.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/stdnum/no/ssn.py b/stdnum/no/ssn.py index 7568eb95..ab992471 100644 --- a/stdnum/no/ssn.py +++ b/stdnum/no/ssn.py @@ -40,16 +40,16 @@ def validate(self, gender=None): if n.k1 == checksum_1 and n.k2 == checksum_2: return self.number_str else: - raise ValidationError + raise ValidationError() def validate(number, gender=None): """Check if the number is a valid Norwegian PersonNumber.""" number = clean(number, ' -:') if len(number) != 11: - raise InvalidLength + raise InvalidLength() if not number.isdigit(): - raise InvalidFormat + raise InvalidFormat() return PersonNumber(number).validate(gender) diff --git a/stdnum/se/ssn.py b/stdnum/se/ssn.py index a48e2623..df37c599 100644 --- a/stdnum/se/ssn.py +++ b/stdnum/se/ssn.py @@ -11,9 +11,9 @@ def validate(number): number = clean(number, ' -+:') if len(number) != 10: - raise InvalidLength + raise InvalidLength() if not number.isdigit(): - raise InvalidFormat + raise InvalidFormat() return luhn.validate(number) From 33bedb8fe8090d8d4b0ea8045c28f2992ce0af46 Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Mon, 3 Dec 2018 13:39:53 +0300 Subject: [PATCH 09/10] Pass Travis build --- stdnum/no/ssn.py | 13 ++++++++----- stdnum/se/ssn.py | 6 +++--- tests/cn_ssn_test.py | 1 + tests/no_ssn_test.py | 1 + tests/se_ssn_test.py | 10 +++++++++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/stdnum/no/ssn.py b/stdnum/no/ssn.py index ab992471..1ed08908 100644 --- a/stdnum/no/ssn.py +++ b/stdnum/no/ssn.py @@ -1,10 +1,13 @@ # coding: utf-8 +"""Norwegian eleven-digit birth number (fødselsnummer)""" -from stdnum.util import clean from stdnum.exceptions import * +from stdnum.util import clean class PersonNumber(object): + """Helper class to validate birth number""" + mapping = { 0: 'd1', 1: 'd2', @@ -16,15 +19,15 @@ class PersonNumber(object): 7: 'i2', 8: 'i3', 9: 'k1', - 10: 'k2' + 10: 'k2', } - def __init__(self, number_str): + def __init__(self, number_str): # noqa self.number_str = number_str for index, item in self.mapping.items(): setattr(self, item, int(number_str[index])) - def validate(self, gender=None): + def validate(self, gender=None): # noqa n = self if gender is not None and n.i3 % 2 != gender: raise ValidationError('Gender check failed') @@ -53,7 +56,7 @@ def validate(number, gender=None): return PersonNumber(number).validate(gender) -def is_valid(number, gender=None): +def is_valid(number, gender=None): # noqa try: return bool(validate(number, gender)) except ValidationError: diff --git a/stdnum/se/ssn.py b/stdnum/se/ssn.py index df37c599..b5cada36 100644 --- a/stdnum/se/ssn.py +++ b/stdnum/se/ssn.py @@ -3,12 +3,12 @@ Validation for Swedish SSN https://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) """ +from stdnum import luhn from stdnum.exceptions import * from stdnum.util import clean -from stdnum import luhn -def validate(number): +def validate(number): # noqa number = clean(number, ' -+:') if len(number) != 10: raise InvalidLength() @@ -17,7 +17,7 @@ def validate(number): return luhn.validate(number) -def is_valid(number): +def is_valid(number): # noqa try: return bool(validate(number)) except ValidationError: diff --git a/tests/cn_ssn_test.py b/tests/cn_ssn_test.py index 5bdf3bb8..155d6a5f 100644 --- a/tests/cn_ssn_test.py +++ b/tests/cn_ssn_test.py @@ -1,3 +1,4 @@ +# flake8: noqa import unittest from stdnum.cn import ric diff --git a/tests/no_ssn_test.py b/tests/no_ssn_test.py index f66e3b08..0860cfa0 100644 --- a/tests/no_ssn_test.py +++ b/tests/no_ssn_test.py @@ -1,3 +1,4 @@ +# flake8: noqa import unittest from stdnum.no import ssn diff --git a/tests/se_ssn_test.py b/tests/se_ssn_test.py index 3527e5df..c6920ea3 100644 --- a/tests/se_ssn_test.py +++ b/tests/se_ssn_test.py @@ -1,3 +1,8 @@ +# flake8: noqa +""" +Test for Swedish Personal identity number +""" + import unittest from stdnum.se import ssn @@ -9,9 +14,12 @@ class TestSwedenSSN(unittest.TestCase): + """ + Test for Swedish Personal identity number + """ def test_non_digit(self): try: - ssn.validate('It is a bad SSN') + ssn.validate('a' * 10) self.assertTrue(False, 'Should throw ValidationError') except ValidationError: self.assertTrue(True, 'Should throw ValidationError') From dfd20fe7103b6f6f03b8b789bd42a0b74d788cfd Mon Sep 17 00:00:00 2001 From: Ilya Vihtinsky Date: Tue, 25 Dec 2018 16:53:29 +0300 Subject: [PATCH 10/10] Merged with upstream repo --- stdnum/no/ssn.py | 63 -------------------------------------------- stdnum/se/ssn.py | 24 ----------------- tests/no_ssn_test.py | 11 +++----- tests/se_ssn_test.py | 2 +- 4 files changed, 5 insertions(+), 95 deletions(-) delete mode 100644 stdnum/no/ssn.py delete mode 100644 stdnum/se/ssn.py diff --git a/stdnum/no/ssn.py b/stdnum/no/ssn.py deleted file mode 100644 index 1ed08908..00000000 --- a/stdnum/no/ssn.py +++ /dev/null @@ -1,63 +0,0 @@ -# coding: utf-8 -"""Norwegian eleven-digit birth number (fødselsnummer)""" - -from stdnum.exceptions import * -from stdnum.util import clean - - -class PersonNumber(object): - """Helper class to validate birth number""" - - mapping = { - 0: 'd1', - 1: 'd2', - 2: 'm1', - 3: 'm2', - 4: 'y1', - 5: 'y2', - 6: 'i1', - 7: 'i2', - 8: 'i3', - 9: 'k1', - 10: 'k2', - } - - def __init__(self, number_str): # noqa - self.number_str = number_str - for index, item in self.mapping.items(): - setattr(self, item, int(number_str[index])) - - def validate(self, gender=None): # noqa - n = self - if gender is not None and n.i3 % 2 != gender: - raise ValidationError('Gender check failed') - - checksum_1 = 11 - (((3 * n.d1) + (7 * n.d2) + (6 * n.m1) + (1 * n.m2) + (8 * n.y1) + (9 * n.y2) + (4 * n.i1) + (5 * n.i2) + (2 * n.i3)) % 11) - if checksum_1 == 11: - checksum_1 = 0 - - checksum_2 = 11 - (((5 * n.d1) + (4 * n.d2) + (3 * n.m1) + (2 * n.m2) + (7 * n.y1) + (6 * n.y2) + (5 * n.i1) + (4 * n.i2) + (3 * n.i3) + (2 * checksum_1)) % 11) - if checksum_2 == 11: - checksum_2 = 0 - - if n.k1 == checksum_1 and n.k2 == checksum_2: - return self.number_str - else: - raise ValidationError() - - -def validate(number, gender=None): - """Check if the number is a valid Norwegian PersonNumber.""" - number = clean(number, ' -:') - if len(number) != 11: - raise InvalidLength() - if not number.isdigit(): - raise InvalidFormat() - return PersonNumber(number).validate(gender) - - -def is_valid(number, gender=None): # noqa - try: - return bool(validate(number, gender)) - except ValidationError: - return False diff --git a/stdnum/se/ssn.py b/stdnum/se/ssn.py deleted file mode 100644 index b5cada36..00000000 --- a/stdnum/se/ssn.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding: utf-8 -""" -Validation for Swedish SSN -https://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) -""" -from stdnum import luhn -from stdnum.exceptions import * -from stdnum.util import clean - - -def validate(number): # noqa - number = clean(number, ' -+:') - if len(number) != 10: - raise InvalidLength() - if not number.isdigit(): - raise InvalidFormat() - return luhn.validate(number) - - -def is_valid(number): # noqa - try: - return bool(validate(number)) - except ValidationError: - return False diff --git a/tests/no_ssn_test.py b/tests/no_ssn_test.py index 0860cfa0..e304b29c 100644 --- a/tests/no_ssn_test.py +++ b/tests/no_ssn_test.py @@ -1,7 +1,7 @@ # flake8: noqa import unittest -from stdnum.no import ssn +from stdnum.no import personalid as ssn from stdnum.exceptions import ValidationError @@ -65,14 +65,11 @@ def test_valid(self): def test_valid_gender(self): # 1 - Male, 0 - Female for number, gender in VALID_SSN: - self.assertTrue(ssn.is_valid(number, gender)) - self.assertFalse(ssn.is_valid(number, 0 if gender else 1)) + self.assertTrue(ssn.get_gender(number) == 'M' if gender else 'F') def test_invalid_checksum(self): - def check_number(number, gender): + def check_number(number): self.assertFalse(ssn.is_valid(number)) - self.assertFalse(ssn.is_valid(number, 0 if gender else 1)) - self.assertFalse(ssn.is_valid(number, gender)) for num, gender in VALID_SSN: checksum = int(num[-2:]) @@ -81,4 +78,4 @@ def check_number(number, gender): if n == checksum: continue number = num[:-2] + '%02d' % n - check_number(number, gender) + check_number(number) diff --git a/tests/se_ssn_test.py b/tests/se_ssn_test.py index c6920ea3..8df4f227 100644 --- a/tests/se_ssn_test.py +++ b/tests/se_ssn_test.py @@ -5,7 +5,7 @@ import unittest -from stdnum.se import ssn +from stdnum.se import personalid as ssn from stdnum.exceptions import ValidationError