一文了解中国大陆身份证号码规则和校验算法以及实例
date
Dec 22, 2022
tags
技术&产品
type
Post
status
Published
Last edited time
Mar 18, 2024 01:59 PM
缘起
工作中会遇到一些生成码的需求, 在上一份工作经历中遇到过生成取货码, 校验二维码的场景. 其实我们的身份证号码也是有对应的算法.
中国大陆身份证
生成规则
地址码(6)+出生日期(8)+顺序码(3)+校验码(1)
总共 18 位. 地址码:
省(2)+市(2)+区(2)
, 例如甘肃天水武山: 620524
, 62 甘肃, 05 天水, 24 武山县, 最后两位又不一样, 一般区是01开始, 县是21开始. 猜测前面预留20位给区, 一般的城市不会超过20个区. 
出生日期: 参考 GB/T 7408—2005 数据元和交换格式 信息交换 日期和时间表示法
顺序号: 同一地区, 同年同月同日出生的人的编号, 奇男偶女
校验码: ISO 7064:1983.MOD 11-2 算法校验
ISO 7064:1983.MOD 11-2 算法
- 前17位乘以分别对应位的系数再求和: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
- 求和之后除以 11 取余, 得到: 0-1-2-3-4-5-6-7-8-9-10, 其中10用 X 代替
- 取余转行: 1-0-X -9-8-7-6-5-4-3-2, 例如 取余为 0, 则校验码为1, 取余 1 , 校验码 0, 取余 2, 校验码 X
实例
身份证: 11010120000101001?, 110101 / 2000 / 01/ 01/ 001/ ?
1*7 + 1*9 + 0*10 + 1*5 + 0*8 + 1*4 + 2*2 + 0*1 + 0*6 + 0*3 + 0* 7 + 1*9 + 0*10+1*5 + 0*8 + 0* 4 + 1 *2
: 45
- 45%11: 1
- 1→0
- 最终身份证为: 110101200001010010
校验
校验时不能只校验校验码, 还要校验 地址码等的取值范围等
参考链接:
中国省市县地区代码一览表: 中国省市县地区代码一览表_ip33.com
中华人民共和国行政区划代码(GB/T 2260-2007): 中华人民共和国行政区划代码(GB/T 2260-2007) - 统计标准 - 广东省卫生健康委员会事务中心 (gdhealth.net.cn)
数据元和交换格式 信息交换 日期和时间表示法: GB-T 7408-2005数据元和交换格式 信息交换 日期和时间表示法.pdf 全文免费 (book118.com)
ISO 7064:1983.MOD 11-2: ISO - ISO 7064:1983 - Data processing — Check character systems