身份证数字校验码计算公式
18位身份证号码验证公式及标准
18位身份证号码验证工具
计算依据及说明
根据《中华人民共和国国家标准》(GB 11643-1999)规定:
公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码(1-6位):表示编码对象常住户口所在县(市、旗、区)的行政区划代码
生日码(7-14位):表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
例如:1981年05月11日就用19810511表示。
顺序码(15-17位):为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。
其中奇数分给男性,偶数分给女性。
校验码(18位):是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
第十八位数字的计算方法为:
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位数字上出现罗马数字的Ⅹ。
如果余数是10,身份证的最后一位号码就是2。
以上算法来源于网络,具体规范见国家相关标准。
Excel判断身份证号校验码
Excel判断身份证号校验码假设在一个工作表中:A列是姓名,B列是身份证号码,C列是备注。
在B列中输入18位身份证号码后,在C2单元格中输入计算数组公式:=RIGHT(B2,1)=MID("10X98765432",MOD(SUM(MID(B2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1) 然后再将该公式复制给C列其他单元格。
公式的计算结果是一个逻辑值,True表示校验正确,即计算出来的校验码与输入的相同,而False则表示校验错误。
值得注意的是,使用校验码进行校验判断为正确的身份证号码未必是正确的,但判断为错误的则肯定是错误的,即通过校验的只是身份证号码正确的必要条件而非充分条件。
当然,在实际输入中,身份证号码输入错误而校验正确的情况很少见。
在大多数情况下,使用校验码进行校验可以大大提高身份证号码输入的正确性。
RIGHT 根据所指定的字符数返回文本字符串中最后一个或多个字符。
MID 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。
MOD 返回两数相除的余数。
SUM 返回某一单元格区域中所有数字之和。
ROW 返回引用的行号。
INDIRECT 返回由文本字符串指定的引用。
或者输入数组公式:=IF(LEN(B2)<>18,"错误",IF(MID("10X98765432",MOD(SUM(MID(B2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=MID(B2,18,1), "正确","错误"))。
身份证校验码计算公式
身份证校验码计算公式校验码是识别一个身份证号码是否真实存在的重要的依据。
那我们要如何通过校验码来判断一个身份证号码是否真实的呢?校验码如何判断身份证号码真伪呢?我们来看看具体计划过程。
第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。
第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。
第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。
第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。
身份证正确检验及验证公式
验证公式一=IF(LEN(H20)=18,IF(RIGHT(H20,1)="X",IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18) )*7 LEFT(RIGHT(H20,17))*9 LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10LEFT(RIGHT(H20,5))*5 LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1)),"正确!","出错啦!"),IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18))*7 LEFT(RIGHT(H20,17))*9LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2 LEFT(RIGHT(H20,11))*1LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4 LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))*1,"正确!","出错啦!")),IF(LEN(H20)=15,"老号,请注意!",IF(LEN(H20)=0,"缺号码","位数不对!")))验证公式二=MID("10X98765432",MOD(SUMPRODUCT(MID(H20,ROW(INDIRECT("1:17")),1)*2^(18 -ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(H20,1)身份证有15位和18位两种,身份证位数是否正确,我们可以用LEN函数判断。
通过excel公共函数计算二代公民身份证号码末位校验码
通过excel公共函数计算二代公民身份证号码末位校验码/验证码(附公式可直接使用)闲来无事,用EXCEL写了个公式(本文最后),可以根据身份证号码前17位计算第18位校验码的,经过验证,非常有效。
使用这个公式可以自己随意编造可以通过验证的身份证号码(感觉在为办证的做贡献。
)18位身份证号码的结构:现在的二代身份证由18位数字组成1、前6位是行政区规划代码,第一位是区位号(如西北、西南),第二位为省份编号,第三、四位是城市编号,第五、六位是县区编号,01-19代表市辖区,20以后代表郊县、县级市等辖区。
具体的行政区域规划码可以可以在国家统计局网站查询:/tjbz/xzqhdm/t20021125_46781.htm2、第7-14位是出生年月日,格式是yyyymmdd;3、第15-17位是顺序码,即同一地区相同生日的人的顺序编码,随便写;4、第18位是根据GB 11643-1999和IOS 7064计算出的校验码,计算方式比较复杂,文章中的公式就是用来计算这个校验码的!下图是完整的身份证效验码计算方式:但是因为上图中的公式太多,不方便直接使用,所以我把上图中所有的公式整合到了一个单元格中,就是下面的超级公式~!现在,打开excel,先将A1单元格属性设置为文本,再把你准备好的1-17位身份证号码填入A1单元格,然后把公式拷到随便哪个单元格中,完整的身份证号码就计算出来了!还可以用下拉的方式同时计算多个号码,很省事吧!公式如下:=IF((LEN(A1))=17,(A1&IF(VALUE(MOD((SUM((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,(MI D(A1,11,1))*7,(MID(A1,12,1))*9,(MID(A1,13,1))*10,(MID(A1,14,1))*5,(M ID(A1,15,1))*8,(MID(A1,16,1))*4,(MID(A1,17,1))*2)),11))=0,1,(IF(VALU E(MOD((SUM((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))=1,0,(IF(VALUE(MOD((SUM((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))= 2,"X",12-VALUE(MOD((SUM((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)))))))),"输入长度不等于17位!")。
身份证校验码的确定计算方法11111
身份证识别码的确定计算方法大陆的身份证为18位,老的身份证是15位。
眼下人们在换发的新身份证俗称为“二代身份证”或者叫“二代征”,老身份证叫“一代证”。
一代身份证是上世纪80年代中期开始的,是依据《中华人民共和国居民身份证条例》(1985年9月6日第六届全国人民代表大会常务委员会第十二次会议通过1985年9月6日中华人民共和国主席令第二十九号公布1985年9月6日起施行)制作颁发的,采用印刷和照相技术塑封而成,只能视读不能机读,易于伪造,而且无法迅捷有效地对公民进行人、证同一认定,不利于有效打击伪造、变造居民身份证以及利用伪造证件、他人证件进行金融犯罪、流窜作案等违法犯罪活动,严重制约了这一法定证件在证明和识别公民身份方面的作用的正常发挥。
“二代证”是依据《中华人民共和国居民身份证法》(2003年6月第十届全国人大常委会第三次会议通过了《居民身份证法》,于2004年1月1日起施行。
本法自2004年1月1日起施行,《中华人民共和国居民身份证条例》同时废止)制作颁发的。
“二代证”由多层聚酯材料复合而成的单页卡式证件,可以视读,内嵌非接触式IC卡芯片作为“机读”存储器,可以将变动信息(如住址变动)追加写入;芯片使用特定的逻辑加密算法,有利于证件制发、使用中的安全管理,增强防伪功能;芯片和电路线圈在证卡内封装,能够保证证件在各种环境下正常使用,寿命在十年以上;并且具有读写速度快,使用方便,易于保管,以及便于各用证部门使用计算机网络核查等优点。
二代证”主要采用数字防伪和印刷防伪技术。
数字防伪用于机读信息的防伪,是将持证人的照片图象和身份项目内容等数字化后存入芯片。
可以有效起到证件防伪的作用,防止伪造证件或篡改证件机读信息内容。
证件表面的视读防伪,主要是采用高新技术制作的防伪标识和印刷防伪技术,具有一定的防伪功效。
18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。
校验位的计算方法
校验位的计算方法
以下是 7 条关于校验位的计算方法:
1. 嘿,你知道吗?校验位可以通过简单的相加来算哟!比如说身份证号的最后一位,就是一种校验位呀。
就像搭积木一样,把数字们加起来,看看结果对不对,来检测有没有错误呢!这多有趣呀!
2. 哇塞,取模运算也可以用来算校验位呢!就好像分糖果一样,按照一定的规则来确定余数,这个余数就是校验位。
比如在一些编码中,通过取模运算来确定校验位,是不是很神奇?
3. 嘿呀,奇偶校验位也好算呀!如果数字是奇数个 1,那就是奇校验;反之就是偶校验。
这就好像判断是晴天还是雨天一样容易呢!像网络传输中经常用到奇偶校验位呀,你想不想知道它是怎么发挥作用的?
4. 哈哈,CRC 校验的计算方法也不难理解呢!它就像给信息做了一个特别的标记,通过一系列复杂的计算来确定。
比如在数据存储和传输中,用它来保证数据的准确性呢,真的超厉害的!
5. 咦,还有一种基于算法的校验位计算方法呢。
就跟解谜题似的,按照特定的步骤和公式来求解。
像有些软件的验证码就是这么来计算的,是不是让你感觉很新奇呀?
6. 哇哦,哈希值也能当校验位哟!它就像是给数据生成的独特指纹一样。
好像在数字世界里给每个东西都贴上了属于它自己的标签,然后通过哈希值来验证呢,这不是很奇妙吗?
7. 嘿,直接对比前后数据也可以当作一种校验方法呢!就像是照着镜子看自己,前后是不是一样。
比如在文件传输前后进行对比,看看有没有变化,这也是很实用的校验位计算方式呀!
我的观点结论就是:校验位的计算方法多种多样,每一种都有其独特的魅力和作用,在各种领域中都发挥着重要的保障信息准确性的功能呢!。
身份证号码校验算法实现
/*** 【身份证号码的规则】1、15位身份证号码组成:ddddddyymmddxxs共15位,其中:* dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。
yy为2位的年份代码,是身份证持有人的出身年份。
* mm为2位的月份代码,是身份证持有人的出身月份。
dd为2位的日期代码,是身份证持有人的出身日。
这6位在一起组成了身份证持有人的出生日期。
* xx为2位的顺序码,这个是随机数。
s为1位的性别代码,奇数代表男性,偶数代表女性。
2、18位身份证号码组成:* ddddddyyyymmddxxsp共18位,其中:其他部分都和15位的相同。
年份代码由原来的2位升级到4位。
最后一位为校验位。
校验规则是:* (1)十七位数字本体码加权求和公式S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和* Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2* (2)计算模Y = mod(S, 11) (3)通过模得到对应的校验码Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8* 7 6 5 4 3 2 也就是说,如果得到余数为1则最后的校验位p应该为对应的0.如果校验位不是,则该身份证号码不正确。
*/package citi;import java.util.Scanner;/*** @author D.puntu**/public class MyIdCard {private static String Id = null;private static String myIndexStr, index = null;private static int i = 0;private static int m = 0, n = 0, myIndex;private static int areaId, year, mon, day, sex;private static int id = 0;// 从第一位到第十七位的数字的权值private static int myArrayIndex[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,10, 5, 8, 4, 2 };public static void main(String[] args) {startIndex();}private static void startIndex() {Scanner in = new Scanner(System.in);System.out.println("请输入身份证号(18位数字):");Id = in.next();i = Id.length();while (i != 18) {if (i > 18) {System.out.println("身份证号码只有18位数字,但是您输入" + i + "位,请重新输入");Id = in.next();i = Id.length();} else if (i < 18) {System.out.println("身份证号码应该有18位数字,但是您输入" + i + "位,请重新输入");Id = in.next();i = Id.length();}}if (i == 18) {while (!getAreaId(Id, i) || !getYear(Id, i) || !getMon(Id, i)|| !getDay(Id, i)) {Id = in.next();i = Id.length();}}getIndex(Id, i, getSum(Id, i));}private static int getSum(String id, int i) {for (m = 0; m < myArrayIndex.length; m++) {n = n + Integer.parseInt(id.substring(m, m + 1)) * myArrayIndex[m]; // 前17位加权后的和}myIndex = n % 11;// 取模return myIndex;}private static void getIndex(String id, int i, int m) {myIndexStr = id.substring(i - 1, i);// 取得校验位// 算出校验位switch (m) {case 0:index = "1";break;case 1:index = "0";break;case 2:index = "X";break;case 3:index = "9";break;case 4:index = "8";break;case 5:index = "7";break;case 6:index = "6";break;case 7:index = "5";break;case 8:index = "4";break;case 9:index = "3";break;case 10:index = "2";break;}if (index.equalsIgnoreCase(myIndexStr)) {System.out.println("输入的身份证号码有效!!");} else {System.out.println("输入的身份证号码无效!!");}}/*** 前六位范围110000----659001*/public static boolean getAreaId(String str, int i) {boolean myAreaId = false;areaId = Integer.parseInt(str.substring(id, id + 6));if (areaId > 659001 || areaId < 110000) {System.out.println("输入的身份证号码地址位有错误!!");myAreaId = false;} else {myAreaId = true;}return myAreaId;}public static boolean getYear(String str, int i) {boolean myYear = false;year = Integer.parseInt(str.substring(id + 6, id + 10));if (year > 2015 || year < 1865) {System.out.println("输入的身份证号码年份有错误!!请重新输入身份证号码");myYear = false;} else {myYear = true;}return myYear;}public static boolean getMon(String str, int i) {boolean myMon = false;mon = Integer.parseInt(str.substring(id + 10, id + 12));if (mon <= 12 && mon >= 1) {myMon = true;} else {System.out.println("输入的身份证号码月份有错误!!请重新输入身份证号码");}return myMon;}public static boolean getDay(String str, int i) {boolean myDay = false;int dayToMon = Integer.parseInt(str.substring(id + 10, id + 12));day = Integer.parseInt(str.substring(id + 12, id + 14));if (day >= 1 && day <= getMonday(dayToMon)) {myDay = true;} else {System.out.println("输入的身份证号码天数与对应的月份不一致!!请重新输入身份证号码");}return myDay;}public static int getMonday(int i) {int jDay = 0;switch (i) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:jDay = 31;case 4:case 6:case 9:case 11:jDay = 30;break;case 2:jDay = 28;}return jDay;}}。
18位身份证号码校验位规则
18位⾝份证号码校验位规则根据〖中华⼈民共和国国家标准 GB 11643-1999〗中有关公民⾝份号码的规定,公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位数字校验码组成。
排列顺序从左⾄右依次为:六位数字地址码,⼋位数字出⽣⽇期码,三位数字顺序码和⼀位数字校验码。
地址码表⽰编码对象常住户⼝所在县(市、旗、区)的⾏政区划代码。
⽣⽇期码表⽰编码对象出⽣的年、⽉、⽇,其中年份⽤四位数字表⽰,年、⽉、⽇之间不⽤分隔符。
顺序码表⽰同⼀地址码所标识的区域范围内,对同年、⽉、⽇出⽣的⼈员编定的顺序号。
顺序码的奇数分给男性,偶数分给⼥性。
校验码是根据前⾯⼗七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
下⾯举例说明该计算⽅法。
15位的⾝份证编码⾸先把出⽣年扩展为4位,简单的就是增加⼀个19,但是这对于1900年出⽣的⼈不使⽤(这样的寿星不多了)某男性公民⾝份号码本体码为34052419800101001,⾸先按照公式⑴计算:∑(ai×Wi)(mod 11) (1)公式(1)中:i----表⽰号码字符从右⾄左包括校验码在内的位置序号;ai----表⽰第i位置上的号码字符值;Wi----⽰第i位置上的加权因⼦,其数值依据公式Wi=2(n-1)(mod 11)计算得出。
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1ai×Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1根据公式(1)进⾏计算:∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189189 ÷ 11 = 17 + 2/11∑(ai×Wi)(mod 11) = 2然后根据计算的结果,从下⾯的表中查出相应的校验码,其中X表⽰计算结果为10:∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2根据上表,查出计算结果为2的校验码为所以该⼈员的公民⾝份号码应该为 340524************。
身份证校验算法
下面介绍算法:
计算公式令结果为 Y,Y的计算公式为:Y = mod(S, 11)根据下表找出 Y 对应的校验码即为要求身份证号码的校验码C。
例如:假设某女性居民的15位身份证号码是320105820927512,32表示江苏省,01表示南京市,05表示鼓楼区,820927表示1982年9月27日。512表示是该地区同年同月同日的第512人,其中2表示是女性。那么,升级为18位后的号码为32010519820927512C。下面就根据公式来计算C的值。
根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
String[] w = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
for (int i=0; i<17; i++) {
int ai = Integer.parseInt(arrIdCard.substring(i,i+1));
具体实现代码如下(JAVA):
public boolean isIdCard(String arrIdCard) {
int sigma = 0;
身份证正确检验及验证公式
验证公式一=IF(LEN(H20)=18,IF(RIGHT(H20,1)="X",IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18) )*7 LEFT(RIGHT(H20,17))*9 LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10LEFT(RIGHT(H20,5))*5 LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1)),"正确!","出错啦!"),IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18))*7 LEFT(RIGHT(H20,17))*9LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2 LEFT(RIGHT(H20,11))*1LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4 LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))*1,"正确!","出错啦!")),IF(LEN(H20)=15,"老号,请注意!",IF(LEN(H20)=0,"缺号码","位数不对!")))验证公式二=MID("10X98765432",MOD(SUMPRODUCT(MID(H20,ROW(INDIRECT("1:17")),1)*2^(18 -ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(H20,1)身份证有15位和18位两种,身份证位数是否正确,我们可以用LEN函数判断。
身份证计算公式
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。
顺序码的奇数分给男性,偶数分给女性。
校验码是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。
下面举例说明该计算方法。
某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:∑(ai×Wi)(mod 11) (1)公式(1)中:i----表示号码字符从由至左包括校验码在内的位置序号;ai----表示第i位置上的号码字符值;Wi----示第i位置上的加权因子,其数值依据公式Wi=2(n-1)(mod11)计算得出。
(2的n-1次方;n初始值是1)ia iw iai×Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1根据公式(1)进行计算:∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189189 ÷ 11 = 17 + 2/11∑(ai×Wi)(mod 11) = 2然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:校验位余数∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 340524************。
18171615141312111098765432134052419800101001a7910584216379105842101234567891010X9876543200101001X。
公民身份证编码规则
15位的身份证号
dddddd yymmdd xx p
18位的身份证号
dddddd yyyymmdd xx p y
其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同
yyyymmdd yymmdd 为出生年月日
xx顺号类编码
p性别
18位中末尾的y为校验码,在网上可以找到算法
校验码: 1 0 X 9 8 7 6 5 4 3 2
四、举例如下:
北京市朝阳区: 11010519491231002X
广东省汕头市: 440524188001010014
15位的不需要研究了,很简单的:
dddddd yymmdd xx p
i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
(2)校验码字符值的计算
Y: 0 1 2 3 4 5 6 7 8 9 10
ai×Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1
根据公式(1)进行计算:
∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189
189 ÷ 11 = 17 + 2/11
∑(ai×Wi)(mod 11) = 2
将前17位的ascii码值经位移、异或运算结果不在0-9的令其为x
身份证正确检验及验证公式
公式二出处
EXCEL提取身份证出生日期、性别、检验身份证号码正确性
中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为:
15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码。
18位:6位数字常住户口所在县市的行政区划代码,8位数字出生日期代码,3位数字顺序码和1位检验码。
假定身份证号码在B1单元格,下面的公式可以综合判断以上三种错误:
验证公式三
=IF(OR(LEN(B1)=18,LEN(B1)=15),IF(LEN(B1)=18,IF(OR(MONTH(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,11,2)),DAY(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,13,2))),"月日错误",""),IF(LEN(B1)=15,IF(OR(MONTH(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,9,2)),DAY(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,11,2))),"月日错误",""))),"身份证位数不对")&IF(AND(LEN(B1)=18,1*MID(B1,7,4)>YEAR(TODAY())-6),"年份错误","")
身份证号码的最后一位校验码是怎么计算出来的
身份证号码的最后一位校验码是怎么计算出来的?-身份证号码和真实姓名查询身份证是用于证明持有人身份的证件,多由各国或地区政府发行予公民,一般特指中华人民共和国居民身份证,大陆1984年前写作“身分证”。
1984年4月6日,国务院发布《中华人民共和国居民身份证试行条例》,并且开始颁发第一代居民身份证。
2004年3月29日起,中国大陆正式开始为居民换发内藏非接触式IC卡智能芯片的第二代居民身份证,第二代身份证表面采用防伪膜和印刷防伪技术,使用个人彩色照片,而且内置了数字芯片,采用了数字防伪措施,存有个人图像和信息,可以用机器读取。
我国不满16岁的公民可以采取自愿的原则申请领取第二代身份证。
要核查对方的身份证是否真实,一定要提高警惕,以免被使用假身份证的人侵犯财产或者人身安全!如何核查身份证的真假?在本网页按照提示填写被核查人的身份证号码、姓名和您的手机号码,然后点击“同意服务条款并提交”,然后按照网页提示操作就可以了,核实身份证号码和真实姓名的系统是直接调用全国身份证核查系统的,利用他们提供的接口进行身份证真伪核查的,用于核查您所提供的身份证号码和姓名是否一致,如果两者一致,并且核查数据库中存在照片,才可以显示出被核查者的照片。
在真正核查之前,没有人知道具体核查结果的,核查是按次收费的,只要核查出结果(核查结果包括:核查不一致,核查一致无照片,核查一致有照片),实际核查需要联网身份证核查系统,这是按次收费的,每核查一次,全国身份证中心都要收费一次。
一般只要您提供的身份证号码和姓名核查一致的话,能提供出照片的可能性在90%以上。
2011年居民身份证号码和真实姓名查询步骤:第一步(输入居民身份证号码和姓名):输入真实姓名和真实身份证号码,点击:“确认查询”,在弹出的信息窗口中将生成一个查询订单号,请记录此订单号;第二步(付款):记录好订单号后,点击“确认”按钮,将出现支付宝支付平台(如图一),请用您的支付宝帐号登录,登录后您可以用支付宝余额支付(需安装支付宝数字证书)或网银支付(如图二)。
身份证计算公式
ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
ai×Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1
根据公式(1)进行计算:
i----表示号码字符从由至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,其数值依据公式Wi=2(n-1)(mod 11)计算得出。
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
2、地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3、出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4、顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不使用(这样的寿星不多了)
某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:
∑(ai×Wi)(mod 11)……………………………………(1)
公式(1)中:
校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2
根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 34052419800101001X。
C#代码:
private string per15To18(string perIDSrc)
校验码
1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成。
本体代码采用系列(即分区段)顺序编码方法。
校验码按照以下公式计算:式中: MOD——代表求余函数;i——代表代码字符从左至右位置序号;Ci——代表第i位上的代码字符的值(具体代码字符见附表);C9——代表校验码;Wi——代表第i位上的加权因子,其数值见下表:当C9的值为10时,校验码应用大写的拉丁字母X表示;当C9的值为11时校验码用0表示。
3×10+4×5+5×8+6×4+7×2+8×1+9×6+0×3+1×7+2×9+3×10+4×5+5×8+6×4+7×2=368;计算S÷11的余数T:492 mod 11=8;计算(12-T)÷11的余数R,如果R=10,校验码为字母“X”;如果R≠10,校验码为数字“R”:(12-8)mod 11=4。
该17位数字的校验码就是4,聚合在一为123456789012345674。
5、校验码(1)十七位数字本体码加权求和公式S = Ai * Wi, i = 2, ... , 18Y = mod(S, 11)i: 表示号码字符从右至左包括校验码字符在内的位置序号Ai:表示第i位置上的身份证号码字符值Wi:表示第i位置上的加权因子i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2(2)校验码字符值的计算Y: 0 1 2 3 4 5 6 7 8 9 10校验码: 1 0 X 9 8 7 6 5 4 3 2。
18位身份证号码最后一位校验码的计算方法-推荐下载
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对 象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表 示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的 奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照 ISO 7064:1983.MOD 11-2 校验码计算出来的检验码。下面举例说明该计算方法。
某男性公民身份号码本体码为 34052419800101001,首先按照公式⑴计算:
∑(ai×Wi)(mod 11)……………………………………(1) 公式(1)中: i----表示号码字符从由至左包括校验码在内的位置序号; ai----表示第 i 位置上的号码字符值; Wi----示第 i 位置上的加权因子,其数值依据公式 Wi=2(n-1)(mod 11)计算得出。
(3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2 四、举例如下: 北京市朝阳区: 11010519491231002X 广东省汕头市: 440524188001010014
=============================
表示编码对象出生的年、月、日,按 GB/T7408 的规定执行,年、月、日代码之间不用分隔 符。 4、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺 序码的奇数分配给男性,偶数分配给女性。 5、校验码 (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前 17 位数字的权求和 Ai:表示第 i 位置上的身份证号码数字值 Wi:表示第 i 位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模 Y = mod(S, 11)
身份证号第18位校验xls
校验方法:在蓝色格中输入身份证号,黄色格中即自动计算出校验码。
校验码的计算方法(摘自百度百科):
1、将前面的身份证号码17位数分别乘以不同的系数。
从第一位到第十七位的系数分别为:7-9-10-5
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。
其分别对应的最后一位身份证的号码
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现的是 X。
如果余数是10,身份证的最例如:某男性的身份证号码为【530102************】, 我们看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(也就是说其余数是2。
最后通过对应规则就可以知道余数2对应的检验码是X。
所以,可以判定这是一个正
系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
如果余数是10,身份证的最后一位号码就是罗马数字 2。
证是不是合法的身份证。
*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的结果是所以,可以判定这是一个正确的身份证号码。
除以11得出的结果是189/11=17----2,。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
身份证数字校验码计算公式
在中国,每个人的身份证号码都是唯一的,其中包括了个人的基本信息和校验码。
校验码是身份证号码中的最后一位数字,它是根据身份证号码的前17位数字计算而得到的。
校验码的存在可以帮助验证身份证号码的有效性,防止错误或伪造的身份证号码的使用。
那么,身份证数字校验码是如何计算的呢?
首先,我们需要了解身份证号码的结构。
中国的身份证号码共有18位数字,其中前17位是个人的基本信息,包括地区、出生年月日和顺序码,最后一位是校验码。
校验码的计算是通过对前17位数字进行一系列的运算得到的。
校验码的计算公式如下:
1. 将身份证号码的前17位数字分别乘以对应的加权因子,然后将乘积相加。
2. 将上一步得到的结果除以11,得到余数。
3. 根据余数在一个预先设定的对照表中找到对应的校验码。
下面我们来详细解释一下这个计算公式。
首先,加权因子是一个固定的数组,分别为,7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
这些数字分别对应身份证号码的前17位数字,用来进行加权计算。
接下来,我们将身份证号码的前17位数字分别乘以对应的加权因子,然后将乘积相加。
假设一个身份证号码的前17位数字分别为a1、a2、a3...a17,对应的加权因子分别为w1、w2、w3...w17,那么校验码的计算公式可以表示为:S = a1w1 + a2w2 + a3w3 + ... + a17w17。
其中S表示加权计算的结果。
然后,我们将S除以11,得到余数M。
余数M的取值范围为0到10。
最后,我们根据余数M在一个对照表中找到对应的校验码。
对照表如下:
0,1。
1,0。
2,X。
3,9。
4,8。
5,7。
6,6。
7,5。
8,4。
9,3。
10,2。
根据上述对照表,我们可以找到对应余数M的校验码。
通过以上的计算公式,我们可以得到身份证号码的校验码。
这个计算过程可以
帮助我们验证身份证号码的有效性,防止错误或伪造的身份证号码的使用。
同时,这个计算公式也是身份证号码的一部分,是保护个人信息安全的重要手段之一。
总的来说,身份证数字校验码的计算公式是一个基于加权计算和取余数的算法,通过这个算法可以得到身份证号码的校验码,用来验证身份证号码的有效性。
这个计算公式的存在可以帮助我们保护个人信息的安全,防止错误或伪造的身份证号码的使用。
希望大家能够重视身份证号码的安全性,同时也能够了解和掌握这个计算公式,以便在需要时对身份证号码进行验证。