身份证号码验证算法(php和js实现)

原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=21126994&id=3938244

http://www.jb51.net/article/57627.htm

从网上找的,已经测试通过,备忘

js:

//身份证号合法性验证
    //支持15位和18位身份证号
    //支持地址编码、出生日期、校验位验证
    function IdentityCodeValid(code) {

        var city={
            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:"澳门",91:"国外 "};
        var tip = "";
        var pass= true;

        if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
            tip = "身份证号格式错误";
            pass = false;
        }

        else if(!city[code.substr(0,2)]){
            tip = "地址编码错误";
            pass = false;
        }
        else{
            //18位身份证需要验证最后一位校验位
            if(code.length == 18){
                code = code.split(‘‘);
                //∑(ai×Wi)(mod 11)
                //加权因子
                var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
                //校验位
                var parity = [ 1, 0, ‘X‘, 9, 8, 7, 6, 5, 4, 3, 2 ];
                var sum = 0;
                var ai = 0;
                var wi = 0;
                for (var i = 0; i < 17; i++)
                {
                    ai = code[i];
                    wi = factor[i];
                    sum += ai * wi;
                }
                var last = parity[sum % 11];
                if(parity[sum % 11] != code[17]){
                    tip = "校验位错误";
                    pass =false;
                }
            }
        }
        if(!pass) alert(tip);
        return pass;
    }
    var c = ‘130981199312253466‘;
    var res= IdentityCodeValid(c);

php:

function checkId($id) {

    $len = strlen($id);
    if($len != 18) {
        return 0;
    }

    $a=str_split($id,1);
    $w=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);

    $c=array(1,0,‘X‘,9,8,7,6,5,4,3,2);

    $sum = 0;
    for($i=0;$i<17;$i++){
            $sum= $sum + $a[$i]*$w[$i];
    }
    $r=$sum%11;
    $res=$c[$r];
    //echo "校验位是: ".$res;
    if ($res == $a[17]) {
        return 1;
    } else {
        return 0;
    }

}
时间: 2024-08-26 17:56:44

身份证号码验证算法(php和js实现)的相关文章

破解火车票上的身份证号码

首先我在百度上找到了一个他人的火车票图片 接着从图片里我们可以获取到信息如下: 姓名 梅勇性别 男 (倒数第四位至倒数第二位3位数为顺序码,顺序码为奇数所以为男性)(可参考http://www.cnblogs.com/xudong-bupt/p/3293838.html)来自 武汉市新洲区 (身份证号码前六位代表地区)(可参考http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/200406/t20040607_38302.html) 身份证号码:4201171988

js正则实现二代身份证号码验证详解

js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 地址码表示编码对象常住户口所在县(市.旗.区)的行政区划代码. 出生日期码表示编码对象出生的年.月.日,其中年份用四位数字表示,年.月.日之间不用分隔符. 顺序码表示同一地址码所标识的区域范围内,对同年.月.日出生的人员

JS根据身份证号码算年龄

如果把身份证号码传到页面上,在前端页面获取年龄就需要用到JS脚本了: function GetAge(identityCard) { var len = (identityCard + "").length; if (len == 0) { return 0; } else { if ((len != 15) && (len != 18))//身份证号码只能为15位或18位其它不合法 { return 0; } } var strBirthday = "&qu

JS正则表达式验证身份证号码

function isCardNo(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(reg.test(card) === false) { alert("身份证输入不合法"); return  false; } } 最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几

常用js工具类之关于身份证号码验证的几个实用函数

身份证号码有效性验证 function isIDCard(idcard) { idcard = idcard.toUpperCase(); // 对身份证号码做处理 var ereg; var Y, JYM; var S, M; /*基本校验*/ //if (String.isNullOrEmpty(idcard)) return false; var idcard_array = new Array(); idcard_array = idcard.split(""); /*身份号码

JS校验身份证号码

var vcity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽",

js 正则表达式 验证身份证号码

function isCardNo(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(reg.test(card) === false) { alert("身份证输入不合法"); return  false; } }

js验证身份证号码是否合规

需求:最近要做实名验证的功能,但是验证身份证号码和身份证图片的接口不想短信,比较贵,所以之前我们要验证严谨一点,参考了网上关于验证身份证号码的代码,总结一下 代码: //验证身份证号码 function checkIDNumber(code){ /* 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 地址

JS根据身份证号码精确计算年龄和性别

1 /** 2 * 根据身份证号得到姓别和精确计算年龄 3 */ 4 function analyzeIDCard(IDCard){ 5 var sexAndAge = {}; 6 //获取用户身份证号码 7 var userCard = IDCard; 8 //如果身份证号码为undefind则返回空 9 if(!userCard){ 10 return sexAndAge; 11 } 12 //获取性别 13 if(parseInt(userCard.substr(16,1)) % 2 ==