身份证号是每个中国公民的重要身份标识,由18位数字组成,包括出生年月日、顺序码和校验码。在JavaScript中,验证身份证号的格式正确性和合法性是一个常见的任务。以下是一些常用的方法来实现这一功能。
1. 基本格式验证
首先,我们需要确保身份证号是18位数字。可以使用正则表达式来检查格式。
function isValidLength(idNumber) {
return /^\d{18}$/.test(idNumber);
}
2. 出生日期验证
身份证号的前17位包含了出生年月日信息。我们可以通过解析这部分信息来验证日期的有效性。
function isValidDate(idNumber) {
const year = parseInt(idNumber.substring(6, 10), 10);
const month = parseInt(idNumber.substring(10, 12), 10);
const day = parseInt(idNumber.substring(12, 14), 10);
const date = new Date(year, month - 1, day);
return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
}
3. 校验码验证
身份证号的最后一位是校验码,用于验证身份证号的前17位是否正确。校验码的计算方法如下:
- 将前17位数字分别乘以不同的系数。
- 将乘积相加。
- 将相加后的和除以11,得到余数。
- 根据余数通过查表得到校验码。
以下是校验码验证的代码实现:
function getCheckDigit(idNumber) {
const coefficients = [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(idNumber[i], 10) * coefficients[i];
}
const remainder = sum % 11;
return checkDigits[remainder];
}
function isValidCheckDigit(idNumber) {
const checkDigit = getCheckDigit(idNumber);
return idNumber[17] === checkDigit;
}
4. 综合验证
最后,我们将上述验证方法整合到一个函数中,以验证身份证号的完整有效性。
function isValidIdNumber(idNumber) {
return isValidLength(idNumber) && isValidDate(idNumber) && isValidCheckDigit(idNumber);
}
5. 示例
以下是一个使用上述函数验证身份证号的示例:
const idNumber = '11010519491231002X';
console.log(isValidIdNumber(idNumber)); // 输出:true 或 false
通过以上方法,你可以在JavaScript中验证身份证号的格式正确性和合法性。在实际应用中,你可以根据需要调整和优化这些代码。
