在現代生活中,身份證號被廣泛使用,如注冊網站、申請貸款、辦理證件等。但是,很多人并不知道如何正確檢測一個身份證號是否合法。這時 JavaScript 可以起到很大的作用,通過代碼判斷一個身份證號是否有效。
一個合法的身份證號應該滿足以下要求:
- 18位長(如不足,前面可以使用0補全)
- 最后一位可能是數字或字母X(表示10),其他位置必須是數字
- 前2位是省的代碼
- 第3-4位是城市代碼
- 第5-6位是區縣代碼
- 第7-14位是生日
- 第15-17位可以是歷年度的順序編號,也可以是未知的其他信息
我們可以定義一個函數來檢測一個身份證號是否合法:
function checkIDCard(idcard){ var Errors=new Array("驗證通過!","身份證號碼位數不對!","身份證號碼出生日期超出范圍或含有非法字符!","身份證號碼校驗錯誤!","您的輸入不是正確的身份證號碼,請重新輸入!"); var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"} var Y,JYM; var S,M; var idcard_array=idcard.split(""); if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4]; switch(idcard.length){ case 15: if((parseInt(idcard.substr(6,2))+1900)%4==0||(parseInt(idcard.substr(6,2))+1900)%100==0||(parseInt(idcard.substr(6,2))+1900)%400==0){ if(parseInt(idcard.substr(12,2))>29){ return Errors[2]; } } else{ if(parseInt(idcard.substr(12,2))>28){ return Errors[2]; } } return Errors[0]; break; case 18: if(parseInt(idcard.substr(6,4))%4==0||(parseInt(idcard.substr(6,4))%100==0&&parseInt(idcard.substr(6,4))%4==0)){ if(parseInt(idcard.substr(10,2))>12||parseInt(idcard.substr(10,2))==0){ return Errors[2]; } if(parseInt(idcard.substr(12,2))>31||parseInt(idcard.substr(12,2))==0){ return Errors[2]; } } else{ if(parseInt(idcard.substr(10,2))>12||parseInt(idcard.substr(10,2))==0){ return Errors[2]; } if(parseInt(idcard.substr(12,2))>30||parseInt(idcard.substr(12,2))==0){ return Errors[2]; } } if(parseInt(idcard.substr(14,2))%2==0){ return Errors[3]; } if(area[parseInt(idcard.substr(0,2))]==null){ return Errors[4]; } S=(parseInt(idcard_array[0])+parseInt(idcard_array[10]))*7+(parseInt(idcard_array[1])+parseInt(idcard_array[11]))*9+(parseInt(idcard_array[2])+parseInt(idcard_array[12]))*10+(parseInt(idcard_array[3])+parseInt(idcard_array[13]))*5+(parseInt(idcard_array[4])+parseInt(idcard_array[14]))*8+(parseInt(idcard_array[5])+parseInt(idcard_array[15]))*4+(parseInt(idcard_array[6])+parseInt(idcard_array[16]))*2+parseInt(idcard_array[7])+parseInt(idcard_array[8])+parseInt(idcard_array[9]); Y=S%11; M="F"; JYM="10X98765432"; M=JYM.substr(Y,1); if(M!=idcard_array[17]){ return Errors[3]; } return Errors[0]; break; default: return Errors[1]; break; } }
該函數接受一個身份證號作為參數,返回一個字符串。
- 如果身份證號合法,返回“驗證通過!”
- 如果身份證號位數不對,返回“身份證號碼位數不對!”
- 如果身份證號出生日期超出范圍或含有非法字符,返回“身份證號碼出生日期超出范圍或含有非法字符!”
- 如果身份證號校驗錯誤,返回“身份證號碼校驗錯誤!”
- 如果身份證號不符合規范,返回“您的輸入不是正確的身份證號碼,請重新輸入!”
下面是一個使用該函數的例子:
var idcard = "37098319931205999X"; console.log(checkIDCard(idcard)); // 驗證通過!
以上就是使用 JavaScript 檢測身份證號的方法,希望這篇文章可以對大家有所幫助。