Skip to content

Commit b35bf2b

Browse files
author
mrngm
committed
Added distance parameter
1 parent 8462ff2 commit b35bf2b

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

bsn-gen/bsn-gen.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
import sys
1010

1111
def print_readme():
12-
print """bsn-gen.py [number] [from]
12+
print """bsn-gen.py [number] [from] [distance]
1313
1414
Generates [number] of valid BSNs
1515
[number] Number of BSNs to generate
1616
[from] 8 or 9 digit BSN to start from
17+
[distance] add <distance> to the next BSN to be generated
1718
1819
When no number is given, this help message is displayed.
1920
This script was made by mrngm, source at https://github.com/mrngm/python-misc/
@@ -39,7 +40,7 @@ def generate_checkdigit(bsn):
3940
checkdigit = 0
4041
return checkdigit
4142

42-
def generate_next(prev):
43+
def generate_next(prev, distance):
4344
if len(prev) > 9:
4445
sys.exit("Number is too long, exiting");
4546
elif len(prev) == 8 and prev.isdigit():
@@ -50,15 +51,27 @@ def generate_next(prev):
5051
sys.exit("Generate_next: Number too short or not a prev, exiting");
5152

5253
# strip the last digit, this is the check digit
53-
fullnumber = int(prev[0:len(prev)-1])
54-
fullnumber += 1
54+
strnumber = increase_bsn(prev, distance)
55+
checkdigit = generate_checkdigit(strnumber)
56+
strnumber = strnumber + str(checkdigit)
57+
return strnumber
58+
59+
def increase_bsn(bsn, number):
60+
fullnumber = int(bsn[0:len(bsn)-1])
61+
fullnumber += number
5562
strnumber = str(fullnumber)
5663
for i in range(8-len(strnumber)):
5764
strnumber = "0" + strnumber
58-
checkdigit = generate_checkdigit(strnumber)
59-
strnumber = strnumber + str(checkdigit)
6065
return strnumber
6166

67+
def generate(bsn, distance, number):
68+
bsn = generate_next(bsn, distance)
69+
print bsn
70+
for i in range(number):
71+
bsn = generate_next(bsn, distance)
72+
print bsn
73+
74+
6275

6376
if len(sys.argv) < 2:
6477
# print README
@@ -67,14 +80,15 @@ def generate_next(prev):
6780
# generate sys.argv[1] number of BSNs
6881
bsn = "123456789"
6982
for i in range(int(sys.argv[1])):
70-
bsn = generate_next(bsn)
83+
bsn = generate_next(bsn, 1)
7184
print bsn
7285
elif len(sys.argv) == 3:
7386
# generate sys.argv[1] number of BSNs starting from sys.argv[2]
74-
bsn = sys.argv[2]
75-
for i in range(int(sys.argv[1])):
76-
bsn = generate_next(bsn)
77-
print bsn
87+
generate(sys.argv[2], 1, int(sys.argv[1]))
88+
elif len(sys.argv) == 4:
89+
# Same as above, but skip sys.argv[3] BSNs, creating gaps
90+
print "argv = 4"
91+
generate(sys.argv[2], int(sys.argv[3]), int(sys.argv[1]))
7892
else:
7993
# catchall, print README
8094
print_readme()

0 commit comments

Comments
 (0)