现在的位置: 首页 > 综合 > 正文

更精确的新旧中国居民身份证号码验证算法

2013年09月09日 ⁄ 综合 ⁄ 共 1247字 ⁄ 字号 评论关闭
文章目录

关于中国居民身份证的常识:
   我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。
  〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。
  
   〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
  
   地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
   出生日期码:表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
   顺序码:表示同一地址码所标识的区域范围内,对同年、同月、同日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
   校验码:是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
 关于身份证号码最后一位的校验码的算法如下:
  ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 )

   "*" : 表示乘号
   i:  表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
   a[i]: 表示身份证号码第 i 位上的号码
   W[i]: 表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
   设:R = ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 )
   C = 身份证号码的校验码
  则R和C之间的对应关系如下表:
   R:0 1 2 3 4 5 6 7 8 9 10
   C:1 0 X 9 8 7 6 5 4 3 2
  由此看出 X 就是 10,罗马数字中的 10 就是X,所以在新标准的身份证号码中可能含有非数字的字母X。

 

 

   这就是身份证号码真伪验证的算法,但一般的程序并未很好的验证行政区划号码。我加入了这一信息的验证,数据如下:

全国省级行政区划代码一览表:

代码 省(自治区、直辖市)
110000 北京市
120000 天津市
130000 河北省
140000 山西省
150000 内蒙古自治区
210000 辽宁省
220000 吉林省
230000 黑龙江省
310000 上海市
320000 江苏省
330000 浙江省
340000 安徽省
350000 福建省
360000 江西省
370000 山东省
410000 河南省
420000 湖北省
430000 湖南省
440000 广东省
450000 广西壮族自治区
460000 海南省
500000 重庆市
510000 四川省
520000 贵州省
530000 云南省
540000 西藏自治区
610000 陕西省
620000 甘肃省
630000 青海省
640000 宁夏回族自治区
650000 新疆维吾尔自治区
710000 台湾省
810000 香港特别行政区
910000 澳门特别行政区(国家基础地理信息系统扩充代码)

        虽每年有更新但此表内信息不会变更。至少是迄今为止

 

抱歉!评论已关闭.