java实现的18位身份证格式验证算法
来源:中文java网站 作者:admin
摘要:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。1、地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。…
公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。1、地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
2、出生日期码表示编码对象出生的年、月、日,按GB/T7408的规定执行。年、月、日代码之间不用分隔符。例:某人出生日期为1966年10月26日,其出生日期码为19661026。
3、顺序码表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数千分配给女性。
4、校验码校验码采用ISO7064:1983,MOD11-2校验码系统。
1)十七位数字本体码加权求和公式 S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和 Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi:7910584216379105842
2)计算模 Y=mod(S,11)
3)通过模得到对应的校验码 :012345678910 验码:10X98765432
下面是java实现的代码
测试代码:使用的单元测试工具是junit