JS港澳台身份证校验

        // 港澳台身份证号码格式验证
		// 香港身份证校验
		function isXgIDCard(str){
			var checkIDCard = /^[A-Z]\d{6}\([\dA]\)$/;
// 			console.log(checkIDCard.test(str));
			if (checkIDCard.test(str)){
				var hash = (str.substring(0,1).toUpperCase().charCodeAt() - 64) * 8;
                for(var i = 1;i<=6;i++)
                {
                    hash += parseInt(str.substring(i,i+1)) * (8-i)
                }
                console.log(hash)
                var validateNo = hash%11;
                var ret = "";
                if(validateNo==1){
                    ret = "A";
                }else{
                    ret = 11 - validateNo;
                }
//                 console.log(ret);
                if(str.substring(8,9) == ret){
                	return true;
                }else{
                	return false;
                }      
			}else{
				return false
			}
			
		}
		// 澳门身份证校验
		function isAmIDCard(str) {
			var checkIDCard = /^[1|5|7]\d{6}[(\d)]{3}$/;
// 			console.log(checkIDCard.test(str));
			if (checkIDCard.test(str)){
				return true;
			}else{
				return false;
			}
		}
		// 台湾身份证验证
		function isTwIDCard(idcard) {
			var checkIDCard = /^[A-Z][1-2]\d{8}$/;
// 			console.log(checkIDCard.test(idcard));
			if (checkIDCard.test(idcard)){
				var area={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'J':18,'K':19,'L':20,'M':21,'N':22,'P':23,'Q':24,'R':25,'S':26,'T':27,'U':28,'V':29,'X':30,'Y':31,'W':32,'Z':33,'I':34,'O':35};
				var idcard_array = new Array();        
		        idcard_array = idcard.split("");
		        
		        var jym=parseInt(area[idcard_array[0]]/10)+9*(area[idcard_array[0]]%10)+8*idcard_array[1]+7*idcard_array[2]+6*idcard_array[3]+5*idcard_array[4]+4*idcard_array[5]+3*idcard_array[6]+2*idcard_array[7]+1*idcard_array[8];
		        
		        jym=(10-jym%10)%10;
		        
		        if(idcard_array[9]==jym)
		        {       
		            return true;
		        }else{
		        	return false;
		        }
			}else{
				return false;
			}
		}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整精确的身份证校验应该包括以下内容: 1. 身份证号码格式校验:长度、前17位是否为数字、最后一位是否为数字或大写字母X。 2. 地区码校验:前2位是否为有效的省、直辖市、自治区或特别行政区代码。 3. 出生日期码校验:第7~14位是否为有效的日期格式。 4. 校验码计算:根据前17位数字和加权因子计算校验码,并与身份证号码的第18位进行比较。 下面的JS代码可以实现完整精确的身份证校验: ```javascript function isValidIdCard(idCard) { var areaCode = [ // 省、直辖市代码表 '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 factor = [ // 加权因子表 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; var checkCode = [ // 校验码表 '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' ]; var idCardNo = idCard.toString().toUpperCase(); // 身份证号码格式校验 if (!/^\d{17}(\d|X)$/.test(idCardNo)) { return false; } // 地区码校验 if (areaCode.indexOf(idCardNo.substr(0, 2)) === -1) { return false; } // 出生日期码校验 var year = idCardNo.substr(6, 4), month = idCardNo.substr(10, 2), day = idCardNo.substr(12, 2), birthday = new Date(year + '/' + month + '/' + day); if (birthday.getFullYear() != year || (birthday.getMonth() + 1) != month || birthday.getDate() != day) { return false; } // 校验码计算 var sum = 0; for (var i = 0; i < 17; i++) { sum += parseInt(idCardNo.charAt(i)) * factor[i]; } var mod = sum % 11; if (checkCode[mod] != idCardNo.charAt(17)) { return false; } return true; } ``` 使用方法: ```javascript console.log(isValidIdCard('110101199003074518')); // true console.log(isValidIdCard('11010119900307451X')); // true console.log(isValidIdCard('11010119900307')); // false console.log(isValidIdCard('110101199003074519')); // false console.log(isValidIdCard('310101199003074518')); // true console.log(isValidIdCard('31010119900307451X')); // true console.log(isValidIdCard('31010119900307')); // false console.log(isValidIdCard('310101199003074519')); // false console.log(isValidIdCard('88888888888888888X')); // false ``` 注意:该校验方法仅适用于大陆居民身份证号码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值