如何调试社会保险号验证码?

时间:2017-05-22 10:59:20

标签: python

我正在尝试验证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

1 个答案:

答案 0 :(得分:0)

date == datetime.strptime(date,'%d%m%y')永远不会奏效。 datetime.strptime返回datetime.datetime个实例,date是六个字符的字符串。

如果您尝试验证最后六个字符是否为有效日期,则应将日期部分解析为整数,并将其传递给datetime.date。如果值不敏感,它将引发ValueError