這個方法其實也是在網上找到的,身份證号碼驗證其實就是驗證其最後一位是否合法,
下面是我在網上找到的方法
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