实战指南:如何验证18位身份证号码的正确性

作者:4042024.08.28 21:57浏览量:102

简介:本文将介绍如何通过JavaScript编写代码来验证18位身份证号码的有效性,包括出生日期验证、校验码计算等关键步骤,帮助开发者及普通用户轻松识别身份证真伪。

引言

身份证号码是每个中国公民的重要身份标识,通常由18位数字组成,其中包含了个人的出生年月日、顺序码以及一位校验码。在开发涉及用户身份验证的应用时,验证身份证号码的正确性显得尤为重要。本文将详细讲解如何使用JavaScript来验证一个18位身份证号码是否有效。

1. 身份证号码结构概述

身份证号码由以下几部分组成:

  • 前6位:地区代码
  • 中间8位:出生年月日(YYYYMMDD)
  • 接下来3位:顺序码(奇数分配给男性,偶数分配给女性)
  • 最后1位:校验码(通过前17位数字按特定算法计算得出)

2. 校验码计算规则

校验码的计算涉及到加权因子和模11运算,具体步骤如下:

  1. 将前17位数字分别乘以不同的系数(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)。
  2. 将得到的乘积相加。
  3. 用加出来的和除以11,看余数是多少。
  4. 余数只可能有0-10这11个数字。其对应的最后一位身份证的号码就是一个数字。对应关系如下:
    • 0: 1
    • 1: 0
    • 2: X
    • 3: 9
    • 4: 8
    • 5: 7
    • 6: 6
    • 7: 5
    • 8: 4
    • 9: 3
    • 10: 2

3. JavaScript实现

接下来,我们使用JavaScript来编写一个函数,实现上述逻辑:

  1. function validateIDCard18(id) {
  2. if (!/^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(id)) {
  3. return false; // 格式校验
  4. }
  5. var sum = 0;
  6. var weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  7. var checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  8. // 计算加权和
  9. for (var i = 0; i < 17; i++) {
  10. sum += id.substring(i, i + 1) * weights[i];
  11. }
  12. // 计算校验码
  13. var mod = sum % 11;
  14. var lastChar = id.substring(17, 18);
  15. if (checkCodes[mod] !== lastChar) {
  16. return false; // 校验码校验
  17. }
  18. return true;
  19. }
  20. // 测试
  21. console.log(validateIDCard18('11010519491231002X')); // true
  22. console.log(validateIDCard18('123456789012345678')); // false

4. 实际应用

这个函数可以嵌入到网页表单的验证逻辑中,当用户输入身份证号码时,自动调用此函数进行验证,并在界面上给出相应的提示信息。例如,在表单提交时:

```html