验证身份证件信息合法性JS函数
包括手机号验证和以下证件:
居民身份证
外国人居留证
台湾居民来往内地通行证
港澳居民来往内地通行证
军官证
护照
//证件类型 证件号码 校验
function CheckIdNumber(idType, idNumber) {
switch (idType) {
case "居民身份证":
return isIDCard(idNumber);
case "外国人居留证":
return isGreenCard(idNumber);
case "台湾居民来往内地通行证":
return isTWCard(idNumber);
case "港澳居民来往内地通行证":
return isHKCard(idNumber);
case "军官证":
return isOfficerCard(idNumber);
case "护照":
return isPassPortCard(idNumber);
default:
return isIDCard(idNumber);
}
}
//身份证 校验
function isIDCard(idCode) {
idCode = idCode.toUpperCase();
var dateReg = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
var city={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:"国外 "};
var _birthday = idCode.substr(6, 8);
_birthday = _birthday.substr(0,4) + '-' + _birthday.substr(4,2) + '-' + _birthday.substr(6,2);
var pass = true;
if(!/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(idCode)){
console.log('身份校验失败')
pass = false;
}else if(!city[idCode.substr(0,2)]){
console.log('地址编码校验失败')
pass = false;
}else if(!dateReg.test(_birthday)){
console.log('出生日期格式错误')
pass = false;
}else{
//18位身份证需要验证最后一位校验位
//加权因子
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 sum = 0;
for (var i = 0; i < 17; i++) {
sum += idCode[i] * factor[i];
}
var last = parity[sum % 11];
if(last != idCode[17]){
console.log('校验位校验失败')
pass = false;
}
}
return pass;
}
//外国人居留证
function isGreenCard(idCode) {
// 外国人居留证 外国人居留证规则,前三位字母后12为数字
var reg = /^[a-zA-Z]{3}[0-9]{12}$/
return reg.test(idCode);
}
//台胞证
function isTWCard(idCode) {
// 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
// 样本: 12345678 或 1234567890B
var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/
return reg.test(idCode);
}
//港澳通行证 校验
function isHKCard(idCode) {
// 规则: H/M + 10位或6位数字
// 样本: H1234567890
var reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/
return reg.test(idCode);
}
//军官证 校验
function isOfficerCard(idCode) {
// 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
// 样本: 军字第2001988号, 士字第P011816X号
var reg = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/
return reg.test(idCode);
}
//护照
function isPassPortCard(idCode) {
// 护照
// 规则: 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
// 样本: 141234567, G12345678, P1234567
var reg = /^([a-zA-z]|[0-9]){5,17}$/;
return reg.test(idCode);
}
//手机号码验证
function change_sjhm(v){
if(!isPhoneNum(v)){
iduo.msg.error("手机号码校验失败!");
}
}
//手机号码 正则
function isPhoneNum(phone){
var reg = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;
return reg.test(phone);
}