搜档网
当前位置:搜档网 › 身份证正确检验及验证公式

身份证正确检验及验证公式

身份证正确检验及验证公式
身份证正确检验及验证公式

验证公式一

=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))*2

LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3

LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10

LEFT(RIGHT(H20,5))*5 LEFT(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)),"正确!","出错啦!

"),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))*2 LEFT(RIGHT(H20,11))*1

LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7

LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5

LEFT(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函数判断。但身份证上的日期是否合法:月份是否在1-12之间,日期是否在1-31之间,并且2月份只有28或29天,其他月份30或31天,都不能超过范围。另外一般规定6岁以上才可以办理身份证,也就是年份也有一个超范围的可能性。综合起来看,有三类错误:“身份证位数不对”、“月日错误”、“年份错误”。

假定身份证号码在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*(M ID(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),"年份错误","")

验证公式四

=IF(LEN(A1)=0,"空",IF(LEN(A1)=15,"老号",IF(LEN(A1)<>18,"位数不对

",IF(CHOOSE(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,1,0,"X",9,8,7,6,5,4,3,2)=IF(ISNUMBER(RIGHT(A1,1)*1),RIGHT(A1,1)*1,"X") ,"正确","错误"))))

公式二出处

EXCEL提取身份证出生日期、性别、检验身份证号码正确性

中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为:

15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码。

18位:6位数字常住户口所在县市的行政区划代码,8位数字出生日期代码,3位数字顺序码和1位检验码。

其中3位数字顺序码,是为同一地址码的同年同月同日出生人员编制的顺序号,偶数的为女性,奇数的为男性。

1、提取籍贯地区的行政区划代码(A2为身份证号,下同)

15与18位通用:=LEFT(A2,6)

如果有一个编码和省份地区的对照表,可以用VLOOKUP函数来提取地区信息。

2、提取出生日期信息

15位:=--TEXT(19&MID(A2,7,6),"#-00-00")

18位:=--TEXT(MID(A2,7,8),"#-00-00")

15与18位通用:=--TEXT(IF(LEN(A2)=15,19,"")&MID(A2,7,6

IF(LEN(A2)=18,2,0)),"#-00-00")

简化公式:=--TEXT((LEN(A2)=15)*19&MID(A2,7,6 (LEN(A2)=18)*2),"#-00-00") (请将输入公式的单元格格式设置为日期格式)

3、提取性别信息

15位:=IF(MOD(RIGHT(A2),2)=1,"男","女")

18位:=IF(MOD(MID(A2),17,1)=1,"男","女")

15与18位通用:=IF(MOD(MID(A2,IF(LEN(A2)=15,15,17),1),2)=1,"男","女")

简化公式:=IF(MOD(RIGHT(LEFT(A2,17)),2),"男","女")

4、检验身份证号码的正确性

18位身份证号码的最后一位是检验码,它是根据身份证前17位数字依照规则计

算出来的,其值0~9或X。一般情况只要有一位数字输入错误,依照规则计算后

就会与第18位数不符。当然不排除按错误号码计算后恰好与检验码相符的情况,

但这种情况出现的可能性较低。因此,对18位号码的验证采用如下公式:

=MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(A2,1)

对于15位身份证,由于没有检验码,我们只能简单地去判断出生日期代码是否是一个有效的日期,避免输入一些像“731302”或“980230“等这样不存在的日期。=ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00"))

综合15位和18位后的通用公式为:

=IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:1 7")),1)*2^(18-ROW(INDIRECT("1:17")))),11)

1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00")))) 由于目前15位身份证号码已经很少了,如果对15位的号码不需要作进一步的判断,则公式可以简化成:

=IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:1 7")),1)*2^(18-ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(A2),LEN(A2)=15)

将上面的公式放到B2单元格,如果结果为TRUE,则身份证号是正确的,结果为FALSE则是错误的。

你也可以将上述公式放在数据有效性中,防止录入错误的身份证号。操作方法:选

择需要输入身份证的全部单元格区域,比如A2:A10,点菜单"数据"-"有效性",在"允许"的下拉框中选择"自定义",在"公式"输入上面的15位和18位通用公式,确定以

后即可。注意:公式里的"A2"是你刚才选定要输入身份证的单元格区域的第一个单

元格,如果你是要在C3:C20输入身份证号,则将公式里的"A2"改为"C3"。另外,你也可以先设置好某单个单元格的数据有效性(这时公式的A2改为选定的单元格),再用格式刷将其格式刷到其他需要相同设置的单元格。

5、15位升为18位

=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUMPRODUCT(MID(RE PLACE(A2,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-

ROW(INDIRECT("1:17")))),11) 1,1),A2)

6、18位转换为15位

=IF(LEN(A2)=18,LEFT(REPLACE(A2,7,2,),15),A2)

公式四出处

使用excel校验身份证号码

校验学生录入身份证号信息一直是个很头疼的问题,现在学生的身份证号基本都是18位,利用excel数据有效性只能校验位数是否正确。而对于合法性却望尘莫及,今天查了很多资料,终于找到了一种方法,现介绍如下:

一、身份证编码原理:

关于身份证第18是怎么计算的,原理如下:根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站

https://www.sodocs.net/doc/8e17257975.html,/tjbz/index.htm 查询到最新的县及县以上的行政编码资料。)

生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。校验码(身份证最后一位)是根据前面十七位数字码,按照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。

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

首先:我们得出,前17位的乘积和是189

然后:用189除以11得出的结果是17 2/11,也就是说余数是2。

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

到此已经柳暗花明了,接下来就是写公式了,假设excel表的A1单元格记录的是身份证号码,我们在B1单元格输入如下公式:

=IF(LEN(A1)=0,"空",IF(LEN(A1)=15,"老号",IF(LEN(A1)<>18,"位数不对

",IF(CHOOSE(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,1,0,"X",9,8,7,6,5,4,3,2)=IF(ISNUMBER(RIGHT(A1,1)*1),RIGHT(A1,1)*1,"X") ,"正确","错误"))))

好了,搞定!!!

备注说明:关于大陆身份证有的人会发现前几位为什么变化了。这主要出现在中国的重庆。原有的重庆人的身份证多数以51开头。以前隶属于四川的原因。但新办的身份证可能是50开头,原因是行政区划改变所致。中国各地的行政区划代码请参考国家统计局网站https://www.sodocs.net/doc/8e17257975.html,/tjbz/index.htm

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), "正确","错误"))

通过excel公共函数计算二代公民身份证号码末位校验码

通过excel公共函数计算二代公民身份证号码末位校验码/验证码(附公式可直接使用) 闲来无事,用EXCEL写了个公式(本文最后),可以根据身份证号码前17位计算第18位校验码的,经过验证,非常有效。 使用这个公式可以自己随意编造可以通过验证的身份证号码(感觉在为办证的做贡献。。。) 18位身份证号码的结构: 现在的二代身份证由18位数字组成 1、前6位是行政区规划代码,第一位是区位号(如西北、西南),第二位为省份编号,第三、四位是城市编号,第五、六位是县区编号,01-19代表市辖区,20以后代表郊县、县级市等辖区。 具体的行政区域规划码可以可以在国家统计局网站查询: https://www.sodocs.net/doc/8e17257975.html,/tjbz/xzqhdm/t20021125_46781.htm 2、第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位!")

身份证号码校验实例

身份证号码校验实例 身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。 代码如下: Function IDcheck(ID) '身份证号码校验函数 Dim s, iAs Integer Dim e, z As String Part1: '----------------------------身份证号码合法性检查--------------------------------------- If Not (Len(ID) = 18 Or Len(ID) = 15) Then '位数检验 IDcheck = "位数错误" Exit Function Else If Len(ID) = 15 Then ID = Left(ID, 6) & "19" & Right(ID, 9)

If IsNumeric(Left(ID, 17)) = False Or InStr(ID, ".") > 0 Then '字符检验 IDcheck = "字符错误" Exit Function End If On Error Resume Next '日期检验 If DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) < 1 Or _ DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) > Date Then IDcheck = "日期错误" Exit Function End If End If Part2: '-----------------------------校验码的生成及检查---------------------------------------- s = 0 For i = 1 To 17 s = s + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11)

