跳至主要內容

身份证校验码计算方法

Houjin-Tech大约 3 分钟python

身份证校验码计算方法

计算方法

  1. 将身份证号码从左至右标记为 a1,a2,,a18a_{1},a_{2},\dots ,a_{18} , 则 a18a_{18} 即为校验码
  2. 计算权重系数 Wi=218i  mod  11W_{i}=2^{18-i}\;mod\;11 ;其中 modmod 表示求余数。
  3. 计算 S=i=117aiWiS= \sum_{i=1}^{17} a_{i} \cdot W_{i}
  4. a18=(12(S  mod  11))  mod  11a_{18} =(12-(S\;mod\;11))\;mod\;11

测试代码

# 0.定义变量含义
W = []  # 权重列表
S = 0   # 权重与每位身份证号的乘积之和
# 1.用户输入18位身份证号
idnum = input("输入18位身份证号:\n")
while len(idnum) != 18:
    idnum = input("输入身份证号")
# 2.计算前17位数的权重系数
for i in range(1,18):
   W.append(2**(18-i) % 11)
print("权重列表 W = %s" % W)
# 3.计算S,即权重与每位身份证号的乘积之和
for i in range(17):
   S += int(idnum[i])*W[i]
print("权重与每位身份证号的乘积之和 S = %d" % S)
# 4.计算a18
a18 = (12-(S%11))%11
if a18 == 10:
    a19 = 'X'
print("身份证末位 a18 = %s" % a18)

在线运行