
JavaScript验证身份证号码的步骤:正则表达式、校验码计算、生日及区域验证。正则表达式是验证身份证号码格式的基本方法,能快速筛选出不符合基本规则的号码。下面将详细描述如何使用JavaScript进行身份证号码验证。
身份证号码是中国公民身份的唯一标识,通常分为15位和18位两种。18位身份证号码由17位数字本体码和1位校验码组成。验证身份证号码的主要步骤包括:格式验证、校验码验证、生日及区域验证。
一、正则表达式验证身份证格式
正则表达式是一种强大而灵活的文本匹配工具,用于基本格式的验证。
1、定义正则表达式
首先,我们需要定义用于验证身份证号码格式的正则表达式。18位身份证号码的格式为:前17位为数字,最后一位可以是数字或者字母X。
const idCardPattern = /^[1-9]d{5}(18|19|20)?d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])d{3}(d|X)$/i;
2、验证身份证号码格式
使用正则表达式进行初步验证,确保身份证号码的基本格式正确。
function isValidFormat(idCard) {
return idCardPattern.test(idCard);
}
二、校验码验证
校验码的计算是身份证号码验证的核心部分,通过计算身份证号码前17位的校验和,得出最后一位校验码,进行对比。
1、计算校验码
身份证号码的前17位数字分别乘以不同的系数,然后将乘积相加,得到的和对11取模,模值对应的校验码如下:
const coefficients = [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'];
function calculateCheckCode(idCard) {
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += idCard[i] * coefficients[i];
}
const mod = sum % 11;
return checkCodes[mod];
}
2、验证校验码
将计算出的校验码与身份证号码的第18位进行对比,如果一致则通过验证。
function isValidCheckCode(idCard) {
if (idCard.length !== 18) return false;
const expectedCheckCode = calculateCheckCode(idCard);
const actualCheckCode = idCard[17].toUpperCase();
return expectedCheckCode === actualCheckCode;
}
三、生日及区域验证
除了格式和校验码,还需要验证身份证号码中的生日和区域代码是否有效。
1、验证生日
身份证号码中的第7到14位表示出生日期,需要确保该日期有效。
function isValidBirthday(idCard) {
const year = parseInt(idCard.substr(6, 4));
const month = parseInt(idCard.substr(10, 2));
const day = parseInt(idCard.substr(12, 2));
const birthday = new Date(year, month - 1, day);
return birthday.getFullYear() === year && (birthday.getMonth() + 1) === month && birthday.getDate() === day;
}
2、验证区域代码
身份证号码的前6位为区域代码,可以根据具体的行政区域代码表进行验证,这里仅作简单示例。
const validAreaCodes = ['110000', '120000', '130000']; // 示例部分区域代码
function isValidAreaCode(idCard) {
const areaCode = idCard.substr(0, 6);
return validAreaCodes.includes(areaCode);
}
四、综合验证
最后,将所有验证步骤综合在一起,构建完整的身份证号码验证函数。
function validateIdCard(idCard) {
if (!isValidFormat(idCard)) {
return { valid: false, message: '身份证号码格式不正确' };
}
if (!isValidCheckCode(idCard)) {
return { valid: false, message: '身份证号码校验码不正确' };
}
if (!isValidBirthday(idCard)) {
return { valid: false, message: '身份证号码中的出生日期不合法' };
}
if (!isValidAreaCode(idCard)) {
return { valid: false, message: '身份证号码中的区域代码不合法' };
}
return { valid: true, message: '身份证号码验证通过' };
}
// 示例验证
const idCard = '11010519491231002X';
const result = validateIdCard(idCard);
console.log(result);
通过上面的步骤,我们可以全面地验证身份证号码的合法性,从格式、校验码、生日及区域代码多个方面进行校验,确保身份证号码的真实性和有效性。
相关问答FAQs:
FAQs: 身份证验证
Q: JavaScript可以用来验证身份证号码吗?
A: 是的,JavaScript可以用来验证身份证号码的有效性。你可以使用正则表达式来检查身份证号码是否符合规定的格式。
Q: 身份证号码的验证规则是什么?
A: 身份证号码的验证规则包括以下几个方面:
- 身份证号码长度必须为15位或18位;
- 前17位必须是数字,最后一位可以是数字或字母X;
- 身份证号码的前两位表示省份;
- 身份证号码的第3到第6位表示出生年份;
- 身份证号码的第7到第10位表示出生月份和日期;
- 身份证号码的第11到第14位表示出生地区;
- 身份证号码的最后一位是校验位,用于验证身份证号码的有效性。
Q: 如何用JavaScript验证身份证号码的有效性?
A: 可以使用以下代码来验证身份证号码的有效性:
function validateIDCard(idCard) {
// 正则表达式验证规则
var regExp = /(^d{15}$)|(^d{17}(d|X)$)/;
if (regExp.test(idCard)) {
// 验证通过
return true;
} else {
// 验证失败
return false;
}
}
你可以调用这个函数,并传入身份证号码作为参数,如果返回值为true,则表示身份证号码有效;如果返回值为false,则表示身份证号码无效。
Q: 在JavaScript中如何获取身份证号码的出生年月日和性别?
A: 可以使用以下代码来获取身份证号码的出生年月日和性别:
function getIDCardInfo(idCard) {
var info = {};
info.gender = idCard.substr(16, 1) % 2 === 0 ? "女" : "男"; // 根据身份证号码的倒数第二位判断性别
var year = idCard.substr(6, 4);
var month = idCard.substr(10, 2);
var day = idCard.substr(12, 2);
info.birthday = year + "年" + month + "月" + day + "日";
return info;
}
你可以调用这个函数,并传入身份证号码作为参数,它将返回一个包含出生年月日和性别的对象。
文章包含AI辅助创作,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/3784253