【身份证号校验】
新建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
}