身份证校验码

身份证校验码

目录导航

依据

身份证最后一位是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

计算方法

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,余数所对应的最后一位身份证号是X,就会在身份证的第18位数字上出现罗马数字的X。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。

首先:我们计算3*7+4*9+0*10+5*5+...+1*2,前17位的乘积和是189

然后:用189除以11得出的结果是商17余2

最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

也可以按照18位来计算,第一位数的权重是07,第二位是09(见下表)[1]

序号 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01(从右向左数)

权重 07 09 10 05 08 04 02 01 06 03 07 09 10 05 08 04 02 01

号码03 04 00 05 02 04 01 09 08 00 00 01 00 01 00 00 01 0X

如果第18位是x,那么就按10计算,

加权求和=21+36+0+25+16+16+2+9+48+0+0+9+0+5+0+0+2+10=199,

其中07*03=21,09*04=36,10*00=0,其余以此类推,

199除以11等于18,余数是1,所以这个号码是正确的。

按18位来计算,只要最后的加权和除以11,余数只要是1,那么身份证号码就是正确的。

计算公式

Excel算法

请在A1单元格输入18位身份证号码.

有的时候需要修改单元格的格式为文本,否则数字会被取近似值.

然后在任意单元格输入下面的公式就可以得到校验码.

看看是否与最后一位相符.就知道身份证号码是否符合编码规则了.

=LOOKUP(MOD(MID($A$1,1,1)*MOD(2^17,11)+MID($A$1,2,1)*MOD(2^16,11)+MID($A$1,3,1)*MOD(2^15,11)+MID($A$1,4,1)*MOD(2^14,11)+MID($A$1,5,1)*MOD(2^13,11)+MID($A$1,6,1)*MOD(2^12,11)+MID($A$1,7,1)*MOD(2^11,11)+MID($A$1,8,1)*MOD(2^10,11)+MID($A$1,9,1)*MOD(2^9,11)+MID($A$1,10,1)*MOD(2^8,11)+MID($A$1,11,1)*MOD(2^7,11)+MID($A$1,12,1)*MOD(2^6,11)+MID($A$1,13,1)*MOD(2^5,11)+MID($A$1,14,1)*MOD(2^4,11)+MID($A$1,15,1)*MOD(2^3,11)+MID($A$1,16,1)*MOD(2^2,11)+MID($A$1,17,1)*MOD(2^1,11),11),{0;1;2;3;4;5;6;7;8;9;10},{1;0;"X";9;8;7;6;5;4;3;2})

用上面的公式,只是得到最后一位校验码,下面把这个公式进一步简化改进,可以直接判定身份证号码是否正确,公式如下:

=IF(LOOKUP(MOD(MID(A1,1,1)*7+MID(A1,2,1)*9+MID(A1,3,1)*10+MID(A1,4,1)*5+MID(A1,5,1)*8+MID(A1,6,1)*4+MID(A1,7,1)*2+MID(A1,8,1)*1+MID(A1,9,1)*6+MID(A1,10,1)*3+MID(A1,11,1)*7+MID(A1,12,1)*9+MID(A1,13,1)*10+MID(A1,14,1)*5+MID(A1,15,1)*8+MID(A1,16,1)*4+MID(A1,17,1)*2,11),{0;1;2;3;4;5;6;7;8;9;10},{"1";"0";"X";"9";"8";"7";"6";"5";"4";"3";"2"})=UPPER(MID(A1,18,1)),"正确","错误")

如果返回值是“正确”,那么身份证号码通过校验,如果返回“错误”,则身份证号码肯定错了!

用数组公式计算:=MID("10X98765432",MOD(SUM(MID($A$1,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1) 按ctrl+shift+Enter 计算

除以公式外

可以直接使用的简化参考公式如下两种:(以下皆为数组公式,身份证号码在B2单元格)

一、按规则

文字表达:将2的17次幂+2的16次幂+……+2的1次幂分别对应乘以身份证号码的1-17位数字,最后求和,再除以11,余数对应相应的字符

{=LOOKUP(MOD(SUM(2^{17;16;15;14;13;12;11;10;9;8;7;6;5;4;3;2;1}*MID($B2,ROW($1:$17),1)),11),{0,1;1,0;2,"X";3,9;4,8;5,7;6,6;7,5;8,4;9,3;10,2})}

二、按规律取数

文字表达:将身份证号码1-17位数字,分别乘以给定数字后求和,再除以11,余数对应相应的字符

{=LOOKUP(MOD(SUM(MID($B2,ROW($1:$17),1)*{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2}),11),{0,1;1,0;2,"X";3,9;4,8;5,7;6,6;7,5;8,4;9,3;10,2})}

ORALE SQL 计算语句

select decode(mod(substr('11010119570115701X',1,1)*7+

substr('11010119570115701X',2,1)*9+

substr('11010119570115701X',3,1)*10+

substr('11010119570115701X',4,1)*5+

substr('11010119570115701X',5,1)*8+

substr('11010119570115701X',6,1)*4+

substr('11010119570115701X',7,1)*2+

substr('11010119570115701X',8,1)*1+

substr('11010119570115701X',9,1)*6+

substr('11010119570115701X',10,1)*3+

substr('11010119570115701X',11,1)*7+

substr('11010119570115701X',12,1)*9+

substr('11010119570115701X',13,1)*10+

substr('11010119570115701X',14,1)*5+

substr('11010119570115701X',15,1)*8+

substr('11010119570115701X',16,1)*4+

substr('11010119570115701X',17,1)*2,11),'0','1','1','0','2','X','3','9','4','8','5','7','6','6','7','5','8','4','9','3','2') aa

from dual;

Python运用计算模型的计算代码

SFZ = input('身份证前17位: ')

if len(str(SFZ)) != 17:

raise ValueError('incorrect input')

print('身份证第18位:' + str((12-(sum([(int(str(SFZ[NUM]))*(2**(17-NUM)) % 11) for NUM in range(17)]) % 11)) % 11).replace('10','x'))

计算模型

第二代居民身份证号码的校验码计算模型第二代居民身份证号码的校验码计算模型

相关百科
返回顶部
产品求购 求购