这个方法其实也是在网上找到的,身份证号码验证其实就是验证其最后一位是否合法,
下面是我在网上找到的方法
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) {
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);
if (tempnum == 'x'||tempnum == 'X') {
tempnum = 10;// 将最后位为x的验证码替换为10方便后续操作
}
sum += Wi[i] * tempnum;// 加权求和
}
valCodePosition = sum % 11;// 得到验证码所位置
var a_idCard_num=idCard[17];
if (a_idCard_num == 'x'||a_idCard_num == 'X'){
a_idCard_num = 10;
}
if (a_idCard_num == ValideCode[valCodePosition]){
return true;
} else {
return false;
}
}
这样就解决了
本文转自 cd1989929 51CTO博客,原文链接:http://blog.51cto.com/chend/1324503