身份证号下的编码规则

Joe  于  2014-04-20 23:50:07  发布至  暂未归类  累计    次阅读

一直以来倒是知道身份证是根据特定编码规则组合而成,不过也仅仅局限于知道前面的地区号,以及出生年月,今天在一个程序中验证身份证合法性的问题时才更详细的了解到了这个编码规范,一串身份证号倒也隐藏了不少信息。 

早前的身份证号有15位的,其中前6位两位一组,分别代表出生地区的省市县(区),第6位到第12位代表的是出生年月日,15位身份证号的年份只有两位数,最后3位是分配的顺序码,其中999,998,997,996是为为男女性百岁老人分配的, 最后1位奇数为男性,偶数为女性。 随着人口的增多,以及日期的增加,为了使身份证号能够更加唯一规范,号码从15位上升到了现在的18位,其中前17位为本体码,最后1位是检验码。17位本体码从左至右又分为三部分,前6位为地址码,中间8位为出生日期码,年份变为4位,最后3位为顺序码,取消了百岁老人的特定编码。18位中的最后一位检验码,是通过前17位本体码计算得出的,检验码的算法分为三部分:

(1)17位本体码加权求和 Sum=Sum+(Ai*Wi) Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模 mod=Sum%11;  

(3)得到模对应的检验码 mod: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2 其中的10用X来代替,所以有时候我们可能会看到一些最后一位检验码为X的的身份证号,就是因为17位本体码加权取模之后得到的是数字2。 

根据奇数男偶数女的顺序码分配规律,可以看出18位身份证号中倒数第2位是奇数的为男性,偶数的为女性。 当然这样的编码只是一种方式,不排除一些信息上报问题,或是其他因素导致的信息不正确,比如本人的前6位的地址码就出现了乌龙……

上一篇:又是一场扫黄打非下一篇:人为什么会犯贱?