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

您所在的位置:网站首页 16位身份证号码还能用吗 身份证15位转18位(直接调用方法即可,简单方便!!!)

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

2023-11-25 06:38| 来源: 网络整理| 查看: 265

背景:

 

将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); }

依赖如下:

cn.hutool hutool-all 5.8.16



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3