study/html/判断身份证号有效性.html

63 lines
2.5 KiB
HTML
Raw Normal View History

2022-08-04 04:30:02 +00:00
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="" />
<title>判断身份证号有效性</title>
</head>
<body>
<h1>判断身份证号有效性</h1>
<h2>作者: 赵海洋</h2>
<input type="text" id="number" placeholder="输入身份证号" />
<button onclick="check()">运行</button>
<script src="https://momentjs.com/downloads/moment.js"></script>
<script>
// 判断身份证号有效性
function isValidIdNumber(number) {
if (typeof number !== "string") return false;
if (!number.match(/^\d{17}[\dx]$/)) return false;
const digits = number.split("");
const 大区制代码 = number.substr(0, 1), // 大区制代码
省级行政区代码 = number.substr(0, 2), // 省级行政区代码
地级行政区代码 = number.substr(2, 2), // 地级行政区代码
县级行政区代码 = number.substr(4, 2), // 县级行政区代码
出生年 = number.substr(6, 4), // 出生年
出生月 = number.substr(10, 2), // 出生月
出生日 = number.substr(12, 2), // 出生日
顺序码 = number.substr(14, 3); // 顺序码
// 判断出生日期是否有效
const 出生日期 = new Date(`${出生年}-${出生月}-${出生日}`);
if (出生日期 == "Invalid Date") return false;
// 判断校验码是否有效
const coefficients = [
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,
];
let sum = 0;
for (let i = 0; i < 17; i++) sum += digits[i] * coefficients[i];
if ("10x98765432"[sum % 11] !== digits[17]) return false;
console.log("身份证号码有效");
console.log("省级行政区代码", 省级行政区代码);
console.log("地级行政区代码", 地级行政区代码);
console.log("县级行政区代码", 县级行政区代码);
console.log("生日", 出生日期.toLocaleDateString());
console.log("岁数", moment().diff(出生日期, "years"));
console.log("性别", 顺序码 % 2 ? "男" : "女");
return true;
}
function check() {
alert(
isValidIdNumber(number.value)
? `[${number.value}]是[有效]的身份证号码`
: `[${number.value}]是[无效]的身份证号码`
);
}
</script>
</body>
</html>