js怎么验证身份证

js怎么验证身份证

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

赞 (0)
Edit1Edit1
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部