天天看點

js判斷身份證最後一位是否合法的方法的總結

這個方法其實也是在網上找到的,身份證号碼驗證其實就是驗證其最後一位是否合法,

下面是我在網上找到的方法

function isTrueValidateCodeBy18IdCard(idCard) {

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 

var sum = 0; // 聲明權重求和變量 

for ( var i = 0; i < 17; i++) {

var tempnum = idCard.substring(i,i+1);

alert(tempnum);

if (tempnum..toLowerCase() == 'x') {

tempnum = 10;// 将最後位為x的驗證碼替換為10友善後續操作 

}

sum += Wi[i] * tempnum;// 權重求和 

valCodePosition = sum % 11;// 得到驗證碼所位置 

var a_idCard_num=idCard[17];

if (a_idCard_num..toLowerCase() == 'x') { 

a_idCard_num = 10;

if (a_idCard_num == ValideCode[valCodePosition]) { 

return true; 

} else {

return false; 

這個方法存在的問題是當最後一位是數字的時候執行toLowerCase這個方法的時候在有的IE8下會提示不是對象或者未定義,造成錯誤,是以我經過了以下的修改

/** 

* 判斷身份證号碼為18位時最後的驗證位是否正确 

* @param a_idCard 身份證号碼數組 

* @return 

*/ 

function isTrueValidateCodeBy18IdCard(idCard) { 

if (tempnum == 'x'||tempnum == 'X') { 

if (a_idCard_num == 'x'||a_idCard_num == 'X'){

if (a_idCard_num == ValideCode[valCodePosition]){ 

這樣就解決了

本文轉自 cd1989929 51CTO部落格,原文連結:http://blog.51cto.com/chend/1324503

繼續閱讀