背景:

将15位身份证号码转换为18位身份证号码的方法是:
在15位身份证号码前加上6位数字,即出生年份的前两位,地区编码的后两位,以及补全的两位数字,例如:19或20(以出生年份为准)+地区编码+补全的两位数字。
将新的17位身份证号码的每一位分别乘以对应的权重,权重为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。
将所得到的17个乘积相加,得到一个总和。
用总和除以11,得到一个余数。余数的取值范围为0到10。
根据余数的值,查找一个对应的校验码。校验码的取值范围为0到10,对应的值分别为:1 0 X 9 8 7 6 5 4 3 2。
将校验码加在新的17位身份证号码的最后一位,即得到18位身份证号码。
举个例子,如果原来的15位身份证号码是420106640901234,转换成18位身份证号码的过程是:
在前面加上6位数字:42(出生年份)+ 01(地区编码)+ 06(补全的两位数字)+ 640901234。
将新的17位身份证号码的每一位分别乘以对应的权重,并相加:4×7 + 2×9 + 0×10 + 1×5 + 0×8 + 6×4 + 6×2 + 4×1 + 0×6 + 1×3 + 2×7 + 3×9 + 4×10 + 0×5 + 1×8 + 2×4 + 3×2 = 182。
用182除以11,得到余数为4。
查找对应的校验码为3。
将校验码3加在新的17位身份证号码的最后一位,即得到18位身份证号码:420106199609012343。

代码如下:

public  String convertIdCard(String idCard) {
if (idCard == null) {
return null;
}
if (idCard.length() != 15) {
return idCard;
}
String idCard17 = idCard.substring(0, 6) + "19" + idCard.substring(6);
int sum = 0;
int[] coefficientArray = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] idCard17Array = idCard17.toCharArray();
for (int i = 0; i < idCard17Array.length; i++) {
sum += (idCard17Array[i] - '0') * coefficientArray[i];
}
int remainder = sum % 11;
String[] checkCodeArray = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
return idCard17 + checkCodeArray[remainder];
}

-------------------------------------------------------------

附加:也可以自动写一个工具类

/**
* 将15位身份证号码转换为18位身份证号码 * * @param idCard 15位身份证号码 * @return 18位身份证号码
*/

 public class IdCardUtil {private static final int[] WEIGHT_FACTOR = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};private static final char[] CHECK_CODE = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};/*** 将15位身份证号码转换为18位身份证号码     *     * @param idCard 15位身份证号码     * @return 18位身份证号码*/public static String convert15To18(String idCard) {if (idCard == null || idCard.length() != 15) {return null;}String idCard17 = idCard.substring(0, 6) + "20" + idCard.substring(6);int sum = 0;for (int i = 0; i < idCard17.length(); i++) {char c = idCard17.charAt(i);int num = Character.getNumericValue(c);sum += num * WEIGHT_FACTOR[i];}int remainder = sum % 11;char checkCode = CHECK_CODE[remainder];return idCard17 + checkCode;}}

最方便的来了!!!

直接调用hutool工具类,里面有个IdcardUtil工具类,一行代码搞定

public static void main(String[] args) {String convert15To18 = IdcardUtil.convert15To18("420106640901234");System.out.println(convert15To18);}

依赖如下:

 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>

身份证15位转18位(直接调用方法即可,简单方便!!!)相关推荐

  1. JAVA 输入身份证号码进行验证正误,15位转18位,并解析出生日、当前年龄、地区代码、性别

    我们的身份证号码包含很多的信息,下面的代码提供了身份证的解析功能,具体看注释吧,已经写全了 import java.text.SimpleDateFormat; import java.util.Da ...

  2. Java 从身份证号码中获取出生日期、性别、年龄(15位和18位)

    项目场景: 提示:这次做项目的时候遇到一个工具,整理出来以后可以直接使用 问题描述:给一个String 类型的 身份证号码,需要从这串数字中获取出生日期.性别.年龄 身份证号码分为 15 位 和18 ...

  3. js 身份证精确校验(支持15位和18位身份证号 )

    js 校验方法 //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function IdentityCode(code){var city={11:&qu ...

  4. javascript 15位和18位身份证的正则表达式及其验证

    1.简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card) (2)preg_match(& ...

  5. 【转载】 身份证号码校验(15位和18位都可以)

    转载自: 开源中国社区    面向对象的15位.18位中国大陆身份证号码解析.验证工具 import java.text.ParseException; import java.text.Simple ...

  6. 新旧身份证合法性验证及相互转换算法(三):Java身份证号码验证及将15位转换18位

    package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 身份证号码验证 * */ pub ...

  7. 身份证校验(//身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证)

    window.checkIdNumber=(function () {var vcity = {11: "北京", 12: "天津", 13: "河北 ...

  8. js中15位及18位身份证号码的校验

    15位身份证结构: 地区代码(6位),年(2位)月(2位)日(2位),顺序码(3位,最后1位偶数代表女,奇数代表男) 18位身份证结构: 地区代码(6位),年(4位)月(2位)日(2位),顺序码(3位 ...

  9. SQLServer2005 身份证函数,含验证和15位转18位

    Author:水如烟 SQLServer2005 身份证函数,含验证和15位转18位 USE   [ LzmTWWorks ] GO /* ***** 对象:  UserDefinedFunction ...

  10. Greenplum函数 - 身份证号15位转18位

    前几天一直有人在问,如何在Greenplum里面实现身份证号15位到18位的转换函数,今天网上搜了一下,看了看大概的逻辑,做了个简单实现,转换逻辑不懂的,请自行百度吧,这里放出函数内容,供大家使用: ...

最新文章

  1. 费马定理中值定理_数论-欧拉函数、欧拉定理
  2. 网络营销外包新策略——B站坚信求新求变才能得以“青春永驻”!
  3. Alexa 调整网站排名统计方式
  4. 离线安装Eclipse的Color theme plugin
  5. LL-verilog 1000HZ分频为1HZ使用三个十位计数器合成
  6. iOS js oc相互调用(JavaScriptCore)
  7. 【朝夕技术专刊】Core3.1WebApi_Filter-Authorize详解
  8. Java List和Array之间的转换
  9. eclipse 自动提示卡断问题
  10. linux 复制文件到另一个目录命令_每天一条Linux命令(21) scp (远程文件复制)
  11. android左右滑动fragment,Android基于ViewPager+Fragment实现左右滑屏效果的方法
  12. python中的函数(全)
  13. 数值分析思考题(钟尔杰版)参考解答——第六章
  14. SpringMVC项目报错500的可能解决方法
  15. 加州大学计算机系统,盘点:美国加州大学系统值得申请的专业
  16. mdk是什么意思_MDK是什么意思
  17. 计算机串口如何应用程序,串口通信调试软件的功能与使用方法 - 全文
  18. Vue中使用Ckplayer播放器
  19. 如何用nginx部署静态网站
  20. HP-EVA4400故障导致的oracle数据库丢失的恢复过程

热门文章

  1. java毕业生设计斗南基地鲜花网上销售管理系统计算机源码+系统+mysql+调试部署+lw
  2. 关于NTKO将代码插入到光标处
  3. json数据转换成excel表格
  4. jsp ztree mysql 例子_ztree前台实例
  5. Linux中木马如何处理
  6. 针对于病毒 RavMon.exe 的 病毒专杀
  7. [ XSS-labs通关宝典 ] xss-labs 通关宝典之 less1 - less5
  8. 勤哲服务器产品图片显示,用勤哲Excel服务器实现图片管理(1) -电脑资料
  9. javaweb代码编译打包上架流程简易说明
  10. iTunes v12.1.1 正式版