99import sys
1010
1111def print_readme ():
12- print """bsn-gen.py [number] [from]
12+ print """bsn-gen.py [number] [from] [distance]
1313
1414Generates [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
1819When no number is given, this help message is displayed.
1920This 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
6376if 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
7285elif 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 ]))
7892else :
7993 # catchall, print README
8094 print_readme ()
0 commit comments