【身份证号校验】

【身份证号校验】

新建js文件,Idcard.js

//验证身份证的合法性
export default function IdentityCodeValid(code) {
	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 tip = "";
	var pass = true;

	if (!code || !/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
		tip = "身份证号格式错误";
		pass = false;
	} else if (!city[code.substr(0, 2)]) {
		tip = "地址编码错误";
		pass = false;
	} else {
		//18位身份证须要验证最后一位校验位
		if (code.length == 15) {
			var reg =
				/^[1-9]\d{5}((\d{2}(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(02(0[1-9]|1[0-9]|2[0-8]))))|(((0[48]|[2468][048]|[13579][26])|(00))0229))\d{2}[0-9Xx]$/
				.test(code);
			console.log(reg, "999")
			pass = reg
		}
		//18位身份证须要验证最后一位校验位
		if (code.length == 18) {
			//∑(ai×Wi)(mod 11)
			var year = code.substr(6, 4), //身份证年
				month = code.substr(10, 2), //身份证月
				date = code.substr(12, 2), //身份证日
				sexNum = code.split(14, 3), //性别
				time = Date.parse(month + '-' + date + '-' + year), //身份证日期时间戳date
				now_time = Date.parse(new Date()), //当前时间戳
				dates = (new Date(year, month, 0)).getDate(); //身份证当月天数
			console.log(Number(year), "99")
			let newyear = Number(year)
			if (newyear < 1922) {
				pass = false;
			}
			//加权因子
			code = code.split('');
			var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
			//校验位
			var parity = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
			var sum = 0;
			var ai = 0;
			var wi = 0;
			for (var i = 0; i < 17; i++) {
				ai = code[i];
				wi = factor[i];
				sum += ai * wi;
			}
			var last = parity[sum % 11];
			console.log(sum % 11, code[17], "000")
			if (parity[sum % 11] != code[17]) {
				if (code[17] == 'X' || code[17] == "x") {
					pass = true;
				} else {
					tip = "校验位错误";
					pass = false;
				}
			}
		}
	}
	console.log(tip, "000")
	console.log(pass, "000")
	return pass;
}

页面使用

//引入
import Idcard from "@/common/Idcard.js"

if (!Idcard(this.information.idCard)) {
			uni.showToast({
				title: "身份证输入有误",
				icon: 'none'
			})
			return
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值