身份证号编码规则及校验

https://www.jianshu.com/p/ead5b08e9839

前言

根据最新修订的《中华人民共和国居民身份证法》第二十三条规定,依照《中华人民共和国居民身份证条例》领取的居民身份证,自2013年1月1日起停止使用。即一代身份证已于2013年1月1日起停止使用,本文内容适用于二代身份证,如无特殊说明,本文中所说的身份证皆指二代身份证。

笔者目前使用的jdk版本是1.6.0_29,Eclipse版本是Juno Release,Build id 20120614-1722。如无特殊说明,本文所有的Java代码都是基于此。

本文包含大量数学公式和Java代码,手机端浏览体验较差,可在手机端浏览文字性内容,数学公式和Java代码在PC端浏览,同时建议准备好纸、笔用于数学公式的演算。具有一定数学基础的读者也可以忽略此条建议。

本文中提供的Java代码都是笔者逐行编写、反复斟酌,以求能够抛砖引玉,使初学者可以孜孜不倦,在Java的学习道路上更进一层楼。本文内容,不足之处,欢迎大家批评指正。

修订记录

版本号修订日期修订说明
V0.12018/08/13初稿
V1.02018/09/02发布

参考资料

  1. 中华人民共和国居民身份证法
  2. 中华人民共和国国家标准 GB/T 2260-2007 中华人民共和国行政区划代码
  3. 中华人民共和国国家标准 GB 11643-1999 公民身份证号码
  4. 中华人民共和国国家标准 GB/T 17710-1999 数据处理 校验码系统
  5. 中华人民共和国国家标准 GB/T 17710-2008 信息技术 安全技术 校验字符系统
  6. ISO 7064:1983 Data processing - Check character systems
  7. ISO/IEC 7064:2003 Information technology - Security techniques - Check character systems

身份证号码的编码规则

身份证号码共18位,由17位本体码和1位校验码组成。

  1. 前6位是地址码,表示登记户口时所在地的行政区划代码,依照《中华人民共和国行政区划代码》国家标准(GB/T2260)的规定执行;
  2. 7到14位是出生年月日,采用YYYYMMDD格式;
  3. 15到17位是顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性,即第17位奇数表示男性,偶数表示女性;
  4. 第18位是校验码,采用ISO 7064:1983, MOD 11-2校验字符系统,计算规则下一章节说明。

一代身份证与二代身份证的区别在于:

  1. 一代身份证是15位,二代身份证是18位;
  2. 一代身份证出生年月日采用YYMMDD格式,二代身份证出生年月日采用YYYYMMDD格式;
  3. 一代身份证无校验码,二代身份证有校验码。

校验过程:

D = D_nD_n_-_1...D_2D_1, ( n = 18)

T_m = \sum_{i =1}^{m} = D_i * 2^i ;

S_m = T_n - T_m;

1 = S_nmod(11)=(S_n_-_1+D_1)mod(11)

D_1 = (1-S_n_-_1)mod(11)

\begin{pmatrix} 0&1&2& 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & \\ 1 & 0 & x & 9 & 8 & 7 & 6 & 5 & 4& 3 & 2 & \end{pmatrix}

 其中x表示罗马数字10

基本字符

I

V

X

L

C

D

M

相应的阿拉伯数字表示为

1

5

10

50

100

500

1000

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值