这是一个非常经典的身份证号码问题。我将为你详细解释一下升级的规则和原理。
简单来说,一代身份证(15位)升级到二代身份证(18位)主要增加了3个信息:出生年份从2位变4位,以及在末尾增加了一个校验码。
下面我们用一个具体的例子来拆解,假设一代身份证是:
110105880101001
第一步:拆解15位身份证的构成
15位身份证的格式是:6位地址码 + 6位出生日期码 + 3位顺序码
- 110105:地址码(北京朝阳区)
- 880101:出生日期码(88年01月01日)
- 001:顺序码(当天出生的第1个男性)
第二步:升级为18位的具体操作
升级是分两步完成的,增加了3位数字:
1. 在出生年份前补“19” → 增加2位
将2位的年份“88”扩展为4位的“1988”。这是因为大多数15位身份证持有者都出生于1900-1999年间。
- 15位:
110105 88 0101 001
- 变为:
110105 1988 0101 001
现在变成了17位:11010519880101001
2. 在末尾增加1位“校验码”
根据一套国家标准算法(ISO 7064:1983, MOD 11-2),对前17位数字进行计算,生成1位校验码。这位校验码可能是 0-9 或 X(罗马数字10)。
计算过程简述(了解即可):
将前17位数字,每一位乘以一个固定的“加权因子”。加权因子是:
[7, 9, 10, 5, 8, item4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]。
将17个乘积结果相加,得到一个总和
S。
用
S 除以11,得到余数
Y。
根据余数
Y 的值,对照下表得到校验码:
| 余数 Y |
0 |
1 |
2 |
轟 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|---|
| 校验码 |
1 |
0 |
X |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
以我们的例子 11010519880101001 来计算(过程略),最终得到的校验码是 3。
最终结果
将校验码 3 补到17位号码的末尾。
15位: 110105 88 0101 001
18位: 110105 1988 0101 001 3
总结:多出来的三位补在哪里?
| 序号 |
增加的位数 |
补充位置 |
补充内容 |
目的 |
|---|
| 第1、2位 |
2位 |
在出生日期的年份部分 |
在原有2位年份前加“19”(少数00年后办理的可能是“20”) |
解决“千年虫”问题,明确出生世纪。 |
| 第3位 |
1位 |
在整个号码的最末尾 |
根据前17位计算出的校验码(0-9或X) |
增强号码的校验能力,防止输错、伪造。 |
所以,升级后的18位身份证号码结构为:
6位地址码 + 8位出生日期码 + 3位顺序码 + 1位校验码
这个升级极大地提高了身份证号码的准确性和安全性。