编辑代码

FACTOR=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
CODE_TABLE=('1','0','X','9','8','7','6','5','4','3','2','1')


def print_correct_sfz(sfz):
    sfz=sfz.upper()
    assert 18==len(sfz)

    for c in sfz:
        assert  "x"==c or c.isdigit(),'身份证号码必须有数字或者X组成'

    if "x" in 'sfz':
        assert 'x'==sfz[17:17+1],"最后一位数X"

    month=int(sfz[10:10+2]),
    assert  month >=1 and month<=12,'月份必须正确'
    mday=int(sfz[12:12+2])
    assert  mday>=1 and mday<=31,'日期必须正确'
    sum=0
    for i in range(17):
        sum+=int(sfz[I:i+1])*FACTOR[i]
        assert sfz[17:18]==CODE_TABLE[sum%11],校验码不正确
        print('身份证号码{}是正确的'.format(sfz))


if __name__ == '__main__':
    try:
        print_correct_sfz('34020320210907629X')
    except AssertionError as err:
        print(err)
    try:
        print_correct_sfz('340203202109076292')
    except AssertionError as err:
        print(err)
    try:
        print_correct_sfz('34020320210907629a')
    except AssertionError as err:
        print(err)