问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

JS身份证号验证:正则表达式与加权系数详解

创作时间:
作者:
@小白创作中心

JS身份证号验证:正则表达式与加权系数详解

引用
1
来源
1.
https://docs.pingcode.com/baike/3709519

在JavaScript开发中,身份证号验证是一个常见的需求。本文将详细介绍如何通过正则表达式、加权系数和校验码来验证18位的身份证号码,帮助开发者实现准确高效的身份证号验证功能。

一、正则表达式验证基本格式

首先,可以使用正则表达式来验证身份证号码的基本格式。身份证号码的基本格式为18位数字,其中前17位为顺序码,第18位为校验码(可能是数字或字母X)。

function isValidFormat(id) {
    const regex = /^[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)$/;  
    return regex.test(id);  
}

在上面的代码中,正则表达式的结构如下:

  • ^[1-9]:身份证号的第一个数字不能为0。
  • \d{5}:表示接下来的5位数字。
  • (18|19|20)\d{2}:表示年份,支持1800年到2099年。
  • (0[1-9]|1[0-2]):表示月份。
  • (0[1-9]|[12][0-9]|3[01]):表示日期。
  • \d{3}:表示顺序码。
  • (\d|X)$:表示校验码,可以是数字或者字母X。

二、加权系数与校验码验证

身份证号码的最后一位为校验码,它是根据前17位数字按特定算法计算得出的。我们需要通过加权系数和校验码来验证身份证号码的合法性。

1、加权系数

每一位的加权系数分别为:
[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

2、校验码

校验码与余数的对应关系如下:

  • 余数为0,对应校验码:1
  • 余数为1,对应校验码:0
  • 余数为2,对应校验码:X
  • 余数为3,对应校验码:9
  • 余数为4,对应校验码:8
  • 余数为5,对应校验码:7
  • 余数为6,对应校验码:6
  • 余数为7,对应校验码:5
  • 余数为8,对应校验码:4
  • 余数为9,对应校验码:3
  • 余数为10,对应校验码:2

3、计算校验码

function calculateCheckCode(id) {
    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 += parseInt(id[i]) * weights[i];  
    }  
    const remainder = sum % 11;  
    return checkCodes[remainder];  
}

三、综合验证

最后,我们将格式验证和校验码验证相结合,完成身份证号码的完整验证过程。

function validateIDCard(id) {
    if (!isValidFormat(id)) {  
        return false;  
    }  
    const calculatedCheckCode = calculateCheckCode(id);  
    const actualCheckCode = id[17].toUpperCase();  
    return calculatedCheckCode === actualCheckCode;  
}

// 示例
const idCard = "11010519491231002X";  
console.log(validateIDCard(idCard)); // 输出: true 或 false  

四、总结

通过上述步骤,我们可以有效地验证一个18位的身份证号码。这个过程主要包括两部分:格式验证和校验码验证。在实际应用中,我们可以将这些代码封装成一个函数库,方便在不同项目中进行调用。

这种方法在实际应用中具有很高的准确性和可靠性。希望本文能够对你在JavaScript开发中验证身份证号码有所帮助。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号