Excel验证身份证号码

使用excel校验身份证号码 校验学生录入身份证号信息一直是个很头疼的问题,现在学生的身份证号基本都是18位,利用excel 数据有效性只能校验位数是否正确。而对于合法性却望尘莫及,今天查了很多资料,终于找到了一种方法,现介绍如下: 一、身份证编码原理: 关于身份证第18是怎么计算的,原理如下:根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站https://www.sodocs.net/doc/8e17257975.html,/tjbz/index.htm 查询到最新的县及县以上的行政编码资料。)生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。 顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。 校验码(身份证最后一位)是根据前面十七位数字码,按照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。 例如:某男性的身份证号码是340524************。我们要看看这个身份证是不是合法的身份证。 首先:我们得出,前17位的乘积和是189 然后:用189除以11得出的结果是17 2/11,也就是说余数是2。 最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。 到此已经柳暗花明了,接下来就是写公式了,假设excel表的A1单元格记录的是身份证号码,我们在B1单元格输入如下公式: =IF(LEN(A1)=0,"空",IF(LEN(A1)=15,"老号",IF(LEN(A1)<>18,"位数不对",IF(CHOOSE(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,1 ,0,"X",9,8,7,6,5,4,3,2)=IF(ISNUMBER(RIGHT(A1,1)*1),RIGHT(A1,1)*1,"X"),"正确","错误")))) 好了,搞定!!! 备注说明:关于大陆身份证有的人会发现前几位为什么变化了。这主要出现在中国的重庆。原有的重庆人的身份证多数以51开头。以前隶属于四川的原因。但新办的身份证可能是50开头,原因是行政区划改变所致。中国各地的行政区划代码请参考国家统计局网站https://www.sodocs.net/doc/8e17257975.html,/tjbz/index.htm

