正則驗證身份證,比較全面的一個方法


function checkIdcard(gets){
            var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加權因子;
            var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份證驗證位值,10代表X;
        
            if (gets.length == 15) {   
                return isValidityBrithBy15IdCard(gets);   
            }else if (gets.length == 18){   
                var a_idCard = gets.split("");// 得到身份證數組   
                if (isValidityBrithBy18IdCard(gets)&&isTrueValidateCodeBy18IdCard(a_idCard)) {   
                    return true;   
                }   
                return false;
            }
            return false;
            
            function isTrueValidateCodeBy18IdCard(a_idCard) {   
                var sum = 0; // 聲明加權求和變量   
                if (a_idCard[17].toLowerCase() == 'x') {   
                    a_idCard[17] = 10;// 將最后位為x的驗證碼替換為10方便后續操作   
                }   
                for ( var i = 0; i < 17; i++) {   
                    sum += Wi[i] * a_idCard[i];// 加權求和   
                }   
                valCodePosition = sum % 11;// 得到驗證碼所位置   
                if (a_idCard[17] == ValideCode[valCodePosition]) {   
                    return true;   
                }
                return false;   
            }
            
            function isValidityBrithBy18IdCard(idCard18){   
                var year = idCard18.substring(6,10);   
                var month = idCard18.substring(10,12);   
                var day = idCard18.substring(12,14);   
                var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
                // 這里用getFullYear()獲取年份,避免千年蟲問題   
                if(temp_date.getFullYear()!=parseFloat(year) || temp_date.getMonth()!=parseFloat(month)-1 || temp_date.getDate()!=parseFloat(day)){   
                    return false;   
                }
                return true;   
            }
            
            function isValidityBrithBy15IdCard(idCard15){   
                var year =  idCard15.substring(6,8);   
                var month = idCard15.substring(8,10);   
                var day = idCard15.substring(10,12);
                var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
                // 對於老身份證中的你年齡則不需考慮千年蟲問題而使用getYear()方法   
                if(temp_date.getYear()!=parseFloat(year) || temp_date.getMonth()!=parseFloat(month)-1 || temp_date.getDate()!=parseFloat(day)){   
                    return false;   
                }
                return true;
            }

        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM