公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
身份证第18位(校验码)的计算方法
1、将前面的身份证号码17位数分别乘以不同的 系数。 从第一位到第十七位的系数分别为:
7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将身份证前17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。 其分别对应的最后 一位身份证的号码为 1-0-X-9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
#代码
ID = input('请输入十八位身份证号码: ')
if len(ID) != 18:
print("错误的身份证号码")
else:
print("你的身份证号码是 " + ID)
ID_check = ID[17]
W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
ID_num = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
ID_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
ID_aXw = 0
for i in range(len(W)):
ID_aXw = ID_aXw + int(ID[i]) * W[i]
ID_Check = ID_aXw % 11
if ID_check != ID_CHECK[ID_Check]:
print('错误的身份证号码')
else:
print('正确的身份证号码')
ID_add = ID[0:6]
ID_birth = ID[6:14]
ID_sex = ID[14:17]
# ID_add是身份证中的区域代码,如果有一个行政区划代码字典,就可以用获取大致地址#
year = ID_birth[0:4]
month = ID_birth[4:6]
day = ID_birth[6:8]
print("生日: " + year + '年' + month + '月' + day + '日')
if int(ID_sex) % 2 == 0:
print('性别:女')
else:
print('性别:男')
def a():
ID = input('请输入十八位身份证号码: ')
if len(ID) != 18:
print("错误的身份证号码")
print("请重新输入!")
a()
else:
print("你的身份证号码是 " + ID)
ID_check = ID[17]
W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
ID_num = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
ID_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
ID_aXw = 0
for i in range(len(W)):
ID_aXw = ID_aXw + int(ID[i]) * W[i]
ID_Check = ID_aXw % 11
if ID_check != ID_CHECK[ID_Check]:
print('错误的身份证号码')
a()
else:
print('正确的身份证号码')
ID_add = ID[0:6]
ID_birth = ID[6:14]
ID_sex = ID[14:17]
year = ID_birth[0:4]
month = ID_birth[4:6]
day = ID_birth[6:8]
print("生日: " + year + '年' + month + '月' + day + '日')
if int(ID_sex) % 2 == 0:
print('性别:女')
else:
print('性别:男')
if __name__ == "__main__":
a()