身份证的各位数字代表的含义
1、前1、2位数字表示:所在省份的代码;
2、第3、4位数字表示:所在城市的代码;
3、第5、6位数字表示:所在区县的代码;
4、第7~14位数字表示:出生年、月、日;
5、第15、16位数字表示:所在地的派出所的代码;
6、第17位数字表示性别:奇数表示男性,偶数表示女性;
7、第18位数字是校检码:根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的校验码。
ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-第18位)
假设身份证号的前17位数字是:52052020200520999
前17位数字 | 5 | 2 | 0 | 5 | 2 | 0 | 2 | 0 | 2 | 0 | 1 | 3 | 1 | 4 | 9 | 9 | 9 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
加权因子 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
计算身份证号前17位各个数字与对应加权因子乘积的和:
S = 5×7+2×9+0×10+5×5+2×8+0×4+2×2+0×1+2×6+0×3+0×7+5×9+2×10+0×5+9×8+9×4+9×2
= 301;
计算S÷11的余数:301 ÷ 11=27…余4;
根据下面的校验码表找到对应的校验码,即为身份证号最后一位数字。
余数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
对应校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
余数4对应的校验码为8,所以该身份证号最终为:520520202005209998
校验码计算(Python 代码)
附上Python计算代码~
import math
check_code=[1,0,'X',9,8,7,6,5,4,3,2] # 余数对应的校验码
factor=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] # 身份证号对应的前17位加权因子
c_id="52052020200520999" #身份证号前17位
sum=0
for i in range(len(c_id)):
sum=sum+int(c_id[i])*factor[i] # 身份证号每一位与对应加权因子相乘并求和
print(sum)
remainder=divmod(sum,11)[1] # 所得和对11取余数
print("The last number is",check_code[remainder],'^_^')
运行结果:
301
The last number is 8 ^_^