js判断身份证号是否正确

js判断身份证号是否正确(包括15位,和18位身份证号码验证)

/***身份证号码验证start**/
// 加权因子   
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];   
// 身份证验证位值.10代表X
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];  
function IdCardValidate(idCard) { 
	idCard = idCard.trim();               //去掉字符串头尾空格                     
	if (idCard.length == 15) {   
	   return isValidityBrithBy15IdCard(idCard);       //进行15位身份证的验证    
	} else if (idCard.length == 18) {   
	   var a_idCard = idCard.split("");                // 得到身份证数组   
	   if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){   //进行18位身份证的基本验证和第18位的验证
	       return true;   
	   }else {   
	      return false;   
	   }   
	} else {   
	    return false;   
	}   
}   

/**判断身份证号码为18位时最后的验证位是否正确**/  
function isTrueValidateCodeBy18IdCard(a_idCard) {   
	var sum = 0;                             // 声明加权求和变量   
	if (a_idCard[17].toLowerCase() == 'x') {   
	  a_idCard[17] = 10;                    // 将最后位为x的验证码替换为10方便后续操作   
	}   
	for ( var i = 0; i < 17; i=i+1) {   
	  sum += Wi[i] * a_idCard[i];            // 加权求和   
	}   
	valCodePosition = sum % 11;                // 得到验证码所位置   
	if (a_idCard[17] == ValideCode[valCodePosition]) {   
	  return true;   
	} else {   
	  return false;   
	}   
} 

/***验证18位数身份证号码中的生日是否是有效生日**/  
function isValidityBrithBy18IdCard(idCard18){   
	var year =  idCard18.substring(6,10);   
	var month = idCard18.substring(10,12);   
	var day = idCard18.substring(12,14);   
	var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
	// 这里用getFullYear()获取年份,避免千年虫问题   
	if(temp_date.getFullYear()!=parseFloat(year)   
	       ||temp_date.getMonth()!=parseFloat(month)-1   
	      ||temp_date.getDate()!=parseFloat(day)){   
	  return false;   
	}else{   
	  return true;   
	}   
}

/***验证15位数身份证号码中的生日是否是有效生日**/
function isValidityBrithBy15IdCard(idCard15){ 
	var cArr = idCard15.match(/^[0-9]{15}$/ig); 
	if (cArr == null) {
		return false;
	}
	var year =  idCard15.substring(6,8);   
	var month = idCard15.substring(8,10);   
	var day = idCard15.substring(10,12);   
	var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
	// 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法   
	if(temp_date.getYear()!=parseFloat(year)   
	        ||temp_date.getMonth()!=parseFloat(month)-1   
	        ||temp_date.getDate()!=parseFloat(day)){   
	  return false;   
	}else{   
	  return true;   
	}   
}
/***身份证号码验证 end**/
if(!IdCardValidate(cardid)){  //判断  
		alert( '身份证号输入有误');
	}


将15位身份证号码转成18位

function upCardID15(cardID15){
		var v = [2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7];
		var vs = "10X98765432";
	    	//将15位的号码转换位17位
	    	var cardID17 = cardID15.substring(0,6)+"19"+cardID15.substring(6);
	    	var N = 0;
	    	var R = -1;
	    	var T = '0';//储存最后一个数字
	    	var j = 0;
	    	var cardID18="";
	    	//计数出第18位数字
	    	for(var i=16;i>=0;i--){
	            N += parseInt(cardID17.substring(i, i + 1)) * v[j];
	            j++;
	    	}
	    	R = N % 11;
	    	T = vs.charAt(R);
	    	cardID18 = cardID17 + T;
	    	return cardID18;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值