天天看点

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

继续阅读