Skip to content

Commit c6f42ea

Browse files
committed
nhsNumberGenerator logic tweak.
1 parent 9ac22a7 commit c6f42ea

2 files changed

Lines changed: 14 additions & 9 deletions

File tree

codonPython/nhsNumberGenerator.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def nhsNumberGenerator(to_generate: int, random_state: int = None)->list:
2222
Examples
2323
---------
2424
>>> nhsNumberGenerator(2, random_state=42)
25-
[7865793030, 1933498560]
25+
[7865793030, 2195408316]
2626
"""
2727

2828
if random_state:
@@ -41,9 +41,14 @@ def nhsNumberGenerator(to_generate: int, random_state: int = None)->list:
4141
digits = [int(digit) for digit in str(number)]
4242
# Apply weighting to digits
4343
weighted_digits = [(10 - index) * digit for (index, digit) in enumerate(digits)]
44-
# Sum of all weighted digits must be a multiple of 11 to be valid.
45-
if sum(weighted_digits) % 11 == 0:
46-
# Add check digit to valid number
47-
number = int(str(number) + "0")
48-
generated.append(number)
49-
return generated
44+
# Validity is based on the check digit, which can't be 10
45+
remainder = sum(weighted_digits) % 11
46+
check_digit = 11 - remainder
47+
if check_digit == 10:
48+
continue
49+
if check_digit == 11:
50+
check_digit = 0
51+
# Add check digit to valid number
52+
number = int(str(number) + str(check_digit))
53+
generated.append(number)
54+
return generated

codonPython/tests/nhsNumberGenerator_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66

77
@pytest.mark.parametrize("to_generate, random_state, expected", [
8-
(3, 42, [7865793030, 1933498560, 7340365060]),
9-
(2, 1, [1677604360, 9170772010])
8+
(3, 42, [7865793030, 2195408316, 1268550922]),
9+
(2, 1, [2442725096, 7111780027])
1010
])
1111
def test_nhsNumberGenerator_BAU(to_generate, random_state, expected):
1212
assert expected == nhsNumberGenerator(to_generate, random_state=random_state)

0 commit comments

Comments
 (0)