一文了解中国大陆身份证号码规则和校验算法以及实例

slug
chinaidrule
date
Dec 22, 2022
tags
技术&产品
summary
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个区.
notion image
出生日期: 参考 GB/T 7408—2005 数据元和交换格式 信息交换 日期和时间表示法
顺序号: 同一地区, 同年同月同日出生的人的编号, 奇男偶女
校验码: ISO 7064:1983.MOD 11-2 算法校验

ISO 7064:1983.MOD 11-2 算法

 
  1. 前17位乘以分别对应位的系数再求和: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
  1. 求和之后除以 11 取余, 得到: 0-1-2-3-4-5-6-7-8-9-10, 其中10用 X 代替
  1. 取余转行: 1-0-X -9-8-7-6-5-4-3-2, 例如 取余为 0, 则校验码为1, 取余 1 , 校验码 0, 取余 2, 校验码 X

实例

身份证: 11010120000101001?, 110101 / 2000 / 01/ 01/ 001/ ?
  1. 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
  1. 45%11: 1
  1. 1→0
  1. 最终身份证为: 110101200001010010

校验

校验时不能只校验校验码, 还要校验 地址码等的取值范围等

参考链接:
中国省市县地区代码一览表: 中国省市县地区代码一览表_ip33.com

© JimYan 2023 - 2024