
如何用JS验证身份证是否合法
使用正则表达式验证、校验身份证号码的长度和格式、使用算法验证身份证号码的校验码。 其中,使用正则表达式验证是最常用且有效的方法。
一、身份证号码的基本格式
中国大陆的身份证号码有两种格式:15位和18位。自1999年10月1日起,新的身份证号码为18位,老的15位身份证号码逐步废止。18位身份证号码包含了更多的个人信息,如出生日期、地区代码和校验码。
二、使用正则表达式验证
正则表达式是一种强大的工具,可以有效地验证身份证号码的基本格式。以下是验证身份证号码的正则表达式:
-
15位身份证号码的正则表达式:
const idCard15 = /^[1-9]d{7}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}$/; -
18位身份证号码的正则表达式:
const idCard18 = /^[1-9]d{5}(18|19|20)d{2}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}(d|X)$/;
这些正则表达式可以检查身份证号码的长度、地区代码、出生日期等基本信息。
三、校验身份证号码的长度和格式
为了验证身份证号码是否合法,首先需要检查其长度和基本格式。
function isValidIDCard(idCard) {
const idCard15 = /^[1-9]d{7}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}$/;
const idCard18 = /^[1-9]d{5}(18|19|20)d{2}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}(d|X)$/;
if (idCard.length === 15) {
return idCard15.test(idCard);
} else if (idCard.length === 18) {
return idCard18.test(idCard);
} else {
return false;
}
}
四、使用算法验证身份证号码的校验码
18位身份证号码的最后一位是校验码,它是根据前17位计算得出的。以下是计算校验码的算法:
function calculateCheckCode(idCard) {
const weights = [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] * weights[i];
}
const mod = sum % 11;
return checkCodes[mod];
}
function isValidIDCard(idCard) {
const idCard15 = /^[1-9]d{7}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}$/;
const idCard18 = /^[1-9]d{5}(18|19|20)d{2}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}(d|X)$/;
if (idCard.length === 15) {
return idCard15.test(idCard);
} else if (idCard.length === 18) {
if (idCard18.test(idCard)) {
const checkCode = calculateCheckCode(idCard);
return idCard[17] === checkCode;
} else {
return false;
}
} else {
return false;
}
}
五、综合验证方法
将上述几步综合起来,我们可以得到一个完整的身份证号码验证函数:
function isValidIDCard(idCard) {
const idCard15 = /^[1-9]d{7}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}$/;
const idCard18 = /^[1-9]d{5}(18|19|20)d{2}((0d)|(1[0-2]))(([0-2]d)|3[0-1])d{3}(d|X)$/;
function calculateCheckCode(idCard) {
const weights = [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] * weights[i];
}
const mod = sum % 11;
return checkCodes[mod];
}
if (idCard.length === 15) {
return idCard15.test(idCard);
} else if (idCard.length === 18) {
if (idCard18.test(idCard)) {
const checkCode = calculateCheckCode(idCard);
return idCard[17] === checkCode;
} else {
return false;
}
} else {
return false;
}
}
通过以上步骤,我们就能够用JS验证身份证是否合法。需要注意的是,虽然正则表达式和算法可以验证身份证号码的基本格式和校验码,但并不能验证身份证号码的真实性,进一步的验证还需要结合其他信息和数据库查询。
六、实际应用场景
在实际应用中,验证身份证号码的合法性是一个常见需求。例如,在用户注册、信息录入、身份验证等场景中,确保身份证号码的合法性可以有效提高数据的准确性和可靠性。
1、用户注册
在用户注册过程中,验证身份证号码的合法性可以防止用户输入错误的信息,提高用户数据的准确性。
document.getElementById('registerForm').addEventListener('submit', function(event) {
const idCard = document.getElementById('idCard').value;
if (!isValidIDCard(idCard)) {
event.preventDefault();
alert('请输入合法的身份证号码');
}
});
2、信息录入
在信息录入系统中,验证身份证号码的合法性可以防止数据录入错误,确保数据的准确性。
document.getElementById('inputForm').addEventListener('submit', function(event) {
const idCard = document.getElementById('idCard').value;
if (!isValidIDCard(idCard)) {
event.preventDefault();
alert('请输入合法的身份证号码');
}
});
3、身份验证
在身份验证系统中,验证身份证号码的合法性是确保用户身份的关键一步。
document.getElementById('verifyForm').addEventListener('submit', function(event) {
const idCard = document.getElementById('idCard').value;
if (!isValidIDCard(idCard)) {
event.preventDefault();
alert('请输入合法的身份证号码');
}
});
七、进一步的验证和扩展
虽然上述方法可以有效验证身份证号码的合法性,但在实际应用中,还需要结合其他信息和数据库查询进行进一步的验证。例如,可以通过调用公安部门的接口查询身份证号码的真实性,或者结合用户的其他信息进行综合验证。
1、调用公安部门接口
通过调用公安部门的接口,可以查询身份证号码的真实性,提高验证的准确性。
function verifyIDCard(idCard) {
// 调用公安部门接口进行验证
// ...
}
2、结合其他信息进行综合验证
结合用户的其他信息,例如姓名、出生日期等,可以进行综合验证,提高验证的准确性。
function isValidUser(idCard, name, birthDate) {
// 结合姓名、出生日期等信息进行综合验证
// ...
}
八、总结
通过使用JS验证身份证号码的合法性,可以有效提高用户数据的准确性和可靠性。在实际应用中,需要结合正则表达式、算法验证、调用公安部门接口和综合验证等多种方法,确保身份证号码的合法性和真实性。希望本文对你在实际应用中验证身份证号码的合法性有所帮助。
相关问答FAQs:
1. 如何使用JavaScript验证身份证是否合法?
JavaScript可以通过正则表达式来验证身份证是否合法。以下是一个示例代码:
function validateIDCard(idCard) {
// 正则表达式验证身份证号码
var reg = /^[1-9]d{5}(19|20)d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|30|31)d{3}[0-9Xx]$/;
if (reg.test(idCard)) {
// 身份证号码合法
return true;
} else {
// 身份证号码不合法
return false;
}
}
2. 我如何通过JavaScript判断身份证号码是否合法?
要判断身份证号码是否合法,可以使用JavaScript的正则表达式来匹配身份证格式。如果匹配成功,那么身份证号码就是合法的;如果匹配失败,则不合法。你可以使用以下代码来判断:
function validateIDCard(idCard) {
var reg = /^[1-9]d{5}(19|20)d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|30|31)d{3}[0-9Xx]$/;
if (reg.test(idCard)) {
// 身份证号码合法
return true;
} else {
// 身份证号码不合法
return false;
}
}
3. 身份证号码验证的JavaScript代码是什么?
要验证身份证号码是否合法,你可以使用JavaScript的正则表达式来匹配身份证格式。以下是一个示例代码:
function validateIDCard(idCard) {
var reg = /^[1-9]d{5}(19|20)d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|30|31)d{3}[0-9Xx]$/;
if (reg.test(idCard)) {
// 身份证号码合法
return true;
} else {
// 身份证号码不合法
return false;
}
}
使用上述代码,你可以调用validateIDCard函数来判断身份证号码是否合法。如果返回值为true,则表示身份证号码合法;如果返回值为false,则表示身份证号码不合法。
文章包含AI辅助创作,作者:Edit2,如若转载,请注明出处:https://docs.pingcode.com/baike/3719220