身份證號 js驗證 validform

javascript 正則 身份證號驗證 javascript

datatype:{//傳入自定義datatype類型,能夠是正則,也能夠是函數(函數內會傳入一個參數);
            "idvalid":function(gets,obj,curform,regxp){
                //參數gets是獲取到的表單元素值,obj爲當前表單元素,curform爲當前驗證的表單,regxp爲內置的一些正則表達式的引用;
                var rgp = regxp.idcard;
                if(rgp.test(gets)){
                    if(gets.length==18){
                        var idCardWi=new Array( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); //將前17位加權因子保存在數組裏
                        var idCardY=new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //這是除以11後,可能產生的11位餘數、驗證碼,也保存成數組
                        var idCardWiSum=0; //用來保存前17位各自乖以加權因子後的總和
                        for(var i=0;i<17;i++){
                            idCardWiSum+=gets.substring(i,i+1)*idCardWi[i];
                        }

                        var idCardMod=idCardWiSum%11;//計算出校驗碼所在數組的位置
                        var idCardLast=gets.substring(17);//獲得最後一位身份證號碼

                        //若是等於2,則說明校驗碼是10,身份證號碼最後一位應該是X
                        if(idCardMod==2){
                            if(idCardLast=="X"||idCardLast=="x"){
                                return true;
                            }else{
                                return false;
                            }
                        }else{
                            //用計算出的驗證碼與最後一位身份證號碼匹配,若是一致,說明經過,不然是無效的身份證號碼
                            if(idCardLast==idCardY[idCardMod]){
                               return true;
                            }else{
                                return false;
                            }
                        }
                    }
                    if(gets.length==15){
                        var year =  gets.substring(6,8);
                        var month = gets.substring(8,10);
                        var day = gets.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;
                        }else{
                            return true;
                        }
                    }
                }else{
                    return false;
                }

            } //注意return能夠返回true 或 false 或 字符串文字,true表示驗證經過,返回字符串表示驗證失敗,字符串做爲錯誤提示顯示,返回false則用errmsg或默認的錯誤提示;
        },
相關文章
相關標籤/搜索