如何用JavaScript验证身份证号码?
验证身份证号码时,可以使用 JavaScript 进行格式检查和校验位的计算。以下是一个基本的验证身份证号码的示例,包括中国身份证号码的18位和15位格式的验证。
中国身份证号码格式
-
18位身份证号码:
- 前17位为数字,最后一位为数字或字母X。
- 计算校验位的方法是根据前17位数字进行特定的加权计算。
-
15位身份证号码:
- 15位为数字。
示例代码
下面是一个 JavaScript 函数,用于验证身份证号码:
function validateIDCard(id) {
// 15位身份证正则表达式
const reg15 = /^\d{15}$/;
// 18位身份证正则表达式
const reg18 = /^\d{17}[\dX]$/i;
if (reg15.test(id)) {
return validate15IDCard(id);
} else if (reg18.test(id)) {
return validate18IDCard(id);
} else {
return false; // 格式不正确
}
}
function validate15IDCard(id) {
// 将15位身份证转换为18位
let id17 = id.substring(0, 6) + '19' + id.substring(6);
return validate18IDCard(id17);
}
function validate18IDCard(id) {
// 校验位权重
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
// 校验位对应值
const checkDigits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += parseInt(id[i]) * weights[i]; // 加权求和
}
const checkIndex = sum % 11; // 计算校验位索引
const checkDigit = checkDigits[checkIndex]; // 获取校验位
return id[17].toUpperCase() === checkDigit; // 比对校验位
}
// 示例用法
const idCard = "123456789012345"; // 输入的身份证号码
if (validateIDCard(idCard)) {
console.log("身份证号码有效");
} else {
console.log("身份证号码无效");
}
说明
-
正则表达式:
reg15
用于匹配15位身份证号码。reg18
用于匹配18位身份证号码(最后一位可以是数字或字母X)。
-
验证逻辑:
- 如果输入的是15位身份证号码,使用
validate15IDCard
函数将其转换为18位并进行验证。 validate18IDCard
函数计算前17位的加权和,并根据计算结果获取校验位,最后与输入的校验位进行比较。
- 如果输入的是15位身份证号码,使用
-
示例用法:
- 可以替换
idCard
的值进行测试,验证身份证号码的有效性。
- 可以替换