在数据挖掘中会遇到相同长度数字字串的类型区分问题,个人认为最好的解决方案就是了解各个类型数据的构词方法,从而对不同、甚至相同长度的数据进行解构区分。对于身份证而言,采用第十八位的校验码进行校验计算能够有效的达到区分效果。
1 首先说明一下中国身份证的组成结构。
1.1 第二代身份证(18位)和第一代身份证(15位)的构成
| 身份证构成 | ||
| 18位身份证 | 身份证内容 | 15位身份证 |
| 1-2位 | 省、自治区、直辖市代码 | 1-2位 |
| 3-4位 | 地级市、盟、自治州代码 | 3-4位 |
| 5-6位 | 县、县级市、区代码 | 5-6位 |
| 7-14位 | 出生日期 | 7-12位 |
| 15-17位 | 顺序号 | 13-15位 |
| 18位 | 校验位 | null |
1.2 第二代身份证与第一代身份证变化的几个地方
(1)出生日期
第二代身份证的出生日期由第一代身份证的XX/XX/XX的6位修改成XXXX/XX/XX的8位。
(2)顺序号
由于第二代身份证的出生日期补全到8位,所以顺序号也就由第一代身份证的13-15位顺延到了15-17位。
其中,需要注意的是,无论第一代还是第二代身份证,都是采用顺序号的最后一位(也就是第二代的17位和第一代的15位)标示着该名公民的性别。奇数就是男性,偶数就是女性。
(3)校验位
第二代身份证增加了第一代身份证中缺失的校验位。
2 第二代身份证校验位的计算方法
Step 1:
使用第二代身份证的前十七位计算(Value_i*Weight_i)的累和S。
其中,规定前十七位相应的权值如下表所示:
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| Weight | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
Step 2:
计算模M=MOD(S,11),即对累和S对11取余数。
Step 3:
根据计算的到的模M,对应标准规范的校验位对应表,取出相应的校验码K。
其中,标准规范的校验位对应表如下表所示:
| M | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| K | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
3 举例计算
3.1 求身份证号为440524188001010004K的第十八位校验位K
3.2 计算
计算过程对应下表所示
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| Value_i | 4 | 4 | 0 | 5 | 2 | 4 | 1 | 8 | 8 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 4 |
| Weight_i | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
| Sumi | 28 | 36 | 0 | 25 | 16 | 16 | 2 | 8 | 48 | 0 | 0 | 9 | 0 | 5 | 0 | 0 | 8 |
| Sum | 195 | ||||||||||||||||
4 编码
版权声明:本文为weew_pp原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。