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或默認的錯誤提示; },