-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsg_nric_tool.py
More file actions
77 lines (61 loc) · 1.89 KB
/
Copy pathsg_nric_tool.py
File metadata and controls
77 lines (61 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
## written with version 3.9.5
import random
ST_base = ['J','Z','I','H','G','F','E','D','C','B','A']
FG_base = ['R','Q','P','N','M','L','K','X','W','U','T']
weight = [2,7,6,5,4,3,2]
def isValidNric(nric = ""):
"""
:param nric: format in XnnnnnnnX, n=number, X=alphabet
:return: boolean, valid=true, invalid=false
"""
if len(nric) != 9:
return False
if not nric[1:len(nric)-1].isdigit():
return False
if nric[len(nric)-1] != getCheckDigit(nric):
return False
return True
def getCheckDigit(nric = ""):
""" generate check digit for last character """
digits = nric[1:len(nric)-1]
sum = 0
idx = 0
for digit in digits:
sum += (int(digit) * weight[idx])
idx+=1
if nric[0].upper() in "TG":
sum += 4
if nric[0].upper() in "FG":
return FG_base[sum%11]
if nric[0].upper() in "ST":
return ST_base[sum%11]
def generateNric(prefixz="", digitz=""):
"""
:param prefixz: either S, T, F, G, randomly generated when not provided
:param digitz: digit to prefix e.g when 87, then X87nnnnnX, when 8954, then X8954nnnX
:return: 9 characters XnnnnnnnX, n=number, X=alphabet
"""
digits = digitz
while(len(digits)!=7):
digits = digits + str(random.randint(0, 9))
if not prefixz:
rnd = random.randint(0,4)
if rnd == 0:
prefixz = "S"
elif rnd == 1:
prefixz = "T"
elif rnd == 1:
prefixz = "F"
else:
prefixz = "G"
else:
prefixz = prefixz[0].upper()
nricPart = prefixz + digits
return nricPart + getCheckDigit(nricPart + "X")
if __name__ == "__main__":
generationCount = 50
for x in range(1, generationCount):
digitz = "9500000"
digitz = digitz[0:len(digitz) - len(str(x))]
digitz = f"{digitz}{x}"
print(generateNric("t", digitz))