身份证号码升级,你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位,确保个人信息的准确性和安全性。这一升级过程不仅体现了技术的进步,也反映了国家对个人信息管理的日益重视。
热门推荐
6月花生如何进行田间管理?
很火的“量化交易”到底是什么?普通人可以做量化吗?
呵护爱车,从选择合适的车衣开始
哈医学中的中药材研究进展
核桃一天吃多少?长期食用有补脑作用?营养师拆解核桃功效与禁忌!
核桃:早餐新宠,大脑活力“充电宝”
夜探博物馆 越夜越美丽
八字格局五行旺相休囚死
爸爸吃女儿俏皮话怎么说:幽默互动助力父女感情升温
挪威精英长跑运动员的双阈值训练法
头痛治疗与用药指导
超声波换能器在工业领域的应用有哪些?
一条街三家店,上市后的蜜雪冰城能让加盟商赚钱吗?
中国白酒主要香型有哪些?
CAD教程 | 如何使用CAD绘制图纸
做完白内障手术后很多人忽视了五大注意事项
春日穿搭不撞衫!3招配色+叠穿公式让你秒变时髦精
离职原因:如何简洁明了地回答这个问题?
在Excel公式中将单元格引用更改为数据区域名称
新能源网约车怎么样
我国最神奇的河:雨后水会变成赤红色,是唯一没被污染的长江支流
几月去大觉寺玩最合适
中国055型驱逐舰:弥补短板,升级海上作战实力
如何判断狗狗是否怀孕?了解宠物犬怀孕的症状和反应。
元素周期表中特殊元素的化学性质和周期性趋势
Excel绘制有效边界:从基础到进阶的完整指南
献血的好处和坏处 献血后要注意什么
恋爱心理学:情感发展的科学视角
A股上市公司年报预告中有何看点?全A盈利小幅回落
三伏天闷热,这5种碱性水果记得多吃,水分足口感好,生津解暑气