
JS身份证格式怎么写:使用正则表达式验证、处理身份证号码
在JavaScript中处理身份证号码的格式,可以通过正则表达式来验证和处理。正则表达式验证、提取身份证信息、校验码校验是实现这一功能的关键。接下来,我们将详细探讨如何在JavaScript中编写代码来实现身份证号码的验证和处理。
一、正则表达式验证
正则表达式(Regular Expressions)是一种强大的工具,可以用来匹配、搜索和替换字符串。对于中国大陆的身份证号码,其基本格式为15位或18位数字,18位号码的最后一位可以是数字或字母X。以下是一个用于验证身份证号码格式的正则表达式:
function validateIDCard(id) {
const regex = /^(^[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)$)|(^[1-9]d{7}(0[1-9]|1[0-2])(0[1-9]|[12]d|3[01])d{3}$)$/;
return regex.test(id);
}
console.log(validateIDCard("11010519491231002X")); // true
console.log(validateIDCard("123456789012345")); // false
二、提取身份证信息
身份证号码中包含了出生日期和性别等信息。通过字符串操作和正则表达式,可以提取这些信息。
function extractIDInfo(id) {
if (!validateIDCard(id)) {
return null;
}
let birthYear, birthMonth, birthDay, gender;
if (id.length === 18) {
birthYear = id.substring(6, 10);
birthMonth = id.substring(10, 12);
birthDay = id.substring(12, 14);
gender = parseInt(id.charAt(16)) % 2 === 0 ? 'Female' : 'Male';
} else if (id.length === 15) {
birthYear = '19' + id.substring(6, 8);
birthMonth = id.substring(8, 10);
birthDay = id.substring(10, 12);
gender = parseInt(id.charAt(14)) % 2 === 0 ? 'Female' : 'Male';
}
return {
birthYear: birthYear,
birthMonth: birthMonth,
birthDay: birthDay,
gender: gender
};
}
console.log(extractIDInfo("11010519491231002X"));
// Output: { birthYear: '1949', birthMonth: '12', birthDay: '31', gender: 'Male' }
三、校验码校验
18位身份证号码的最后一位是校验码,它是根据前17位数字通过特定算法计算出来的。下面是校验码校验的实现:
function calculateChecksum(id) {
const weights = [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 += id.charAt(i) * weights[i];
}
const mod = sum % 11;
return checkDigits[mod];
}
function validateChecksum(id) {
if (id.length === 18) {
return id.charAt(17) === calculateChecksum(id);
}
return false;
}
console.log(validateChecksum("11010519491231002X")); // true
console.log(validateChecksum("110105194912310021")); // false
四、综合实例:完整的身份证验证函数
结合上述步骤,我们可以编写一个完整的身份证验证函数,该函数不仅验证格式,还校验最后一位校验码。
function isValidIDCard(id) {
if (!validateIDCard(id)) {
return false;
}
if (id.length === 18 && !validateChecksum(id)) {
return false;
}
return true;
}
console.log(isValidIDCard("11010519491231002X")); // true
console.log(isValidIDCard("123456789012345")); // false
console.log(isValidIDCard("110105194912310021")); // false
五、错误处理和边界情况
在实际应用中,处理身份证号码时可能会遇到各种异常情况,例如输入为空、包含非法字符等。因此,我们需要在代码中加入错误处理逻辑。
function validateIDCardWithErrors(id) {
if (typeof id !== 'string' || id.trim() === '') {
throw new Error('ID card number must be a non-empty string.');
}
if (!validateIDCard(id)) {
throw new Error('ID card number format is invalid.');
}
if (id.length === 18 && !validateChecksum(id)) {
throw new Error('ID card number checksum is invalid.');
}
return true;
}
try {
console.log(validateIDCardWithErrors("11010519491231002X")); // true
console.log(validateIDCardWithErrors("123456789012345")); // Error: ID card number format is invalid.
} catch (error) {
console.error(error.message);
}
六、应用场景和扩展
在实际开发中,身份证号码的验证和处理常用于用户注册、身份验证等场景。为了更好地管理这些功能,可以考虑使用项目管理系统,例如研发项目管理系统PingCode和通用项目协作软件Worktile,以提高开发和协作效率。
1. 用户注册表单验证
在用户注册表单中,身份证号码的验证是一个常见需求。通过上述函数,可以在前端进行初步验证,减少服务器负担。
2. 身份验证系统
在某些系统中,身份证号码用于身份验证。通过正则表达式和校验码校验,可以提高系统的安全性和可靠性。
3. 数据清洗和处理
在数据分析和处理过程中,身份证号码的验证和提取也是一个常见需求。通过上述方法,可以快速提取出生日期和性别等信息。
七、结论
通过本文的详细介绍,我们学习了如何在JavaScript中使用正则表达式和字符串操作来验证和处理身份证号码。正则表达式验证、提取身份证信息、校验码校验是实现这一功能的关键。为了提高开发效率和协作效果,建议使用研发项目管理系统PingCode和通用项目协作软件Worktile来管理和跟踪相关开发任务。希望本文对你在实际开发中处理身份证号码有所帮助。
相关问答FAQs:
1. 如何在JavaScript中验证身份证号码的格式?
要在JavaScript中验证身份证号码的格式,可以使用正则表达式来匹配身份证号码的模式。以下是一个示例代码:
function validateIDCard(idCard) {
// 身份证号码的正则表达式
var idCardPattern = /^d{17}(d|X|x)$/;
if (idCardPattern.test(idCard)) {
return true;
} else {
return false;
}
}
// 示例用法
var idCardNumber = "32012319900101001X";
if (validateIDCard(idCardNumber)) {
console.log("身份证号码格式正确");
} else {
console.log("身份证号码格式错误");
}
2. 身份证号码的有效性如何判断?
要判断身份证号码的有效性,除了验证格式外,还需要验证身份证号码的校验位是否正确。校验位是身份证号码最后一位,用于验证身份证号码的合法性。
以下是一个示例代码,用于判断身份证号码的有效性:
function validateIDCard(idCard) {
// 身份证号码的正则表达式
var idCardPattern = /^d{17}(d|X|x)$/;
if (idCardPattern.test(idCard)) {
// 验证校验位
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var sum = 0;
for (var i = 0; i < 17; i++) {
sum += parseInt(idCard.charAt(i)) * factor[i];
}
var mod = sum % 11;
if (idCard.charAt(17).toUpperCase() == checkCode[mod]) {
return true;
} else {
return false;
}
} else {
return false;
}
}
// 示例用法
var idCardNumber = "32012319900101001X";
if (validateIDCard(idCardNumber)) {
console.log("身份证号码有效");
} else {
console.log("身份证号码无效");
}
3. 如何在JavaScript中提取身份证号码中的生日信息?
要提取身份证号码中的生日信息,可以使用JavaScript的字符串截取方法。根据身份证号码的格式,生日信息在第6位到第13位之间。
以下是一个示例代码,用于提取身份证号码中的生日信息:
function getBirthdayFromIDCard(idCard) {
// 身份证号码的正则表达式
var idCardPattern = /^d{17}(d|X|x)$/;
if (idCardPattern.test(idCard)) {
var birthday = idCard.substring(6, 14);
return birthday;
} else {
return "无效的身份证号码";
}
}
// 示例用法
var idCardNumber = "32012319900101001X";
var birthday = getBirthdayFromIDCard(idCardNumber);
console.log("生日信息:" + birthday);
文章包含AI辅助创作,作者:Edit2,如若转载,请注明出处:https://docs.pingcode.com/baike/3641201