身份证号的乐趣

  近段时间对身份证号码比较感兴趣,就查了一些资料,简单梳理一下,资料主要源于网上各种搜索,比较零散。

  感兴趣的主要在于省级行政区划和校验码两个内容。

  中国大陆(内地)使用的身份证号码和其规律,经常使用身份证的应该比较清楚。18位数字;前六位为“地址码”,两位一组,分别是省市区地址码,直辖市除外;中间8位为“出生日期码”,分别是年月日;后面3位为“顺序码”,第3位奇数为男性、偶数为女性;最后1位为“校验码”,也是最特殊的一位。港澳台地区虽然也有与大陆(内地)统一的行政区划代码,但是三地身份证号码采用了不一样的标准和体系,这里就不谈了。

 

地址码前两位

  六位地址码是各地的行政区划代码,这个网上可以很容易查询到,比如“全国行政区划信息查询平台”。最前面两位数的省级代码就很有意思。

  这个代码源于历史时期的影响。在不同时期(阶段)分别有不同的说法,民国时期有六大区、解放区有六大局、新中国初期有六大行政区(后面范围有调整)、1954年撤销六大区改为中央直管各省级单位。

  新中国初期的地理大区按照方位对全国34个省级行政区进行分区:华北、东北、华东、中南、西南和西北。这六个大区现在已经没有正式建制,但影响依然深远,比如身份证号、电话区号等。电话区号也挺有意思,偏题太远,就不谈了。

  我国身份证号码的开头数字,分别为1、2、3、4、5、6,代表的就是这6个大区,分别代表华北、东北、华东、中南、西南、西北。第二个数字则对应大区下的某个省级行政区,比如北京身份证开头两位11,即华北大区编号为1的省份,以此类推。

  华北:北京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开头。但三地的身份证号码采用不同的标准体系,上面的行政区划代码并没有用到当地身份证号中。

  其中,内蒙以前是东北大区的,后面划分到华北大区;重庆从四川分出来后采用0作为省级编号,独此一例。

  另外,中南地区跨传统的北方省份河南,长江流域的湖北、湖南,珠江流域的广西、广东、香港和澳门,还有完全位于热带的海南。以南岭为界,中南又常常分为华中和华南,于是又有了七大区的说法。

  现在虽然不是正式建制,但是生活中对于大区的感知还是比较明显的,除身份证外通常在地理位置、区域和范围的描述时会提到,比如我们介绍公司业务的时候经常会提到“华南地区XXX”,再比如“大西北”等等。并且对于七大区的感知是比六大区更明显的,很多人可能已经不知道“中南”,但是对于华中、华南感知比较明显,理由如上,而我作为武汉人,对于“中南”还有点了解的,武汉市中心有个地名叫中南,武汉有两个大学分别是中南财经政法大学、中南民族大学,都是一本。

 

校验码

  这个是最有意思的一个数字,也是近期开始关注的,个人感觉它的规律性在18个数字里面最强。

  旁人不知道有没有,我以前有过这样的经历。打开某个小游戏,提示需要实名认证,输入身份证号并修改几位数字(应该都懂),提交后显示“无效身份证”,三个字的名字改成两个字可以通过认证。当时第一想法是,这么小的游戏也这么正规吗,接入某个国家统一户籍管理系统了?再一想,为什么姓名又可以作假呢?

  现在大概知道了,校验码的存在就是为了检验身份证号有效与否的,校验码是根据前面17位数计算而生成的。据说如果不是知道计算方法后刻意填写,随机填写2位及以上数字,检出概率为90%;1位则为100%。

  校验码遵循的是国际标准《ISO 7064-1983 数据处理-检验码系统(翻译)》,采用里面的MOD 11-2校验码系统。我对它的计算过程莫名的感兴趣。

  截图来自于《GB 11643-1999中国公民身份号码》,计算规则看起来很复杂的样子,我也没学过三横等号的计算,也没有学过mod。查验资料后,大概弄懂了上面的计算方式,网上也有简易算法。

  公式1表示18位身份证号分别与加权因子相乘后求和,其结果与1对11有相同的余数,也就是说求和后的结果除以11后的余数为1。

  计算中身份证号的位数是从右往左算,与我们现在书写规范相反,校验码在第1位。

  加权因子怎么得到:2的幂,幂为位数减去一,结果对11取余数。比如第3位的加权因子,为2的2(=3-1)次方结果为4,4除以11的余数为4,那么第3位的加权因子就是4。以此类推可以得到所有的加权因子。

  公式2表示已知身份证后17位数字的情况下怎么计算出检验码a1。简单来说,就是后17位分别与加权因子相乘后求和,求和结果除以11取余数,余数在0-10之间;因为没有学过取余(mod)的计算,这里没看明白,但是截图给出了对照关系表,可以查出余数在0-10之间分别对应的检验码a1的值是多少。比如余数为4,对应的校验码a1=8。有个便捷算法,可能是公式2变换后得到的,12减去余数后的结果除以11,得到新的余数即为检验码,比如上面的例子,(12-4)(mod11)=8。有意思的是,a1等于10的时候,用罗马数字X表示10,这也是为什么有些人的身份证最后一位会出现X的原因。

  简易算法:

  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。

 

举个栗子:

  某男性的身份证号码是340523190001010017。我们要看看这个身份证是不是合法的身份证。

  首先我们得出后17位与系数的乘积求和是137,然后用137除以11得出的结果是12+5/11,也就是说其余数是5。最后通过对应规则就可以知道余数5对应的数字是7。所以,可以判定这是一个合格的身份证号码。

  同时可以知道这位是华东地区、安徽省、马鞍山市、和县、1900年1月1日出生、在当地(区县)当天出生排序首位的男性、身份证校验码为3。当然,至于120多年前的人身份证号是不是用这套标准体系,不知道,举个栗子而已。

  还有一种特殊情况,自己与父亲(母亲)身份证号码中6位地址码不一样,特别是市、区两级的4位地址码,如果不是异地落户的极特殊情况,基本上就是因为当地的行政区划历史中有过调整,你自己是按照调整后的行政区划办理的身份证(出生证),而父亲(母亲)以前的身份证号并不会因为后期的行政区划调整而重新修改身份证号,一个人终身只会有一个合法的身份证号。就我知道的,武汉市与旁边的市在1990年前有过多次相互调整下辖区县的情况,那么这期间出生的人身份证地址码中市级代码可能就不是01武汉,这种情况在全国各地多多少少有一些的。

身份证号的乐趣》有3个想法

评论已关闭。