论坛数据统计           欢迎到【弱电论坛】来学习和讨论问题!

★电工电气产品供求、电气展会、人才、电气技术文章、图库、电气技术论坛等相关内容,请跳转至【电气之家网】--- 可直接使用本站会员名和密码登陆!(首次使用需要激活账户)
标王 热搜: 网络监控  弱电  楼宇对讲  机房及机柜内部的理线方法  CAD  门禁  综合布线  ar800-hn  工资  面板 
 
 
当前位置: 首页 » 技术 » 电脑技术 » 网页网站 » 正文

身份证正则表达式

放大字体  缩小字体 发布日期:2013-01-21  浏览次数:124
 
 

<script language="javascript"><!--

//简单的正则表达式:

//(1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card)

//(2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X)?$/",$id_card)

//(3)preg_match("/(^\d{15}$/)|(\d{17}(?:\d|x|X)$/),$id_card)

 

 

//复杂并且严格一些的验证:

//这个可以验证15位和18位的身份证,并且包含生日和校验位的验证。

//如果有兴趣,还可以加上身份证所在地的验证,就是前6位有些数字合法有些数字不合法。

function isIdCardNo(num)

{

num = num.toUpperCase();

//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。

if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))

{

//return false;

return '输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。';

}

//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。

//下面分别分析出生日期和校验位

var len, re;

len = num.length;

if (len == 15)

{

re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);

var arrSplit = num.match(re);

//检查生日日期是否正确

var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);

var bGoodDay;

bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));

if (!bGoodDay)

{

//return false;

return '19' + arrSplit[2] + "-" + arrSplit[3] + "-" + arrSplit[4]+'输入的身份证号里出生日期不对!';

}

else

{

//将15位身份证转成18位

//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。

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;

num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);

for(i = 0; i < 17; i ++)

{

nTemp += num.substr(i, 1) * arrInt[i];

}

num += arrCh[nTemp % 11];

//return num;

}

}else if (len == 18)

{

re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);

var arrSplit = num.match(re);

//检查生日日期是否正确

var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);

var bGoodDay;

bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));

if (!bGoodDay)

{

//return false;

return arrSplit[2] + "-" + arrSplit[3] + "-" + arrSplit[4]+'输入的身份证号里出生日期不对!';

}

else

{

//检验18位身份证的校验码是否正确。

//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。

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;

for(i = 0; i < 17; i ++)

{

nTemp += num.substr(i, 1) * arrInt[i];

}

valnum = arrCh[nTemp % 11];

if (valnum != num.substr(17, 1))

{

//return false;

return '18位身份证的校验码不正确!应该为:' + valnum;

}

}

}

var sBirthday=num.substr(6,4)+"-"+Number(num.substr(10,2))+"-"+Number(num.substr(12,2));

var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}

if(aCity[parseInt(num.substr(0,2))]==null)

{

//return false;

return '错误的地区码('+num.substr(0,2)+')!';

}

if(Number(num.substr(6,2))<19)

{

//return false;

return sBirthday+'你不会是19世纪以前的出生吧?';

}

//return true;

return aCity[parseInt(num.substr(0,2))]+','+sBirthday+','+(num.replace(/x$/i,'a').substr(16,1)%2?"男":"女");

}

document.write(isIdCardNo("34052419"),"<br />");

document.write(isIdCardNo("340524198002300019"),"<br />");

document.write(isIdCardNo("340524197711111111"),"<br />");

document.write(isIdCardNo("340524189901010010"),"<br />");

document.write(isIdCardNo("100524189901010016"),"<br />");

document.write(isIdCardNo("34052419800101001x"),"<br />");

--></script>

 

#js代码
 
 
 
[ 技术搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]

 
0条 [查看全部]  相关评论

 
点击排行
 
 
 
弱电基础 | 常用软件 | 信息发布规则 | 积分规则 | VIP会员注册 | 广告投放 | 弱电培训 | 联系我们 | 版权声明 | 帮助中心 | 网站地图 | 排名推广 | 京ICP备11008917号-3 | RSS订阅
★本站手机app客户端已上线! 点击下载