身份证号校验

本文介绍了一个用于验证中国身份证号码有效性的JavaScript函数。该函数能够检查15位和18位身份证号码的格式,并验证出生日期的有效性。对于18位号码,还包括了校验码的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

强身份证号校验规则

Util.isCardID = function (id) {
    var areaCodeGroup = {
        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 is15Length=false;
    var is18Length=false;
    var yearBirthday="",monthBirthday="",dayBirthday="";
    if(/^\d{17}(\d|x)$/i.test(id)){
        is18Length=true;
    }
    else if(/^\d{15}$/i.test(id)){
        is15Length=true;
    }
    else {
        return false;  
    }
    var provinceCode=id.substr(0, 2);
    if(!areaCodeGroup[provinceCode]){
        return false
    }

    if(is18Length){
        yearBirthday=id.substr(6, 4);
        monthBirthday=id.substr(10, 2);
        dayBirthday=id.substr(12, 2);
        if(!Util.isValidDate("{0}/{1}/{2}".format(yearBirthday,monthBirthday,dayBirthday))){
            return false;
        }
        if(!Util.isValidID(id)){
            return false;
        }
    }
    else if(is15Length){
        yearBirthday="19"+id.substr(6, 2);
        monthBirthday=id.substr(8, 2);
        dayBirthday=id.substr(10, 2);
        if(!Util.isValidDate("{0}/{1}/{2}".format(yearBirthday,monthBirthday,dayBirthday))){
            return false;
        }
        if(!Util.isValidID(id)){
            return false;
        }
    }
    return true;
};

Util.isValidDate=function (date) {
    date=date||new Date();
    if(typeof date==="string"){
        date=new Date(date);
    }
    date=date.getTime();
    return date<new Date().getTime()&&date>new Date("1900/01/01").getTime()&&!isNaN(date);
};

Util.isValidID=function (id) {
    var front17=id.split("");
    front17.pop();
    var factors=["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"];
    var sum=0;
    $.each(front17,function (index,value) {
        sum+=value*factors[index];
    });
    return Boolean(["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"][sum%11]==id.charAt(id.length-1));
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值