中国18位身份证号码的编码规则

风行水上 @ 2012-01-17 22:03:34
标签:

    中国18位身份证号码的编码规则如下:

    340524 19800101 001     X
    ------ -------- ---     -
    地址码  出生日期   顺序码   校验码
    
    • 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
    • 出生日期:6位字符
    • 顺序码:对地址码和出生日期都相同的人员的顺序号。奇数分给男性,偶数分给女性
    • 校验码:前面十七位数字的校验码,按照ISO 7064:1983.MOD 11-2标准计算

    校验码的计算方法

    计算方法可以表示为公式:∑(ci×Wi)(mod 11)
    其中: ci表示从右向左数第i位上的数字,Wi是对应的计算因子,该因子的计算方法是2i-1 mod 11

    下面的PHP函数展示了校验码的计算方法,同时也可用于检查身份证号码的有效性。

    function verity_id($id = "34052419800101001*"){
      if(strlen($id)!=18) return false;
      // 从右向左算起
      $sum = 0;
      for($i=16; $i>=0; $i--){
        $ci = $id[$i];
        $Wi = (2<<(16-$i))%11 ;
        $sum += $ci*$Wi;
      }
    
      $check = $sum%11;
    
      
      // 余数: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
      // 取值: 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 |  2
      $check = (12 - $check)%11;
      if($check==10) $check='X';
    
      return $id[17]==$check;
    }
    
    verity_id("34052419800101001X");
    

    地址码

    也叫行政区划代码,可以在国家统计局的网站上查到详细列表。

    • 第一位数字表示地区:1=华北,2=东北,3=华东,4=中南,5=西南,6=西北
    • 第二位代是直辖市、省、自治区在该地区中的排位
      • 北京市|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
    • 第三、四位数字表示户籍所在的市
    • 第五、六位数字表示所在的区、县、旗

    网络资源

    标签:

      分享到:
      comments powered by Disqus

      31/35ms