身份证号码构成

号码构成1 地址码 (身份证号码前六位)表示编码对象常住户口所在县(市、镇、区)的行政区划代码。1-2位省、自治区、直辖市代码;3-4位地级市、盟、自治州代码;5-6位县、县级市、区代码。 2 生日期码 (身份证号码第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。 3 顺序码 (身份证号码第十五位到十七位)地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。 4 校验码 (身份证号码最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。编辑本段号码含义居民身份证是国家法定的证明公民个人身份的证件。为了堵塞和制止假居民身份证的流通和使用,在查验和核查居民身份证时可掌握以下几个要点: 一、有效期限 居民身份证的有效期限分为10年、20年、长期三种。16周岁至25周岁的,发给有效期为10年的居民身份证;26周岁至45周岁的,发给有效期为20年的居民身份证;46周岁以上的,发给长期有效的居民身份证。证件有效期限从签发之日起计算。如某人1949年9月20日出生,1984年35周岁时申领居民身份证,签发日期为1984年12月31日,他属于26至45周岁这一年龄段,证件有效期限属于20年这一档次,到2004年12月30日有效期满。查验或检查时,应对照检查证件有效期限与持证人年龄,签发日期三者之间的关系。 二、编号识别 1、身份证编码规则如下:根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码(身份证前六位)表示编码对象第一次申领居民身份证时的常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到网站查询到最新的县及县以上的行政编码资料。)生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。顺序码(身份证第十五位到十七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生,而且和他同年月日生的男生至少有两个,他们的后四位是001*和003*。分配顺序码中“999、998、997、996”四个顺序号分别为男女性百岁以上老人专用的特定编号。校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。 2、从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第

身份证编码规则

身份证编码规则 一、编码规则: 根据中华人民共和国国家有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码,可以用字母表示如为ABCDEFYYYYMMDDXXXR。其含义如下: 1. 地址码(ABCDEF):表示编码对象常住户口所在县(市、旗、区)的行政区划代码。 2. 出生日期码(YYYYMMDD):表示编码对象出生的年、月、日,分别用4位、2位(不足两位加0)、2位(不足两位加0)数字表示,之间不用分隔符。 3. 顺序码(XXX):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 4.校验码(R),一位数字,通过前17位数字根据一定计算得出。 二、关于地址码含义的详细解释: 身份证前六位是地区代码,我们用ABCDEF表示。代码的解释规则如下: A 国内区域: 1 华北三省二市 2 东北三省 3 华东六省一 4 华南六省 5 西南四省一市 6 西北五省 7 台湾 8 港澳 B或者说是AB,就是前2位:省(直辖市,自治区,特别行政区)代码按照A划定的分区定义省代码,有直辖市的,直辖市列前,其余按离直辖市的距离排序,没有直辖市的,按离北京的远近排序。 具体省(直辖市,自治区,特别行政区)代码如下:11-15 京津冀晋21-23 辽吉黑 31-37 沪苏浙皖闽赣鲁 41-46 豫鄂湘粤桂琼50-54 渝川贵云藏 61-65 陕甘青宁新 81-82 港澳 CD城市代码:从01开始排,对于直辖市,CD=01表示市辖区,CD=02表示辖县;省的城市代码从省会开始排,比如2101=沈阳 2102=大连…… 只有地级城市有独立的城市代码,县级市没有。 EF:市辖区、郊区、郊县、县级市代码:如果EF=00,指代这个城市,不特定区县;对于非直辖市,如EF=01,指代市辖区(任意一个区),02开始指代特定的区。其中:E=0代表市辖区 E=1代表郊区 E=2代表郊县 E=8代表县级市对于直辖市,从01开始就依次排区,没有市区和郊区的代码区分。 三、生日期码(YYYYMMDD): 表示编码对象出生的年、月、日,分别用4位、2位(不足两位加0)、2位(不足两位加0)数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

身份证校验码的解释

身份证校验码的解释 新居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是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位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。 例如:某男性的身份证号码是340524************。我们要看看这个身份证是不是合法的身份证。 首先:我们得出,前17位的乘积和是189 然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。 最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

这里面说的很清楚了,最后一位是用来辨别身份证真假的一种办法。而不是同年同月同日生的人的识别码。 贴个JA V A实现的校验算法 public static char doV erify(String id); { char pszSrc[]=id.toCharArray();; int iS = 0; int iW[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; char szVerCode[] = new char[]{'1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; int i; for(i=0;i<17;i++); { iS += (int);(pszSrc-'0'); * iW; } int iY = iS%11; return szVerCode[iY]; } =IF(LEN(A101)=15,REPLACE(A101,7,,19)&MID("10X98765432",MOD(SUM(MID(REPLAC E(A101,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A101 excel计算最后一位的公式,也就是个校验码而已

全国身份证及港澳台身份证验证js代码、函数。

// 988058查号网,骗子号码查询(http:// https://www.sodocs.net/doc/8e17257975.html,) //一下是验证身份证号码的js函数 function checkIdcard(idcard){ var Errors=new Array( "验证通过!", "身份证号码位数不对!", "身份证号码出生日期超出范围或含有非法字符!", "身份证号码校验错误!", "身份证地区非法!" ); var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"} var retflag=false; var idcard,Y,JYM; var S,M; var idcard_array = new Array(); idcard_array = idcard.split(""); //地区检验 if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4]; //身份号码位数及格式检验 switch(idcard.length){ case 15: if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性 } else { ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性 } if(ereg.test(idcard)) return Errors[0]; else { return Errors[2]; } break; case 18: //18位身份号码检测 //出生日期的合法性检查

一个18位身份证校验计算函数.docx

-个18位身份证校验计算函数 因需要对15位旧身份证号码进行升位和校验、查询处理,又没有搜索到现成的函数,于是自己写了一个简单的过程,希望能够帮得上需要的朋友。 本函数的功能单一,只能校验第18位号码是否正确或者取得第18位号码,其他功能留给人家自C扩展吧! <% ' Version: 1. 0. 1 'Author: sfply(sfply@163. com) 'Last Modified: 2004/7/17 12:03 'Src是身份证号码,可以是15位也可以是18位,15位时只能返回验证码方式使用 'iChk参数取值真假,真代表校验Six是否18位身份证,并且校验第18位是否 正确号码而确定是否有效身份证,返冋只值为true或false ' 假代表返回止确的校验码,返回值为(l~x) dim myldentify myTdentify 二〃36050219781218133?〃 response .write chkldentiyCard(myldentify, false) Function chkldentiyCard(Src,iChk)

dim myWi, myAi, mySrc(17), i, myCount myAi =,z 10X98765432' myWi = split(z/7, 9, 10, 5, & 4, 2, 1, 6, 3, 7, 9, 10, 5, & 4, 2〃,〃,〃) if iChk then if len (Src) = 18 then for i = 0 to 16 mySrc(i)二mid(Src, i + 1, 1) myCouni 二myCount + mySrc(i) * myWi(i) next if mid(myAi, (mycount mod 11)+1,1) = right (Src,1) then chkldcntiyCard = true '返回结果,TRUE为合法身份证验证码 el se chkldentiyCard = false '返回结果,FALSE为非法身份证验证码 end if else chkldentiyCard = false '因为不是18位身份证所以返[H] FALSE end if el se if len(Src)二15 or len(Src)二18 then if len(Src) = 15 then Src = mid(Src, 1, 6) & "19〃 & mid(Src, 7, 9) for i = 0 to 16 mySrc(i)二mid(Src, i + 1, 1) myCount 二myCount + mySrc(i) * myWi (i) n ext chkldentiyCard = mid (myAi, (mycount mod 11)+1, 1)'返回正确的验证码else chkldentiyCard二false '输入不不是15位或18位身份证号 end if end if Encl Function

身份证验证

彩色影像扫描仪 全国公民身份信息核查比对服务 操作手册 全国公民身份证号码查询服务中心 2010年7月

目录 1功能介绍 (1) 1.1关于彩色影像扫描仪 (1) 1.2关于全国公民身份信息核查比对服务 (1) 1.2.1服务定义 (1) 1.2.2核查比对结果 (2) 2建议配置 (3) 3扫描仪驱动安装 (4) 3.1硬件驱动程序安装 (4) 3.2扫描仪核心软件安装 (4) 4登录系统 (7) 5安装控件 (8) 5.1添加“可信站点” (8) 5.2“可信站点”自定义设置 (9) 5.3选择服务\安装控件 (10) 6扫描并核查比对 (12) 6.1正确放入证件 (12) 6.2选择证件类型 (12) 6.3扫描并核查比对 (13) 6.4反馈核查比对结果 (14) 6.5手工修改 (14) 7客户服务 (16) 8常见问题解答 (17) 8.1系统登录问题 (17) 8.2扫描仪没有响应 (17) 8.3页面错误导致无法提交 (18) 9特别声明 (20)

感谢您使用全国公民身份证号码查询服务中心提供的身份信息核查比对服务,我们将竭诚为您服务。 防范欺诈风险是你我共同的责任。 1功能介绍 1.1 关于彩色影像扫描仪 此彩色影像扫描仪是全国公民身份证号码查询服务中心监制的一款集扫描、识别、录入、核查比对为一体的专用扫描设备。扫描、识别、录入与我们的核查比对服务绑定在一起一键集成,为客户简化手工录入流程,提高工作效率。 1.2 关于全国公民身份信息核查比对服务 1.2.1服务定义 全国公民身份信息核查比对服务是指公民个人在进行社会和经济活动时,向有关机构主动提交身份证件,有关机构工作人员将公民主动提交的身份号码、姓名等信息传送至“全国公民身份信息系统”(以下简称“系统”)进行比对,系统将提供的数据与存储的数据进行比对后,返回被核查人公民身份号码、姓名与系统存储数据是否一致的结果。在核查比对结果为“一致”的前提下,如果系统存有该被核查人照片,则可以进一步比对照片,不提供任何其他信息。

检验身份证号码的正确性

检验身份证号码的正确性 =IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:1 7")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00")))) EXCEL中如何提取身份证出生日期、性别、检验身份证号码的正确性 中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为:15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码。 18位:6位数字常住户口所在县市的行政区划代码,8位数字出生日期代码,3位数字顺序码和1位检验码。 其中3位数字顺序码,是为同一地址码的同年同月同日出生人员编制的顺序号,偶数的为女性,奇数的为男性。 1、提取籍贯地区的行政区划代码(A2为身份证号,下同) 15与18位通用:=LEFT(A2,6) 如果有一个编码和省份地区的对照表,可以用VLOOKUP函数来提取地区信息。 2、提取出生日期信息 15位:=--TEXT(19&MID(A2,7,6),"#-00-00") 18位:=--TEXT(MID(A2,7,8),"#-00-00") 15与18位通用: =--TEXT(IF(LEN(A2)=15,19,"")&MID(A2,7,6+IF(LEN(A2)=18,2,0)),"#-00-00") 简化公式: =--TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00") (请将输入公式的单元格格式设置为日期格式) 3、提取性别信息 15位:=IF(MOD(RIGHT(A2),2)=1,"男","女") 18位:=IF(MOD(MID(A2),17,1)=1,"男","女") 15与18位通用:=IF(MOD(MID(A2,IF(LEN(A2)=15,15,17),1),2)=1,"男","女") 简化公式:=IF(MOD(RIGHT(LEFT(A2,17)),2),"男","女") 4、检验身份证号码的正确性 18位身份证号码的最后一位是检验码,它是根据身份证前17位数字依照规则计算出来的,其值0~9或X。一般情况只要有一位数字输入错误,依照规则计算后就会与第18位数不符。当然不排除按错误号码计算后恰好与检验码相符的情况,但这种情况出现的可能性较低。因此,对18位号码的验证采用如下公式: =MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-R OW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2,1) 对于15位身份证,由于没有检验码,我们只能简单地去判断出生日期代码是否是一个有效的日期,避免输入一些像“731302”或“980230“等这样不存在的日期。

如何用Excel验证身份证号码是否符合规则

EXCEL中如何提取身份证出生日期、性别、检验身份证号 码的正确性 中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为:15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码。 18位:6位数字常住户口所在县市的行政区划代码,8位数字出生日期代码,3位数字顺序码和1位检验码。 其中3位数字顺序码,是为同一地址码的同年同月同日出生人员编制的顺序号,偶数的为女性,奇数的为男性。 1、提取籍贯地区的行政区划代码(A2为身份证号,下同) 15与18位通用:=LEFT(A2,6) 如果有一个编码和省份地区的对照表,可以用VLOOKUP函数来提取地区信息。 2、提取出生日期信息 15位:=--TEXT(19&MID(A2,7,6),"#-00-00") 18位:=--TEXT(MID(A2,7,8),"#-00-00") 15与18位通用:=--TEXT(IF(LEN(A2)=15,19,"")&MID(A2,7,6+IF(LEN(A2)=18,2,0)),"#-00-00") 简化公式:=--TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00") (请将输入公式的单元格格式设置为日期格式) 3、提取性别信息 15位:=IF(MOD(RIGHT(A2),2)=1,"男","女") 18位:=IF(MOD(MID(A2),17,1)=1,"男","女") 15与18位通用:=IF(MOD(MID(A2,IF(LEN(A2)=15,15,17),1),2)=1,"男","女") 简化公式:=IF(MOD(RIGHT(LEFT(A2,17)),2),"男","女") 4、检验身份证号码的正确性 18位身份证号码的最后一位是检验码,它是根据身份证前17位数字依照规则计算出来的,其值0~9或X。一般情况只要有一位数字输入错误,依照规则计算后就会与第18位数不符。当然不排除按错误号码计算后恰好与检验码相符的情况,但这种情况出现的可能性较低。因此,对18位号码的验证采用如下公式: =MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-R OW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2,1) 对于15位身份证,由于没有检验码,我们只能简单地去判断出生日期代码是否是一个有效的日期,避免输入一些像“731302”或“980230“等这样不存在的日期。 =ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00")) 综合15位和18位后的通用公式为: =IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:1 7")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00")))) 由于目前15位身份证号码已经很少了,如果对15位的号码不需要作进一步的判断,则公式可以简化成:

