«

身份证号码验证算法 (PHP JavaScript 代码)

时间:2015-7-17 19:13     作者:admin     分类: 技术文章


18 位身份证号码结构

1-2 位省、自治区、直辖市代码
3-4 位地级市、盟、自治州代码
5-6 位县、县级市、区代码
7-14 位出生年月日,比如19670401代表1967年4月1日
15-17 位为顺序号,其中17位 为性别 男为单数,女为双数
18 位为校验码,0-9和X。作为尾号的校验码 (计算方法下面有)
举例:
130503 19070101 0013 这个身份证号的含义: 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001 (1 性别 男),2为校验码。


15 位的身份证相比 18 出生年月 中的 年 为两位, 且缺少 最后一位 校验码

身份证校验码的计算方法

计算最后一位校验码的具体步骤

  1. 17 号码 加权求和 注: 1-17位 加权因子分别为 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2
  2. 上一步所求的和 取模 (下面的 代码 用的是 取余)
  3. 上一步的 结果 0 - 10 分别对应 的 校验码 为 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2


判断身份证号码是否正确的 函数

下面是 判断身份证号码是否正确的 函数封装 分别为 PHP JS

传入 身份证号码 返回校验结果 true false

/* PHP 验证 身份证号 */
function ckeckIdCard($id){
    static $codeArr = array(1,0,'X',9,8,7,6,5,4,3,2),
        $keyArr = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
    $id = strtoupper($id);
    if(!preg_match('/^[\d]{17}[\dX]{1}$/', $id)) return false;

    $num = 0;
    for($i=0; $i<17; $i++){
        $num += $id[$i] * $keyArr[$i];
    }
    $key = $num % 11;
    return substr($id, -1) == $codeArr[$key];
}
/* JS 验证 身份证号 */
function ckeckIdCard($id){
    var $codeArr = [1,0,'X',9,8,7,6,5,4,3,2],
        $keyArr = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
    $id = $id.toUpperCase();
    if(!/^[\d]{17}[\dX]{1}$/.test($id)) return false;

    $num = 0;
    for($i=0; $i<17; $i++){
        $num += $id[$i] * $keyArr[$i];
    }
    $key = $num % 11;
    return $id.slice(-1) == $codeArr[$key];
}


原文出自简爱博客 http://www.gouji.org/?post=378 觉得不错 转载.如有不便,请联系管理员.

标签: 代码 隐私窃取 黑客工具 分享

版权所有:Mrxn's Blog
文章标题:身份证号码验证算法 (PHP JavaScript 代码)
除非注明,文章均为 Mrxn's Blog 原创,请勿用于任何商业用途,转载请注明作者和出处 Mrxn's Blog

扫描二维码,在手机上阅读

推荐阅读: