批处理之家's Archiver

yu2n 发表于 2012-12-17 00:25

18位身份证号码的javascript验证方法

18位身份证号码的验证方法。
在线测试(验证账号与密码皆为yu2n):[url]http://yu2n.tk/doc/sfz.html[/url][code]// 验证身份证号码功能
function checkID(sID){
    // 验证身份证号码格式
        var strPass = false;
    if(/^\d{15}$|^\d{18}$|^\d{17}[xX]$/.test(sID))
    {
        // 验证出生日期
        var pattern = /^((\d{2}(([02468][048])|([13579][26]))((((0[13578])|(1[02]))((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([1-2][0-9])|(30)))|(02((0[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))((((0[13578])|(1[02]))((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([1-2][0-9])|(30)))|(02((0[1-9])|(1[0-9])|(2[0-8]))))))?$/;
        if (pattern.test(sID.substring(6, 6 + 8)))
        {
            // 验证校验码
            var str = sID.substring(0, 17);
            if (per17To18(str)==sID.toUpperCase()){strPass = true};
        }
    }

        if (strPass == true){
        // 输出验证结果
        var strAreaID = sID.substring(0, 6);
        var strDate = sID.substring(6, 14);
        var strAreaFullName = GetAreaName(strAreaID);
        var valSex = sID.substring(14, 17) % 2, strSex;   (valSex==0)? strSex = "女" : strSex = "男";
        var strFullDate = strDate.substring(0, 4) + "年" + strDate.substring(4, 6) + "月" + strDate.substring(6, 8) + "日";
    }
}

//关键:计算效验码,返回完整的身份证号
function per17To18(str){
    var A = new Array(17);
    var W = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2".split(",");//加权因子
    var S = 0;
    //(1)十七位数字本体码加权求和公式
    for (var i = 0; i < A.length; i++)
    {
       A[i] = str.substring(i, i + 1);
       S += A[i] * W[i];
    }
    //(2)计算模
    var Y = S % 11;
    //(3)通过模得到对应的校验码
    var C = "1,0,X,9,8,7,6,5,4,3,2".split(",");//效验码
    return str + C[Y];
}[/code]

Batcher 发表于 2012-12-17 08:58

最后几行变成斜体了,说明丢失了一些代码。
还是放到code标签里面吧

yu2n 发表于 2012-12-19 00:48

[i=s] 本帖最后由 yu2n 于 2013-1-11 01:45 编辑 [/i]

[quote]最后几行变成斜体了,说明丢失了一些代码。
还是放到code标签里面吧
[size=2][color=#999999]Batcher 发表于 2012-12-17 08:58[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=122650&ptid=20964][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]

1楼已更改。

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.