关于 JS 验证身份证有效性示例,我们可以采取以下步骤:
1. 获取身份证号码并进行格式验证
首先,我们需要获取用户输入的身份证号码,然后判断其长度是否为 18 位,并且最后一位是否为数字或字母 X(表示校验位)。具体实现代码如下:
const idCard = document.getElementById('idCard').value
// 长度验证
if (idCard.length !== 18) {
alert('身份证号码应为18位')
return
}
// 校验位验证
if (!/\d|x/i.test(idCard.charAt(17))) {
alert('身份证校验位错误')
return
}
2. 校验身份证号码的合法性
接下来,我们需要对身份证号码进行校验,主要包括以下几个方面:
- 前两位表示所在省份,需验证是否存在;
- 中间八位表示出生日期,需验证是否合法;
- 最后一位是校验位,需验证是否正确。
具体实现代码如下:
// 验证省份
const provinceCode = idCard.substring(0, 2)
const provinceList = ['11', '12', '13', '14', '15', '21', '22', '23', '31', '32', '33', '34', '35', '36', '37', '41', '42', '43', '44', '45', '46', '50', '51', '52', '53', '54', '61', '62', '63', '64', '65']
if (!provinceList.includes(provinceCode)) {
alert('身份证号码前两位不合法')
return
}
// 验证出生日期
const birthYear = idCard.substring(6, 10)
const birthMonth = idCard.substring(10, 12)
const birthDay = idCard.substring(12, 14)
const birthDate = new Date(`${birthYear}-${birthMonth}-${birthDay}`)
if (birthDate.toString() === 'Invalid Date') {
alert('身份证号码中的出生日期不合法')
return
}
// 验证校验位
const weightFactors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
const checkCodeList = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
let weightedSum = 0
for (let i = 0; i < 17; i++) {
const digit = parseInt(idCard.charAt(i))
weightedSum += digit * weightFactors[i]
}
const modResult = weightedSum % 11
const checkCode = idCard.charAt(17)
if (checkCode !== checkCodeList[modResult]) {
alert('身份证校验位错误')
return
}
alert('身份证号码合法')
以上代码中,我们通过 substring
方法获取身份证号码的特定部分,然后分别进行验证和计算,最终得到有效结果。
示例1:
假设用户输入的身份证号码为 131182198612121234,按照以上步骤进行验证后,可得到“身份证号码合法”的提示信息。
示例2:
假设用户输入的身份证号码为 13118219861212123X(其中 X 为校验位),按照以上步骤进行验证后,可得到“身份证校验位错误”的提示信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS验证身份证有效性示例 - Python技术站