身份证号码升级,你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位,确保个人信息的准确性和安全性。这一升级过程不仅体现了技术的进步,也反映了国家对个人信息管理的日益重视。
热门推荐
《心经》的智慧之光:照亮心灵的每一个角落
如何计算门的尺寸?这种计算有哪些精确和实用的方法?
白内障手术前,要做哪些检查?越早知道越有利!
彩超和B超的区别是什么
四川与河南,谁的经济实力更强?来看各项数据指标对照!
宁波旅游景点全攻略:穿越千年的山海之城
关于VRR通俗解释以及游戏主机上VRR应用前景
关税风暴席卷全球 海外市场巨震 节后首个交易日如何应对?最新解读和机构建议来了!
中蜂和意蜂有什么区别?
葱香四溢,油润筋道——探寻葱油面的美味
宁波宁海小山村里年味足
宁波永寿街:探寻古韵悠长的历史文化宝藏,见证名人风采的璀璨篇章
汛期已至,溺水后该如何自救?| 应急科普
耐力运动后碳水化合物和蛋白质补充指南
汽车的重量怎么看?查看汽车重量的方法和注意事项是什么?
流量卡VS随身WiFi:优缺点详解与实用性评估
打边炉怎么做才好吃?一锅端的鲜香,秘诀全在这里!
安徽的文化遗产:探寻历史的印记
空调系统冷热源的选择原则
如何处理急性颅脑创伤颅内压升高,一文带你了解!
数字化人类:人工智能能否复刻大脑的每个细节?
草莓多久施肥一次最好?注意事项有哪些?
医生再三提醒:长在2个部位的“痣”,与癌症密不可分,及时处理
怎么检查痣是不是恶性
熔断阀值如何理解?这种理解对投资操作有何影响?
老年人如何睡好子午觉
美元近期升值的因素有哪些?这些因素对全球经济有什么影响?
黄沁琳:以情感切入,情绪的实物化实验
美国债务危机:全球经济的潜在威胁
养黑壳虾实用指南:从水质到温度的全方位养殖技巧