JS验证身份证号,各种验证已做,最完整的

来源:互联网 发布:设置端口untagged 编辑:程序博客网 时间:2024/05/16 08:21
function CardField(v_card)  //v_card为所传的身份证号 

    var reg = /^\d{15}(\d{2}[0-9X])?$/i; 
    if (!reg.test(v_card)){ 
        return false; 
    } 
    if(v_card.length==15){ 
        var n = new Date(); 
        var y = n.getFullYear(); 
        if(parseInt("19" + v_card.substr(6,2)) < 1900 || parseInt("19" + v_card.substr(6,2)) > y){ 
            return false; 
        } 
        var birth = "19" + v_card.substr(6,2) + "-" + v_card.substr(8,2) + "-" + v_card.substr(10,2); 
        if(!isDate(birth)){ 
            return false; 
        } 
    } 
    if(v_card.length==18){ 
        var n = new Date(); 
        var y = n.getFullYear(); 
        if(parseInt(v_card.substr(6,4)) < 1900 || parseInt(v_card.substr(6,4)) > y){ 
            return false; 
        } 
        var birth = v_card.substr(6,4) + "-" + v_card.substr(10,2) + "-" + v_card.substr(12,2); 
        if(!isDate(birth)){ 
            return false; 
        } 
        iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); 
        iSum = 0; 
        for( i=0;i<17;i++){ 
            iC = v_card.charAt(i); 
            iVal = parseInt(iC); 
            iSum += iVal * iW[i]; 
        } 
        iJYM = iSum % 11; 
        if(iJYM == 0) sJYM = "1"; 
        else if(iJYM == 1) sJYM = "0"; 
        else if(iJYM == 2) sJYM = "x"; 
        else if(iJYM == 3) sJYM = "9"; 
        else if(iJYM == 4) sJYM = "8"; 
        else if(iJYM == 5) sJYM = "7"; 
        else if(iJYM == 6) sJYM = "6"; 
        else if(iJYM == 7) sJYM = "5"; 
        else if(iJYM == 8 ) sJYM = "4"; 
        else if(iJYM == 9) sJYM = "3"; 
        else if(iJYM == 10) sJYM = "2"; 
        var cCheck = v_card.charAt(17).toLowerCase(); 
        if( cCheck != sJYM ){ 
            return false; 
        } 
    } 
    try{ 
        var lvAreaId=v_card.substr(0,2); 
        return lvAreaId == "11" || lvAreaId == "12" || lvAreaId == "13" || lvAreaId == "14" || lvAreaId == "15" || lvAreaId == "21" || lvAreaId == "22" || lvAreaId == "23" || lvAreaId == "31" || lvAreaId == "32" || lvAreaId == "33" || lvAreaId == "34" || lvAreaId == "35" || lvAreaId == "36" || lvAreaId == "37" || lvAreaId == "41" || lvAreaId == "42" || lvAreaId == "43" || lvAreaId == "44" || lvAreaId == "45" || lvAreaId == "46" || lvAreaId == "50" || lvAreaId == "51" || lvAreaId == "52" || lvAreaId == "53" || lvAreaId == "54" || lvAreaId == "61" || lvAreaId == "62" || lvAreaId == "63" || lvAreaId == "64" || lvAreaId == "65" || lvAreaId == "71" || lvAreaId == "82" || lvAreaId == "82"; 
    //if(SearchIdCodeMatch(v_card.substr(0,6))==-1) 
    //{ 
    //   return false; 
    //} 
    } 
    catch(ex){ 
    } 
    return true; 


//出生年月判断 
function isDate(strDate) { 
    var strSeparator = "-"; //日期分隔符 
    var strDateArray; 
    var intYear; 
    var intMonth; 
    var intDay; 
    var boolLeapYear; 
    strDateArray = strDate.split(strSeparator); 
    if (strDateArray.length != 3) 
        return false; 
    intYear = parseInt(strDateArray[0], 10); 
    intMonth = parseInt(strDateArray[1], 10); 
    intDay = parseInt(strDateArray[2], 10); 
    if (isNaN(intYear) || isNaN(intMonth) || isNaN(intDay)) 
        return false; 
    if (intMonth > 12 || intMonth < 1) 
        return false; 
    if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intDay > 31 || intDay < 1)) 
        return false; 
    if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30 || intDay < 1)) 
        return false; 
    if (intMonth == 2) { 
        if (intDay < 1) 
            return false; 
        boolLeapYear = false; 
        if ((intYear % 100) == 0) { 
            if ((intYear % 400) == 0) 
                boolLeapYear = true; 
        } else { 
            if ((intYear % 4) == 0) 
                boolLeapYear = true; 
        } 
        if (boolLeapYear) { 
            if (intDay > 29) 
                return false; 
        } else { 
            if (intDay > 28) 
                return false; 
        } 
    } 
    return true; 


第一次发博客,发的不好,请见谅。
0 0
原创粉丝点击