63 lines
2.5 KiB
HTML
63 lines
2.5 KiB
HTML
<!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>
|