身份证号码的正则表达式

<!DOCTYPE HTML >
< html >
< head >
< meta charset= "utf-8" >
< title >42度空间-身份证号码的正则表达式及验证详解(JavaScript,Regex)方案2测试 </ title >
</ head >
< body >
< div id= "main" ></ div >
< script >
console. log = function( val) {
document. getElementById( "main"). innerHTML += val + "<br />";
}
var checkCode = function ( val) {
var p = / ^ [ 1-9 ] \d {5} ( 18 | 19 | 20 ) \d {2} (( 0 [ 1-9 ]) | ( 1 [ 0-2 ]))(([ 0-2 ][ 1-9 ]) | 10 | 20 | 30 | 31 ) \d {3} [ 0-9Xx ] $ /;
var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
var code = val. substring( 17);
if( p. test( val)) {
var sum = 0;
for( var i= 0; i< 17; i++) {
sum += val[ i]* factor[ i];
}
if( parity[ sum % 11] == code. toUpperCase()) {
return true;
}
}
return false;
}
var checkDate = function ( val) {
var pattern = / ^ ( 18 | 19 | 20 ) \d {2} (( 0 [ 1-9 ]) | ( 1 [ 0-2 ]))(([ 0-2 ][ 1-9 ]) | 10 | 20 | 30 | 31 ) $ /;
if( pattern. test( val)) {
var year = val. substring( 0, 4);
var month = val. substring( 4, 6);
var date = val. substring( 6, 8);
var date2 = new Date( year+ "-"+ month+ "-"+ date);
if( date2 && date2. getMonth() == ( parseInt( month) - 1)) {
return true;
}
}
return false;
}
var checkProv = function ( val) {
var pattern = / ^ [ 1-9 ][ 0-9 ] /;
var provs = { 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 : "澳门"};
if( pattern. test( val)) {
if( provs[ val]) {
return true;
}
}
return false;
}
var checkID = function ( val) {
if( checkCode( val)) {
var date = val. substring( 6, 14);
if( checkDate( date)) {
if( checkProv( val. substring( 0, 2))) {
return true;
}
}
}
return false;
}
//输出 true
console. log( checkID( "11010519491231002X"));
//输出 false,校验码不符
console. log( checkID( "110105194912310021"));
//输出 false,日期码不符
console. log( checkID( "110105194902310026"));
//输出 false,地区码不符
console. log( checkID( "160105194912310029"));
< / script >
</ body >
</ html >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值