js验证身份证类
js验证身份证类var idcardnoutil = {
provinceandcitys: {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:国外},
powers: [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],paritybit: [1,0,x,9,8,7,6,5,4,3,2],genders: {male:男,female:女},
checkaddresscode: function(addresscode) {
var check = /^[1-9]\d{5}$/.test(addresscode);
if(!check) return false;
if(idcardnoutil.provinceandcitys[parseint(addresscode.substring(0,2))]){
return true;
} else {
return false;
}
},
checkbirthdaycode: function(birdaycode){
var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birdaycode);
if(!check) return false;
var yyyy = parseint(birdaycode.substring(0,4),10);
var mm = parseint(birdaycode.substring(4,6),10);
var dd = parseint(birdaycode.substring(6),10);
var xdata = new date(yyyy,mm-1,dd);
if(xdata > new date()){
return false;//生日不能大于当前日期
}else if ( ( xdata.getfullyear() == yyyy ) && ( xdata.getmonth () == mm - 1 ) && ( xdata.getdate() == dd ) ){
return true;
}else{
return false;
}
},
getparitybit: function(idcardno){
var id17 = idcardno.substring(0,17);
var power = 0;
for(var i=0;i power += parseint(id17.charat(i),10) * parseint(idcardnoutil.powers[i]);
}
var mod = power % 11;
return idcardnoutil.paritybit[mod];
},
checkparitybit: function(idcardno){
var paritybit = idcardno.charat(17).touppercase();
if(idcardnoutil.getparitybit(idcardno) == paritybit){
return true;
}else{
return false;
}
},
checkidcardno: function(idcardno){
//15位和18位身份证号码的基本校验
var check = /^[0-9]{15}|([0-9]{17}([0-9]|x|x))$/.test(idcardno);
if(!check) return false;
//判断长度为15位或18位
if(idcardno.length==15){
return idcardnoutil.check15idcardno(idcardno);
}else if(idcardno.length==18){
return idcardnoutil.check18idcardno(idcardno);
}else{
return false;
}
},
//校验15位的身份证号码
check15idcardno: function(idcardno){
//15位身份证号码的基本校验
//在javascript中,正则表达式只能使用/开头和结束,不能使用双引号
var check = /^[1-9][0-9]{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))[0-9]{3}$/.test(idcardno);
if(!check) return false;
//校验地址码
var addresscode = idcardno.substring(0,6);
check = idcardnoutil.checkaddresscode(addresscode);
if(!check) return false;
var birdaycode = '19' + idcardno.substring(6,12);
//校验日期码
return idcardnoutil.checkbirthdaycode(birdaycode);
},
//校验18位的身份证号码
check18idcardno: function(idcardno){
//18位身份证号码的基本格式校验
//在javascript中,正则表达式只能使用/开头和结束,不能使用双引号
var objreg = /^[1-9][0-9]{5}[1-9][0-9]{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))[0-9]{3}([0-9]|x|x)$/i;
var check = objreg.test(idcardno);
if(!check) return false;
//校验地址码
var addresscode = idcardno.substring(0,6);
check = idcardnoutil.checkaddresscode(addresscode);
if(!check) return false;
//校验日期码
var birdaycode = idcardno.substring(6,14);
check = idcardnoutil.checkbirthdaycode(birdaycode);
if(!check) return false;
//验证校检码
return idcardnoutil.checkparitybit(idcardno);
},
formatedatecn: function(day){
var yyyy =day.substring(0,4);
var mm = day.substring(4,6);
var dd = day.substring(6);
return yyyy + '-' + mm +'-' + dd;
},
//获取信息
getidcardinfo: function(idcardno){
var idcardinfo = {
gender:, //性别
birthday: // 出生日期(yyyy-mm-dd)
};
if(idcardno.length==15){
var aday = '19' + idcardno.substring(6,12);
idcardinfo.birthday=idcardnoutil.formatedatecn(aday);
if(parseint(idcardno.charat(14))%2==0){
idcardinfo.gender=idcardnoutil.genders.female;
}else{
idcardinfo.gender=idcardnoutil.genders.male;
}
}else if(idcardno.length==18){
var aday = idcardno.substring(6,14);
idcardinfo.birthday=idcardnoutil.formatedatecn(aday);
if(parseint(idcardno.charat(16))%2==0){
idcardinfo.gender=idcardnoutil.genders.female;
}else{
idcardinfo.gender=idcardnoutil.genders.male;
}
}
return idcardinfo;
},
getid15:function(idcardno){
if(idcardno.length==15){
return idcardno;
}else if(idcardno.length==18){
return idcardno.substring(0,6) + idcardno.substring(8,17);
}else{
return null;
}
},
getid18: function(idcardno){
if(idcardno.length==15){
var id17 = idcardno.substring(0,6) + '19' + idcardno.substring(6);
var paritybit = idcardnoutil.getparitybit(id17);
return id17 + paritybit;
}else if(idcardno.length==18){
return idcardno;
}else{
return null;
}
}
};
//验证护照是否正确
function checknumber(number){
var str=number;
//在javascript中,正则表达式只能使用/开头和结束,不能使用双引号
var expression=/(p\d{7})|(g\d{8})/;
var objexp=new regexp(expression);
if(objexp.test(str)==true){
return true;
}else{
return false;
}
};
ad:真正免费,域名+虚机+企业邮箱=0元