我正在尝试验证SSN,格式应为:xxxCd1d2m1m2y1y2。 " XXX"是连续分配的数字," C"是校验和数字," dd"捐出一天," mm"这个月和" yy"出生年份。
c == (x1*3 + x2*7 + x3*9 + d1*5 + d2*8 + m1*4 + m2*2 + y1*1 + y2*6) % 11
该数字应该只有10位数(不多或少)。当然 c 应该根据公式和日期格式应该是正确的。这是我到目前为止所得到的:
from datetime import datetime
def is_valid(digit_list):
ssn=list(digit_list)
x1, x2, x3, c, d1, d2, m1, m2, y1, y2 = [int(digit) for digit in digit_list]
date=digit_list[4:]
if len(ssn) == 10 and c == (x1*3 + x2*7 + x3*9 + d1*5 + d2*8 + m1*4 + m2*2 + y1*1 + y2*6) % 11 and date==datetime.strptime(date,'%d%m%y'):
print(True)
else:
print(False)
有效号码示例:5446180993
答案 0 :(得分:0)
date == datetime.strptime(date,'%d%m%y')
永远不会奏效。 datetime.strptime
返回datetime.datetime
个实例,date
是六个字符的字符串。
如果您尝试验证最后六个字符是否为有效日期,则应将日期部分解析为整数,并将其传递给datetime.date。如果值不敏感,它将引发ValueError
。