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()
assert18==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=0for 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)