18位身份证校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
为什么除11,在于计算校验码时的函数。请看下边的函数:
公式如下:
∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) (公式一)
"*" 表示乘号
i--------表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
a[i]-----表示身份证号码第 i 位上的号码
W[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
上述计算方法是从右至左,如果从左至右,第1-17位权重W[i]的计算结果为:
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
计算公式一 令结果为 R
根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
R 0 1 2 3 4 5 6 7 8 9 10
C 1 0 X 9 8 7 6 5 4 3 2
由此看出 X 就是 10,罗马数字中的 10 就是X,所以在新标准的身份证号码中可能含有非数字的字母X。
根据上述校验码计算公式和原理,设置条件格式检查校验码方法如下:
假定身份证在B列(均为18位),检查其校验码是否正确,不正确的用红色字体显示。方法如下:
选中B列,“格式”/“条件格式”,将条件设为:
公式=RIGHT(B1)<>MID("10X98765432",MOD(SUMPRODUCT(MID(B$1,ROW(1:17),1)*MOD(2^(18-ROW(1:17)),11)),11)+1,1)
点“格式”,将字体设为红色即可。