居民身份证验证原理

来源:互联网 发布:360压缩 mac 编辑:程序博客网 时间:2024/06/05 04:37

转自 http://blog.csdn.net/zengcong2013/article/details/18599145

程序要求:制作包含身份证校验函数的动态链接库

视频讲解:
http://blog.fishc.com/2698.html

参考源代码:
http://bbs.fishc.com/thread-33959-1-1.html

程序截图:

11.jpg 



算法参考资料:

我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。

〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。

6位行政区划分代码

6位出生日期

3位顺序码


〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

6位行政区划分代码

8位出生日期

3位顺序码

1位校验码


行政区划分代码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。

行政区划分代码【国家标准GB T 2260-1999】

出生日期码:表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。

顺序码:表示同一地址码所标识的区域范围内,对同年、同月、同日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。

校验码:是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

按照中华人民共和国国家标准GB11643-1999规定中华人民共和国公民身份号码校验码的计算方法即为ISO 7064:1983.MOD 11-2校验码计算法。
假设某一17位数字是:12345678901234567

17位数字12345678901234567加权因子7910584216379105842
计算17位数字各位数字与对应的加权因子的乘积的和S:1×7+2×9+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:368 mod 11=5;

计算(12-T)÷11的余数R,如果R=10,校验码为字母“X”;如果R≠10,校验码为数字“R”:(12-5)mod 11=7。
该17位数字的校验码就是7,聚合在一为123456789012345677。
0

0 0