理论基础
410001910101123 410001 910101 123 41000119910101123X 410001 19910101 123X
15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码 18位:6位地址码+8位出生年月日(年、月、日分别用4位、2位(不足两位加0)、2位(不足两位加0)数字表示,之间不用分隔符)+3位顺序码+1位校验码
- 地区码: 1、 第一、二位表示省(自治区、直辖市、特别行政区)。 2、 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟)。 3、 第五、六位表示县(市辖区、县级市、旗)。01-18表示市辖区或地区(自治州、盟)辖县级市;21-80表示县(旗);81-99表示省直辖县级市。
- 顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
- 校验码 是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位, 而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。 具体校验的计算方式及步骤如下: 1)对前17位数字本体码加权求和: S = Sum(Ai * Wi), i = 0, … , 16 其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 2)以11对S取模: Y = mod(S, 11) 3)根据模Y 的值得到对应的校验码 Y值 0 1 2 3 4 5 6 7 8 9 10 校验码 1 0 X 9 8 7 6 5 4 3 2 其中X来代替用来罗马数字中的10,即Ⅹ。
public class IdCardUtil {
/**
* 将15位转换为18位
*
* @param idCard 15位身份证号
* @return String 18位身份证号
*/
private static String tran15to18(String idCard) {
if (idCard == null || "".equals(idCard)) {
throw new RuntimeException("身份证不能为空");
}
if (idCard.length() != 15) {
throw new RuntimeException("身份证长度不正确");
}
idCard = idCard.substring(0, 6) + "19" + idCard.substring(6);//加入年份,变成17位
//计算校验位 begin
char[] Ai = idCard.toCharArray();
int[] Wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] verifyCode = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int S = 0;
int Y;
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?