校验身份证

2014-07-01 14:12:20  访问(2203) 赞(0) 踩(0)

  • 
    
        // ##########################################################################
        // ########################### 身份证号码校验 ############################
        // ########################################################################
    
        // 
        // 校验身份证号码的结果提示
        //
        var CheckIDCardResultMsg = new Array
            (
                "验证通过",
                "身份证号码位数不对",
                "身份证号码出生日期超出范围或含有非法字符",
                "身份证号码校验错误",
                "身份证地区非法"
            );
    
    
        // 过滤空格 //
        function CheckIDNumberTrimString(str) {
            return str.replace(/(^\s*)|(\s*$)/g, "");
        }
    
        // 身份证号码校验 //
        function CheckIDNumber(idcard) {
            return CheckIDNumberByConfig(idcard, true, true, true);
        }
    
        // 身份证号码校验 //
        function CheckIDNumberByConfig(idcard, checkArea, checkDate, checkLogic) {
            idcard = CheckIDNumberTrimString(idcard);
    
            // 补齐18位 //
            if (idcard.length == 17) {
                idcard = idcard + "X";
            }
    
            var area = { 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 Y, JYM;
            var S, M;
            var ereg;
            var idcard_array = new Array();
            idcard_array = idcard.split("");
    
            var theResult = 0;
    
            if (checkArea) {
                if (area[parseInt(idcard.substr(0, 2), 10)] == null) {
                    return 4;
                }
            }
    
            if (checkDate) {
                switch (idcard.length) {
                    case 15:
                        if (
    				(parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0
    				&&
    				(
    					(
    						(parseInt(idcard.substr(6, 2)) + 1900) % 100 != 0
    					)
    					||
    					(
    						(parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0
    						&& (parseInt(idcard.substr(6, 2)) + 1900) % 400 == 0
    					)
    				)
    			) {
                            ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;
                        }
                        else {
                            ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;
                        }
                        if (ereg.test(idcard)) {
                            return 0;
                        }
                        else {
                            return 2;
                        }
                        break;
                    case 18:
                        if (
    				parseInt(idcard.substr(6, 4), 10) % 4 == 0
    				&&
    				(
    					(
    						parseInt(idcard.substr(6, 4), 10) % 100 != 0
    					)
    					||
    					(
    						parseInt(idcard.substr(6, 4), 10) % 100 == 0
    						&& parseInt(idcard.substr(6, 4), 10) % 400 == 0
    					)
    				)
    				) {
                            ereg = /^[1-9][0-9]{5}[1-2][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/; //闰年出生日期的合法性正则表达式 
                        }
                        else {
                            ereg = /^[1-9][0-9]{5}[1-2][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/; //平年出生日期的合法性正则表达式 
                        }
    
                        if (ereg.test(idcard)) {
                            theResult = 0;
                        }
                        else {
                            return 2;
                        }
                        break;
                    default:
                        return 1;
                        break;
                }
            }
    
            if (theResult != 0)
                return theResult;
    
    
            if (checkLogic) {
                if (idcard.length == 18) {
                    S = (parseInt(idcard_array[0], 10) + parseInt(idcard_array[10], 10)) * 7
            + (parseInt(idcard_array[1], 10) + parseInt(idcard_array[11], 10)) * 9
            + (parseInt(idcard_array[2], 10) + parseInt(idcard_array[12], 10)) * 10
            + (parseInt(idcard_array[3], 10) + parseInt(idcard_array[13], 10)) * 5
            + (parseInt(idcard_array[4], 10) + parseInt(idcard_array[14], 10)) * 8
            + (parseInt(idcard_array[5], 10) + parseInt(idcard_array[15], 10)) * 4
            + (parseInt(idcard_array[6], 10) + parseInt(idcard_array[16], 10)) * 2
            + parseInt(idcard_array[7], 10) * 1
            + parseInt(idcard_array[8], 10) * 6
            + parseInt(idcard_array[9], 10) * 3;
    
                    // alert(S);
                    Y = S % 11;
                    // alert(Y);
                    M = "F";
                    JYM = "10X98765432";
                    M = JYM.substr(Y, 1);
                    // alert(M);
                    if (M == idcard_array[17]) {
                        // return Errors[0]; 
                        theResult = 0;
                    }
                    else {
                        if (M == "X" && idcard_array[17] == "x")
                            theResult = 0;
                        else
                            return 3;
                    }
                }
            }
    
    
            return theResult;
        }
    
        // ##########################################################################
        // ########################### 身份证号码校验END #########################
        // ########################################################################
    
    

    示例

    
    
    
    
    
    
    
    
            校验身份证__慢子助手编程交流与共享网
        
        
        
    
        

    校验身份证

    输入:
    输出:
      

    运行代码


上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)