net实现中国身份证号码验证源码

.net实现中国身份证号码验证源码 using System; /// /// Summary descr ip tion for IDCardValid /// public cl as s IDCardValid { public IDCardValid() { // // TODO: Add constructor logic here // } /// /// 验证身份证号码 /// /// 身份证号码 /// 验证成功为True,否则为False public static bool CheckIDCard(string Id) { if (Id.Length == 18) { bool check = CheckIDCard18(Id); return check; } else if (Id.Length == 15) { bool check = CheckIDCard15(Id); return check; } else { return false; } } #region 身份证号码验证 /// /// 验证15位身份证号 /// /// 身份证号 /// 验证成功为True,否则为False private static bool CheckIDCard18(string Id) { long n = 0; if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false) { return false;//数字验证 } string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x6 1x14x32x41x50x62x15x33x42x51x63x21x34x43x52 x64x65x71x81x82x91"; if (address.IndexOf(Id.Remove(2)) == -1) { return false;//省份验证 } string birth = Id.Substring(6, 8).Insert (6, "-").Insert(4, "-"); DateTime time = new DateTime(); if (DateTime.TryParse(birth, out time) == false) { return false;//生日验证 } string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(','); string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(','); char[] Ai = Id.Remove(17).ToCharArray(); int sum = 0; for (int i = 0; i < 17; i++) { sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString()); } int y = -1; Math.DivRem(sum, 11, out y); if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower()) { return false;//校验码验证 } return true;//符合GB11643-1999标准 } /// /// 验证18位身份证号 /// /// 身份证号 /// 验证成功为True,否则为False private static bool CheckIDCard15(string Id) { long n = 0; if (long.TryParse(Id, out n) == false || n < 1

