要校验一个身份证号码是否有效,可以通过正则表达式来检查其格式,然后通过计算校验码来验证其正确性。下面是一个JavaScript函数,它首先使用正则表达式检查身份证号码的格式,然后计算校验码以验证身份证号码的有效性。
```javascript
function validateIDCard(idCard) {
// 正则表达式校验身份证号格式
const regex = /^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/;
if (!regex.test(idCard)) {
return false; // 身份证号码格式不正确
}
// 系数数组
const factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
// 校验码数组
const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
// 计算校验码
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += idCard[i] * factors[i];
}
let checkIndex = sum % 11;
let checkCode = checkCodes[checkIndex];
// 比较校验码
return idCard[17].toUpperCase() === checkCode;
}
// 示例
console.log(validateIDCard("440308199901101512")); // 输出:true 或 false
```
这个函数首先定义了一个正则表达式来匹配身份证号码的格式,然后定义了系数和校验码数组,用于计算校验码。最后,函数通过遍历身份证号码的前17位数字,并乘以相应的系数,计算出总和,再通过总和计算出校验码,并与身份证号码的最后一位(校验码)进行比较。如果匹配,则身份证号码有效,返回`true`;否则返回`false`。