Gavin的gravatar头像
Gavin 2014-03-13 15:30:55

java身份证最后一位校验码校验工具

18 位身份证最末位是校验码,是按一定的规则产生的,用于校验身份证真伪,按理这规则属于保密的,X 代表的是其中一个校验码,是 10。校验码从 0 到 X 共 11 个。  
校验码是通过一系列数学计算得出来的,具体校验的计算方式如下:  
公式为:∑(Ai×Wi)(mod 11)  
i——表示号码字符从右至左包括校验码在内的位置序号;  
Ai——表示第 i 位置上的号码字符值;  
Wi——示第 i 位置上的加权因子(其值已定),
其数值依据公式 Wi=2^(i-1)(mod 11) 计算得出。
其各位对应的值依次为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2  
例如:某男性公民身份号码为 34052419800101001V(V为校验码),对前 17 位数字本体码首先按照上面公式加权求和计算: 
i:  18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2  1 
Ai: 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 V 
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 ) = 189  
∑(Ai×Wi)(mod 11) = 189 mod 11 = 2 
然后根据计算的结果,从下面的表中查出相应的校验码。其中 X 表示计算结果为 10。 
∑(Ai×Wi)(mod 11): 0 1 2 3 4 5 6 7 8 9 10  
校验码字符值 V:  1  0  X  9 8 7 6 5 4 3 2  
根据上表,查出计算结果为 2 的校验码为 X,
所以该人员的公民身份号码应该为 34052419800101001X。  
如果校验码不符合这个规则,则肯定是假号码。  
关于 18 位身份证号码尾数是“X”的一种解释:
因为按照上面的规则,校验码有 11 个,而不是 10 个,所以不能用 0-9 表示。所以如果尾号是 10,那么就得用 X 来代替,
因为如果用 10 做尾号,那么此人的身份证就变成了 19 位,而 19 位的号码违反了国家标准,并且我国的计算机应用系统也不
承认 19 位的身份证号码。Ⅹ 是罗马数字的 10,用 X 来代替 10,可以保证公民的身份证符合国家标准。

java身份证最后一位校验码校验工具


打赏

文件名:IDCode.java,文件大小:2.651K 下载
最代码最近下载分享源代码列表最近下载
索俊东  LV1 2021年5月1日
948394963  LV2 2021年4月25日
2196316269  LV10 2021年2月25日
16693212235  LV4 2020年7月16日
wudandan  LV1 2020年6月3日
低调人  LV38 2020年3月24日
wutaitai  LV1 2019年3月18日
小钟颖  LV1 2019年2月22日
chrisb  LV2 2018年8月15日
vijayChen  LV16 2018年7月3日
最代码最近浏览分享源代码列表最近浏览
crosa_Don  LV15 7月19日
微微笑的笑笑  LV3 6月14日
jachyn  LV6 2021年6月12日
索俊东  LV1 2021年5月1日
948394963  LV2 2021年4月25日
fantesy  LV16 2021年3月18日
2196316269  LV10 2021年2月25日
wkc  LV21 2020年7月29日
16693212235  LV4 2020年7月16日
linchaoying  LV1 2020年6月9日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友