身份证号码升级,你get了吗?
创作时间:
作者:
@小白创作中心
身份证号码升级,你get了吗?
引用
CSDN
等
6
来源
1.
https://blog.csdn.net/zgrkaka/article/details/80341068
2.
https://m.blog.csdn.net/m0_62617719/article/details/143987969
3.
https://cloud.baidu.com/article/3337847
4.
https://m.blog.csdn.net/m0_62617719/article/details/143988352
5.
https://zh.wikipedia.org/wiki/%E9%A6%99%E6%B8%AF%E8%BA%AB%E4%BB%BD%E8%AD%89
6.
https://www.cnblogs.com/tobeeasyman/p/18617393
随着信息技术的快速发展,我国居民身份证号码从15位升级到18位,这一变化不仅提升了个人信息的安全性,也更好地适应了现代化管理的需求。本文将详细介绍这一升级过程的规则,并通过Java代码实现具体的转换逻辑。
01
升级规则与校验码计算
年份扩展规则
15位身份证号码中的年份只有两位,例如95。升级到18位时,需要将其扩展为四位。具体规则是:
- 如果年份大于30(即
30到99),则在前面加19,例如95变为1995。 - 如果年份小于等于30(即
00到30),则在前面加20,例如28变为2028。
校验码计算方法
18位身份证号码的最后一位是校验码,用于验证号码的有效性。校验码的计算方法如下:
- 将前17位数字分别乘以对应的系数:
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2。 - 将乘积相加得到总和。
- 将总和除以11,得到余数。
- 根据余数在映射表中查找对应的校验码。映射表为:
1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2。
例如,对于号码12345619780101001:
- 计算乘积和:
1*7 + 2*9 + 3*10 + ... + 1*2 = 100 - 计算余数:
100 % 11 = 1 - 查找校验码:映射表中第1位是
1,所以校验码是1。
02
Java代码实现
下面是一个完整的Java代码示例,用于将15位身份证号码升级为18位:
public class IdCardConverter {
// 权重因子
private static final int[] COEFFICIENT_ARRAY = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 校验码字符集
private static final String[] IDENTITY_MANTISSA = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
/**
* 将15位身份证号码转换为18位
* @param identity 15位身份证号码
* @return 18位身份证号码
*/
public static String convert15To18BitIdCard(String identity) {
if (!is15BitLegalIdCard(identity)) {
throw new IllegalArgumentException("Invalid 15-bit ID card number");
}
// 提取各个部分
String regionCode = identity.substring(0, 6);
String year = identity.substring(6, 8);
String month = identity.substring(8, 10);
String day = identity.substring(10, 12);
String orderCode = identity.substring(12);
// 将年份扩展为四位
int yearInt = Integer.parseInt(year);
String extendedYear = (yearInt > 30 ? "19" : "20") + year;
// 组合成17位(不含校验码)
String idWithoutCheckCode = regionCode + extendedYear + month + day + orderCode;
// 计算校验码
int checkSum = 0;
for (int i = 0; i < 17; i++) {
checkSum += Character.getNumericValue(idWithoutCheckCode.charAt(i)) * COEFFICIENT_ARRAY[i];
}
int mod = checkSum % 11;
String checkCode = IDENTITY_MANTISSA[mod];
// 组合成18位
return idWithoutCheckCode + checkCode;
}
/**
* 验证是否是合法的15位身份证号码
* @param identity 身份证号码
* @return 是否合法
*/
private static boolean is15BitLegalIdCard(String identity) {
// 简单验证长度和数字组成
if (identity == null || identity.length() != 15) {
return false;
}
for (int i = 0; i < 15; i++) {
if (!Character.isDigit(identity.charAt(i))) {
return false;
}
}
return true;
}
public static void main(String[] args) {
String id15 = "110105491231001";
String id18 = convert15To18BitIdCard(id15);
System.out.println("15位身份证号码:" + id15);
System.out.println("升级后的18位身份证号码:" + id18);
}
}
03
运行示例
以15位身份证号码110105491231001为例,运行上述代码:
15位身份证号码:110105491231001
升级后的18位身份证号码:11010519491231001X
通过这个简单的Java程序,我们可以轻松地将15位身份证号码升级为18位,确保个人信息的准确性和安全性。这一升级过程不仅体现了技术的进步,也反映了国家对个人信息管理的日益重视。
热门推荐
《寻隐者不遇》说的“云深不知处”中的师父在哪里?
探讨百合的最佳种植月份(百合花的生长习惯和不同季节的适应性)
儿童发烧服用美林会损伤肾脏?专家解读布洛芬使用指南
电话明明接通了却听不到对方声音
小孩服用美林后全身出汗怎么办?医生的专业建议来了
宝宝嘴里有溃疡怎么办
瓷砖生产工艺流程详解
抗静电剂是什么,有作用吗?
股市风向标 | 国防军工板块全线爆发,市场情绪回暖
易于照料的耐水耐干盆栽植物有哪些?
发财树怕冷还是怕热?发财树的适宜生长温度是多少?
选对,绿植让家瞬间变高级
二胎产假怎么申请?
“半斤八两”背后的千年智慧:揭秘中药计量的古今密码
卧室床尺寸预留太容易错,内行人:这11处细节,你家做对了没有?
月季花高温下容易有什么病
罗马尼亚vs波黑:谁能逆袭晋级世欧赛?全网热议!
期货做市商的作用是什么?这种作用如何提升市场流动性?
为老人选择住房时,选择几楼最为合适?
从出生到一岁半,小猫咪的6个重要生长和社会化阶段
花生米养胃有讲究!医生提醒:避开这两个大坑,否则可能伤胃
大一新生的蓝桥杯备考指南
项目管理感觉吃力怎么办
重庆五天亲子游攻略分享,带孩子去重庆跟团怎么玩才好呢
四驱工作原理图解!什么是全时四驱?什么是分时四驱?
风险分散:如何通过资产种类和地域分散实现投资风险的降低?
脂肪肝有哪几个等级?脂肪肝有哪些类型?
一市民走错门被拘留,竟是因为这一原因
如何通过学习武术提高自我防御能力?
腰椎间盘突出的定义是什么