身份证转换

身份证转换是指将15位身份证号码转换成18位身份证号码的一种操作。身份证是中国公民证明身份的重要证件,而目前大多数机构需要使用18位身份证号码进行识别和验证。下面将会从多个方面阐述身份证转换的细节和注意事项。

一、转换规则

1、15位身份证号码的规则:

第1-2位为数字表示所在省(直辖市、自治区)的行政区划代码,采用GB/T 2260;
第3-4位为数字表示所在市(地区)的行政区划代码,采用GB/T 2260;
第5-6位为数字表示所在区(县、自治县、县级市)的行政区划代码,采用GB/T 2260;
第7-8位为数字表示出生年份,采用YY表示法;
第9-10位为数字表示出生月份,采用MM表示法;
第11-12位为数字表示出生日,采用DD表示法;
第13-15位为顺序号,其中15位男为单数,女为双数;

2、18位身份证号码的规则:

第1-6位为数字表示所在省(直辖市、自治区)的行政区划代码,采用GB/T 2260;
第7-10位为数字表示所在市(地区)的行政区划代码,采用GB/T 2260;
第11-12位为数字表示所在区(县、自治县、县级市)的行政区划代码,采用GB/T 2260;
第13-14位为数字表示出生年份,采用YY表示法;
第15-16位为数字表示出生月份,采用MM表示法;
第17-18位为数字表示出生日,采用DD表示法;
第19-20位为数字表示所在地出生的顺序号,同时兼顾性别,其中女性的顺序号为奇数,男性的顺序号为偶数,即偶数为男性,奇数为女性;
第18位为校验码,使用ISO 7064:1983.MOD 11-2校验码系统计算出来的码数;

二、转换方法

1、生成校验码:身份证校验码基于ISO 7064:1983.MOD 11-2校验码系统,具体方法为:

将前17位数分别乘以不同的系数,其中第18个系数为2,然后将所得的18个乘积相加,用加和代替校验码位置上的数字,如果相加结果尾数为10,则校验码为X;

2、转换过程:

(1)将15位身份证号码的前6位升级到18位身份证的前6位升级(省/自治区/直辖市代码);
(2)增加第七、八位为“19”(年份升级前两位为19);
(3)将15位身份证的第7-12位补0,对应18位身份证的第9-14位(出生年月日);
(4)增加一位顺序号,男性为奇数,女性为偶数,对应18位身份证的第17位;
(5)生成校验码,对应18位身份证的第18位。

三、代码实现

public static String idCard15To18(String idCard){
String idCard18 = "";
if(idCard.length() != 15){
return null;
}
if(!isDigit(idCard)){
return null;
}
String provinceCode = idCard.substring(0,2);
String cityCode = idCard.substring(2, 4);
String districtCode = idCard.substring(4, 6);
String birthCode = "19" + idCard.substring(6, 12);
String orderCode = getGenderCode(idCard.substring(14, 15));
String verifyCode = getVerifyCode(idCard.substring(0,17));
idCard18 = provinceCode + cityCode + districtCode + birthCode + orderCode + verifyCode;
return idCard18;
}
private static boolean isDigit(String str) {
return str.matches("^[0-9]*$");
}
private static String getGenderCode(String str) {
int genderNum = Integer.parseInt(str);
if (genderNum % 2 == 0) {
return "2";
} else {
return "1";
}
}
private static String getVerifyCode(String id17) {
String[] sigma = new String[]{"1","0","X","9","8","7","6","5","4","3","2"};
String[] coefficient = new String[]{"7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2","1"};
int sum = 0;
for(int i=0;i<17;i++){
sum += Integer.parseInt(id17.substring(i,i+1)) * Integer.parseInt(coefficient[i]);
}
int remainder = sum % 11;
return sigma[remainder];
}

四、注意事项

1、转换后的18位身份证号码需要进行校验,以保证其真实性和有效性;

2、在身份证转换过程中,需要注意年份升级,一般为前两位追加19;

3、由于身份证转换主要是针对15位身份证号码的转换,因此在使用过程中要保证输入的号码长度为15位。

原创文章,作者:ICOCL,如若转载,请注明出处:https://www.506064.com/n/371921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ICOCLICOCL
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相关推荐

  • Python输入身份证判断地区

    在Python中,我们可以通过简单的代码来验证身份证号码的合法性,同时也可以从中提取出身份证所属的地区信息。 一、验证身份证号码的合法性 身份证号码是一个18位的字符串,其中最后一…

    编程 2025-04-27
  • 身份证正则表达式详细阐述

    一、身份证正则表达式 身份证号码是中国公民的唯一身份标识,其格式是18位纯数字或17位数字加1位大写字母X。身份证正则表达式使用正则表达式来描述此格式,以进行身份证号码的合法性校验…

    编程 2025-04-12
  • 身份证15位转18位详解

    一、身份证15位和18位的区别 中国居民身份证号码是由公安机关按照规定的编码规则在全国范围内唯一标识一个公民的身份信息。身份证号码共有18位和15位两种,其中原15位身份证号码中,…

    编程 2025-03-12
  • 身份证15位转18位在线转换

    在中国,身份证号码是一个很重要的身份识别证件,它具有唯一性和不可更改性。在我们的日常生活中有时会遇到需要将15位的身份证号转换为18位的情况。那么该如何完成这个任务呢?本文将从多个…

    编程 2025-02-05
  • python读取身份证号码(python提取身份证信息)

    本文目录一览: 1、用Python校验身份证号码真伪 2、python3.8.3 控制台提示输出身份证号,并输出接入的数据的位数? 3、Python怎么用正则表达式匹配全省身份证号…

    编程 2025-01-16
  • 身份证15位转18位在线转换详解

    一、身份证15位转18位在线转换器 身份证15位转18位在线转换器是一种web应用程序,它可以非常方便地将身份证号码从15位转换为18位。 使用身份证15位转18位在线转换器非常简…

    编程 2025-01-03
  • php验证身份证的验证类,php身份证识别

    本文目录一览: 1、php 身份证 正则 检测是否有效怎么写? 2、PHP正则表达式验证身份证号格式是否正确 3、如何使用PHP实现身份证是否合法的验证 4、PHP 做的后台,如何…

    编程 2024-12-31
  • mysql身份证验证数据库,数据库两种身份验证

    本文目录一览: 1、MySQL数据库两张表,一张是身份证号,另一张是四位号和对应的籍贯信息,根据身份证号前四位查询籍贯信息 2、excel连接MySQL数据库时显示无法使用提供的凭…

    编程 2024-12-26
  • c语言身份证信息提取,c语言身份证号提取生日

    本文目录一览: 1、用C语言求:写一个函数,从给定的身份证号中提取出生年月信息,并按日期格式输出。 2、C语言设计身份证号信息提取器:输入一身份证号后输出此人的出生年、月、日。 3…

    编程 2024-12-24
  • java从身份证过期出生年月,java身份证获取出生日期

    本文目录一览: 1、怎样在JAVA判断出生日期 和 身份证中的出生日期 相等! 2、JAVA编程–录入用户的18位身份证号码,从中提取用户的生日, 3、JAVA写一个程…

    编程 2024-12-22

发表回复

登录后才能评论