当前位置:具才苑资料频道具才视界涉猎有益

身份证校验码

作者:佚名  来源:转载  发布/更新时间:2021-07-16 08:27:38

身份证号码中的校验码是身份证号码的最后一位,是根据GB 11643-1999中有关公民身份号码的规定,根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码。

规则依据
身份证最后一位是根据前面十七位数字码,按照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,就会在身份证的第18位数字上出现罗马数字的X。
例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
首先:我们计算3×7+4×9+0×10+5×5+...+1×2,前17位的乘积和是189
然后:用189除以11得出的结果是商17余2
最后:通过对应规则就可以知道余数2对应的数字是X。所以,这是一个合格的身份证号码。

计算公式
PHP计算代码
$card="xxx";//身份证号码
$map=array(1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2);
$sum = 0;
for($i = 17; $i > 0; $i--){
$s=pow(2, $i) % 11;
$sum += $s * $card[17-$i];
}
echo $map[$sum % 11];//这里显示最后一位校验码

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})
用数组公式计算:=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;

相关资料


站主其人 |   网站帮助 |   下载声明 |   网站地图 |   友情链接 |  用户列表


  具才苑是一个主要以中小学教师、师范类学生、中老年朋友为主要服务对象,教学资源丰富,兼顾社会关注问题的小型综合网站。具才苑是所有具才软件的首发官方网站,因此在这里下载的具才软件才是最新最可靠的。具才苑资源全部免费下载,但个别资源可能需要您先免费注册成本站用户后方可浏览或下载。