身份证号码升级,你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位,确保个人信息的准确性和安全性。这一升级过程不仅体现了技术的进步,也反映了国家对个人信息管理的日益重视。
热门推荐
生活与哲学解读
编程中的d代表什么
如何提高游戏电脑性能?
怎样查看股票涨停情况?查看涨停情况对投资决策有何帮助?
一位北大才女的江湖梦
从心理学角度看ENFJ人格类型:特征、优势与挑战
校外兼职有哪些
从宇宙一级到七级文明:我们是否只是高级文明的产物?
医药十年创新积淀,如何在全球“大考”中抓住机遇?
4年2.93亿美金!5年2.96亿美金!雷霆别无选择,夺冠窗口仅有两年
每天学一个金融知识:【挤出效应】
衣服买什么材质的比较好
挤出效应是什么?深入剖析挤出效应概念与影响
火箭急需稳定得分手,1号位狐狸、2号位欧文或3号位杜兰特均可考虑
猫咪八种睡觉姿势大揭秘:哪种睡姿最能体现与主人的关系?
六首绝美的枫叶诗词:层林尽染万山红,枫影斑驳醉晚秋
香港经典恐怖电影-《三更之回家》
刘备全盛时期的蜀汉版图探秘
如何查找动漫数据库
如何避免股东离婚对公司的不利影响?
深挖 | 王天一:如何从“中国象棋第一人”沦为阶下囚
墨脱,我愿称之为绿色系壁纸的神!
《迎风的青春》:两代人的青春故事,“群像牌”还好打吗?
YOLO算法详解:从基础原理到YOLOv4的改进
保险:风险转移的重要工具及其未来发展
5本主角很强大的小说,武力和智商无可匹敌,很爽快的阅读体验
十二生肖:从历史到诗词,从文化到生活
NBA替补席:角色与战术调度的关键因素
16部必看日本动画电影推荐
《九重紫》:窦昭宋墨双重生,命运安排强强联手