15位身份证号用法介绍(身份证的编码规则)

身份证号是现代社会中最重要的人口信息识别方式之一。本文将从多个方面对15位身份证号进行详细的阐述。

一、身份证号的基本结构

1、身份证号是由17位数字码和1位校验码组成的。

2、15位身份证号只包含数字,不包含字母和特殊字符。

3、最后一位是校验码,并且只能是数字或者X,主要是用于检验身份证号码的真伪和准确性。

身份证号前6位:表示身份证发放的地区编码
身份证号7~12位:表示出生年月日,例如:910111表示:1991年1月11日出生
身份证号13~15位:表示本人出生的顺序码,是一个为男顺序号奇数,为女顺序号偶数的数字
15位身份证号码不存在校验码

二、身份证号的意义

身份证号是居民个人的唯一识别标志,包含了居民的个人信息和社会属性信息。

1、地区编码:前6位数字代表身份证发放的行政区域,不同的编码代表不同的省份、城市、县区等行政区域。

2、出生年月日:身份证号7~12位表示出生年月日,为年月日顺序组成,具体规则如下:

年份前两位“19”或“20”表示出生所在的世纪
年份后两位表示出生所在世纪的年份
月份是两位数字,不足10的数字前面加“0”
日也是两位数字,不足10的数字前面加“0”

3、顺序码:身份证号13~15位是本人出生的顺序码,是一个为男顺序号奇数,为女顺序号偶数的数字,通常为000-999之间的随机数,用来区分同一地区、同年月日出生的人。

三、身份证号的使用

身份证号常被用于各种场合,如中华人民共和国公民办理公务、落户、报名参加公共考试、办理各种证件、加入社会团体、投票选举等。除了它的唯一性外,身份证号还能反映个人的出生日期、性别、籍贯等信息。

四、身份证号的重要性

身份证号是个人身份认证的重要标志,也是公共信息资源的重要组成部分。通过身份证号可以受获得个人的基本信息,如姓名、性别、出生日期、籍贯、文化程度、婚姻状况、职业等。此外,身份证号还有很多重要的作用,如防止身份冒用、保障人权和社会福利等。

五、如何生成身份证号

在实际应用中,对于需要大量生成身份证号的场合,我们需要结合相关算法来生成虚拟的身份证号。

生成规则:
1.前六位数为取值范围内的随机数,代表了身份证号的所属地;
2.紧接着的八位数为随机产生的日期,范围限定在19300216~20000228(这里做例子范围略有调整),是代表了身份证持有人的出生日期;
3.最后三个数字,这也是一个随机的产生过程,这些数字常设为000,最后一个是校验位。其中,校验位是用来检验身份证号码是否符合规范的,计算公式为
Cn=Mod((C1×W1+C2×W2+C3×W3+C4×W4+C5×W5+C6×W6+C7×W7+C8×W8+C9×W9+C10×W10+C11×W11+C12×W12), 11)
Yn = 验证码对应值,这里不能直接赋值为大于10的数字,所以需要做一下转换,转换关系如下: 0,1,2,3,4,5,6,7,8,9,10 => 1,0,X,9,8,7,6,5,4,3,2

代码示例:

public createID() {
    const code = [];
    const dbo = [
      [3, 7, 9, 10, 5, 8, 4, 2],
      [5, 8, 4, 2, 1, 9, 7, 3, 6, 10, 5, 8, 4, 2]
    ];

    const randomCity = this.changeCity[Math.floor(Math.random() * this.changeCity.length)];
    const randomYear = this.getRandomInt(1940, 1999).toString();
    const randomMonth = this.getRandomFromZero(12).toString().padStart(2, '0');
    const randomDay = this.getRandomFromZero(28).toString().padStart(2, '0');
    const random = this.getRandomInt(0, 999).toString().padStart(3, '0');

    code.push(randomCity, randomYear, randomMonth, randomDay, random);

    let regArr = code.join().toString().split('');
    let total = 0;
    for (let index = 0; index < 17; index++) {
      total += dbo[(index % 2)][regArr[index]];
    }

    const finalCode = (11 - (total % 11)) % 11;
    let checkCode = '';
    switch (finalCode) {
      case 10:
        checkCode = 'X';
        break;
      default:
        checkCode = finalCode.toString();
        break;
    }
    code.push(checkCode);

    return code.join('');
  }

Published by

风君子

独自遨游何稽首 揭天掀地慰生平