商品条码的校验码是如何计算的

商品条码的校验码是如何计算的 在百度上看到这样一个问题:为什么通过下载的标签制作软件制作的商品标签的校验位和原来的不一样?并附了两张图。这里小编用中琅领跑条码标签设计软件制作了一遍发现,最后一位校验位和原来的标签一样,没什么区别。经过一番缜密的研究分析,小编就明白了个大概,原来问题就出在那位朋友所谓的免费的条形码生成工具上。问题的原因就在于校验码是由编码方案决定的,普通的条码软件是做不了那么精密的,所以通过免费的条形码生成软件生成的校验位是不同的,而且不但如此,通过一些不专业的条码批量打印软件制作出来的商品标签是有一点的风险的,而且出了事情也是没有客服咨询和解答的,。所以个人还是建议大家使用一些专业的条码标签制作软件的。言归正传,那么,条码打印软件中校验码到底是如何生成的呢?下面小编搜集了以下几种校验码的计算方法,以供参考。 首先说商品条码。商品条码中需要计算校验码的有:EAN-8(8位),EAN-13(13位),UCC(UPC-A)(12位),GTIN-14(ITF-14)(14位),GLN(13位),SSCC(18位)等。它们虽然位数不同,但计算校验码的方法完全相同。1、包含校验码的所有数字从右向左编号,分别为1,2,3......18位; 2、从第2位开始,所有偶数位的权数为3,从第3位开始,所有奇数位的权数为1;3、将对应位置的代码数字与权数相乘,参见下图(以SSCC的18位数字为例);4、将所有乘积相加求和;(结果为109);5、对第4步的和,求MOD 10运算(将和109除以10,取其余数9);6、如果余数为0,则校验码为0,否则,用10减去余数的差即为校验码。(上例中校验码为1)。 其次是身份证校验码。身份证校验码的计算比较复杂一些, 1、自右向左为身份证号编号1-18; 2、确定各位数的权数,权数的计算公式为2^(i-1) mod 11 i—位数,第3位的权数为2^(3-1)=2^2=4, 4除以11,商0余4,则权数为4。再如第5位的权数为2^(5-1)=2^4=16,16除以11,商1余5,则权数为5。 3、将权数与对应的身份证号数字相乘; 4、将所有乘积相加求和;(示例中的184) 5、将第4步的结果除以11,求余数(示例中的8); 6、从下表的R值中找到第5步的结果,对应的C值即为校验码。(示例中8对应的是4)

相关主题