身份证验证正则表达式

/**
 * 判断是否是身份证号
 */
function checkIDNumber(num)

{

/* //国外身份证号

{
var Expression=/^[\w\s\S]{4,20}$/;
var objExp=new RegExp(Expression);
if(objExp.test(num)!=true){
return false;
}
return true;
}*/

num = num.toUpperCase();// 字符串转换为大写
if(/^[A-KM-QT-XZ]{1}[1|2][0-9]{8}$/.test(num)){
return true;//台 校验码=10-通算值的末尾数
//通算值= 首字母对应的第一位验证码 + 首字母对应的第二位验证码*9 + 性别码*8 + 第二位数字*7 + 第三位数字*6 + 第四位数字*5 + 第五位数字*4 + 第六位数字*3 + 第七位数字*2 + 第八位数字*1
}
if(/^[1|5|7][0-9]{6}\([0-9aA]\)$/.test(num)){
return true;//澳
}
if(/^((\s[A-Za-z]|([A-Za-z]{2}))\d{6}((\([0-9aA]\))|([0-9aA])))$/.test(num)){
return true;//港
}
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))  {
return false;
}
var len, re;
len = num.length;
if(len != 15 && len !=18)
{
return false;
}
re = new RegExp(len == 15? /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/:/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
var arrSplit = num.match(re); 
var dtmBirth = new Date((len == 15? '19':'') + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bGoodDay;
bGoodDay = ((len == 15 && dtmBirth.getYear() == Number(arrSplit[2])) || (len == 18 && dtmBirth.getFullYear() == Number(arrSplit[2]))) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay){
return false;
}
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
if(len == 15)
{
num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
}
for(i = 0; i < num.length-1; i ++)
{
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(num.length-1, 1))
{
return false;
}
return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值