1. 简单的正则表达式:
(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)
2. 复杂而严格的验证:
//这可以验证15位和18位ID卡,包括生日和校验位的验证.
//如果您有兴趣,还可以添加对位置的验证,即前6位数字是合法的,有些是非法的.
函数isIdCardNo(num)
{
num = num.toUpperCase();
// ID卡号是15位或18位. 如果全部是15位数字,则18位中的前17位是数字,最后一位是校验位,可以是数字,也可以是字符X.
if(!(/(^ \ d {15} $)|(^ \ d {17}([0-9] | X)$)/. test(num))
{
alert(“输入的ID号码长度不正确,或不符合规定!\ n15位数字应为全数字,而18位数字中的最后一位可以为数字或X. ”) ;
返回假;
}
//根据ISO 7064: 1983生成校验位. MOD11-2,X可以视为数字10.
//分别对出生日期和校验位进行分析
var len,re;
len =数字长度;
如果(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]));
如果(!bGoodDay)
{
alert(“输入的号中的生日不正确!”)
返回假;
}
其他
{
//将15位转换为18位号码
//根据ISO 7064: 1983生成校验位. MOD11-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];
返回数字;
}
}
如果(len == 18)
{
re =新RegExp(/ ^(\ d {6})(\ d {4})(\ d {2})(\ d {2})(\ d {3})([0-9 ] | X)$ /);
var arrSplit = num.match(re);
//检查生日日期是否正确
var dtmBirth =新日期(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]));
如果(!bGoodDay)
{
alert(dtmBirth.getYear());
alert(arrSplit [2]);
alert(“输入的号中的生日不正确!”)
返回假;
}
其他
{
//验证18位ID卡的验证码正确.
//根据ISO 7064: 1983生成校验位. MOD11-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'15位号码验证,'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))
{
alert('18位ID卡的验证码不正确!它应该是: '+ valnum);
返回假;
}
返回数字;
}
}
返回假;
}
3. 严格验证:
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: “海外”}
function cidInfo(sId){
var iSum = 0
var info =“”
if(!/ ^ d {17}(d | x)$ / i.test(sId))返回false;
sId = sId.replace(/ x $ / i,“ a”);
if(aCity [parseInt(sId.substr(0,2))] == null)返回“错误: 非法区域”;
sBirthday = sId.substr(6,4)+“-” + Number(sId.substr(10,2))+“-” + Number(sId.substr(12,2));
var d = new Date(sBirthday.replace(/-/ g,“ /”))
如果(sBirthday!=(d.getFullYear()+“-” +(d.getMonth()+ 1)+“-” + d.getDate()))返回“错误: 非法生日”;
for(var i = 17; i> = 0; i-)iSum + =(Math.pow(2,i)%11)* parseInt(sId.charAt(17-i),11)
如果(iSum!= 1)返回“错误: 证书编号非法”;
返回aCity [parseInt(sId.substr(0,2))+“,” + sBirthday +“15位号码验证,” +(sId.substr(16,1)%2?“ Male”: “ Female”)
}
document.write(cidInfo(“ 380524198002300016”),“
”);
document.write(cidInfo(“ 340524198002300019”),“
”)</ p>
document.write(cidInfo(“ 340524197711111111”),“
”)</ p>
document.write(cidInfo(“ 34052419800101001x”),“
”);
script>
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-268293-1.html
千玺帅帅哒
不满老天做安排
锅炉