# 身份证验证规则:# 第十八位数字(校验码)的计算方法为:# 1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2# 2.将这17位数字和系数相乘的结果相加与11进行相除。# 3.余数0 1 2 3 4 5 6 7 8 9 10这11个数字,其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。# 4.例如 余数为 0 , 则身份证最后一位就是1# 余数为 2 , 则身份证最后一位就是罗马数字X# 余数为 10 , 则身份证最后一位就是2code = '5042451991239'factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]sum = 0ai = 0wi = 0for i in range(17):ai = int(code[i])wi = factor[i]sum += ai * wilast = parity[sum % 11]print("%s%s"%(code,last))