身份证验证
创作时间:
作者:
@小白创作中心
身份证验证
引用
1
来源
1.
https://docs.pingcode.com/baike/2452778
正则表达式
正则表达式是一种强大的工具,用于匹配字符串中的模式。在身份证验证中,正则表达式可以用于初步筛选出那些不符合格式的身份证号。中国身份证号通常是18位的数字,前17位是出生日期和地区编码等信息,第18位是校验码。
const idCardPattern = /^[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)$/;
前端使用正则表达式进行身份证验证,通常是在表单提交时进行验证。以下是一个简单的示例:
function validateIdCard(idCard) {
const idCardPattern = /^[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)$/;
return idCardPattern.test(idCard);
}
这个函数可以在表单提交时调用,确保用户输入的身份证号符合基本格式。
长度校验
中国的身份证号长度通常是18位,但部分旧版身份证号可能是15位。为了确保用户输入的身份证号长度正确,可以在正则表达式验证的基础上,增加长度校验。
function validateIdCardLength(idCard) {
return idCard.length === 18 || idCard.length === 15;
}
为了提高验证的准确性,可以将正则表达式和长度校验结合起来:
function validateIdCard(idCard) {
const idCardPattern = /^[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)$/;
return idCardPattern.test(idCard) && validateIdCardLength(idCard);
}
校验码验证
身份证的第18位是校验码,可以是数字或字母X。校验码的计算方法是根据身份证号前17位的特定算法得出的。具体算法如下:
function calculateChecksum(idCard) {
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const checksums = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += idCard[i] * weights[i];
}
const mod = sum % 11;
return checksums[mod];
}
在验证身份证号时,还需要检查校验码是否正确:
function validateIdCard(idCard) {
const idCardPattern = /^[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 (!idCardPattern.test(idCard)) {
return false;
}
const checksum = calculateChecksum(idCard);
return idCard[17] === checksum;
}
前端表单处理
在实际应用中,身份证验证通常是表单处理的一部分。以下是一个完整的示例,展示了如何在表单提交前验证身份证号:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>身份证验证</title>
</head>
<body>
<form id="idCardForm">
<label for="idCard">身份证号:</label>
<input type="text" id="idCard" name="idCard" required>
<button type="submit">提交</button>
</form>
<script>
function calculateChecksum(idCard) {
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const checksums = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += idCard[i] * weights[i];
}
const mod = sum % 11;
return checksums[mod];
}
function validateIdCard(idCard) {
const idCardPattern = /^[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 (!idCardPattern.test(idCard)) {
return false;
}
const checksum = calculateChecksum(idCard);
return idCard[17] === checksum;
}
document.getElementById('idCardForm').addEventListener('submit', function(event) {
const idCard = document.getElementById('idCard').value;
if (!validateIdCard(idCard)) {
event.preventDefault();
alert('身份证号无效,请重新输入');
}
});
</script>
</body>
</html>
在表单验证中,用户体验非常重要。当用户输入无效的身份证号时,需要及时提示用户,并引导他们进行正确的输入。
function validateIdCard(idCard) {
const idCardPattern = /^[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 (!idCardPattern.test(idCard)) {
return { isValid: false, message: '身份证号格式不正确' };
}
const checksum = calculateChecksum(idCard);
if (idCard[17] !== checksum) {
return { isValid: false, message: '校验码错误' };
}
return { isValid: true };
}
document.getElementById('idCardForm').addEventListener('submit', function(event) {
const idCard = document.getElementById('idCard').value;
const validationResult = validateIdCard(idCard);
if (!validationResult.isValid) {
event.preventDefault();
alert(validationResult.message);
}
});
进一步优化
尽管前端可以进行初步的身份证验证,但为了确保安全性和准确性,后端也应进行二次验证。前后端结合可以有效防止用户绕过前端验证,提交无效数据。
// 前端提交数据
fetch('/validate-id-card', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ idCard: idCard })
})
.then(response => response.json())
.then(data => {
if (data.isValid) {
// 身份证号有效,继续处理表单
} else {
alert(data.message);
}
});
总结
身份证验证在前端表单处理中至关重要。通过正则表达式、长度校验、校验码验证等方法,可以有效提高身份证验证的准确性和可靠性。结合前后端验证,可以确保数据的安全性。
热门推荐
牛蒡根种植技巧大揭秘,防病虫害秘籍来了!
牛蒡茶:秋季养生的黄金饮品
牛蒡根:秋冬养生神器,这样吃最有效
销量破800万,蔡徐坤新专辑缔造乐坛神话,代言成绩再创佳绩
活性叶酸优势明显,可更高效预防胎儿神经管缺陷
吸收率高、风险低:活性叶酸片成孕妇新选择
结节病诊断标准:从临床表现到综合评估
冷冻消融治疗肝癌:专家共识与临床研究证据
皮肤癌的放疗选择,适应症与疗效分析
麦肯锡:全球旅游消费者行为有哪些变化?
悬疑新作频出:《误杀3》《默杀》用反转讲述人性故事
《消失的她》:一场精心设计的骗局,三个意想不到的反转
盗梦空间:诺兰打造的六层梦境电影奇观
饭后洗头真的有害健康?医生这样建议
饭后洗头真的有害健康?专家解读来了
饭后洗头真的伤身?专家解读:这样洗头最健康
心理游园会:让情绪管理变得有趣
“心灵的花园”:用专业心理疏导助力青少年健康成长
徐州心理专家:掌握情绪管理,告别坏心情
情绪管理的心理学基础:专家教你如何掌控情绪
有氧运动:告别坏情绪的科学解决方案
职场情绪智力:提升你的竞争力!
电影剧情转折:5个维度让故事反转更精彩
太空电梯爆炸、数字生命反转:《流浪地球2》烧脑剧情解析
<肖申克的救赎>如何用五个转折讲述希望的力量
<肖申克的救赎>:用20年时间书写希望与坚持的传奇
从爱情到友谊:白玫瑰的15种情感象征
纯洁、祝福、悼念:白色玫瑰的十二重文化寓意
发抖音卖烟花爆竹!安徽一男子被行拘
专家:小腿难瘦是正常现象,过度追求或损害健康