关于 JS 验证身份证有效性示例,我们可以采取以下步骤:
关于 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验证身份证有效性示例
基础教程推荐
猜你喜欢
- 从JAVA应用程序使用SSL连接到MongoDb 2023-11-06
- feign 打印日志不显示的问题及解决 2023-02-05
- SpringBoot详解Banner的使用 2023-03-06
- Linux 下java jps命令使用解析详解 2023-08-01
- SpringMVC通过RESTful结构实现页面数据交互 2023-04-18
- Java面试突击之Bean作用域详解 2023-05-08
- Java版本和C++版本的二叉树序列化与反序列化 2023-01-18
- 一文了解Java 线程池的正确使用姿势 2023-06-17
- Netty网络编程实战之搭建Netty服务器 2023-06-10
- java – Tomcat 8中DB2的Log4j jdbc appender 2023-11-08