1. 程式人生 > >【jq】驗證15位和18位身份證號碼的正則表示式

【jq】驗證15位和18位身份證號碼的正則表示式

function validateIdCard(idCard) {  
    //15位和18位身份證號碼的正則表示式  
var regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;  
    //如果通過該驗證,說明身份證格式正確,但準確性還需計算  
if (regIdCard.test(idCard)) {  
        if (idCard.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
+= idCard.substring(i, i + 1) * idCardWi[i]; } var idCardMod = idCardWiSum % 11;//計算出校驗碼所在陣列的位置 var idCardLast = idCard.substring(17);//得到最後一位身份證號碼 //如果等於2,則說明校驗碼是10,身份證號碼最後一位應該是X if (idCardMod == 2) { if (idCardLast == "X" || idCardLast == "x") { return true
; //alert("恭喜通過驗證啦!"); } else { return false; //alert("身份證號碼錯誤!"); } } else { //用計算出的驗證碼與最後一位身份證號碼匹配,如果一致,說明通過,否則是無效的身份證號碼 if (idCardLast == idCardY[idCardMod]) { //alert("恭喜通過驗證啦!"); return true; } else { return false; //alert("身份證號碼錯誤!"); } } } } else { //alert("身份證格式不正確!"); return false; } }