工具类分享,IdCardUtil 身份证15-18位互转
package org.springblade.education.util;
public class IdCardUtil {
/**
* 15位的身份证号码转换成18位
*
* @param idCardNo
* @return
*/
public static String from15to18(String idCardNo) {
String finalID = null;// 最终的ID
String century = "19";
if (idCardNo.length() == 18) {
finalID = idCardNo;
} else {
// 对应的17位的各个系数
int[] weight = new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 通过加入世纪码, 变成 17 位的新号码本体.
String tempNo = idCardNo.substring(0, 6) + century
+ idCardNo.substring(6);
// 下面算最后一位校验码
int checkSum = 0;
for (int i = 0; i < weight.length; i++) {
int ai = Integer.parseInt("" + tempNo.charAt(i)); // 位于 i 位置的数值
checkSum = checkSum + ai * weight[i];
}
// 求余数
int checkNum = checkSum % 11;
String lastNumber = null;
switch (checkNum) {
case 0:
lastNumber = "1";
break;
case 1:
lastNumber = "0";
break;
case 2:
lastNumber = "X";
break;
case 3:
lastNumber = "9";
break;
case 4:
lastNumber = "8";
break;
case 5:
lastNumber = "7";
break;
case 6:
lastNumber = "6";
break;
case 7:
lastNumber = "5";
break;
case 8:
lastNumber = "4";
break;
case 9:
lastNumber = "3";
break;
case 10:
lastNumber = "2";
break;
}
finalID = tempNo + lastNumber;
}
return finalID;
}
/**
* 18位的身份证号码转换成15位
*
* @param idCardNo18
* @return
*/
public static String from18to15(String idCardNo18) {
return idCardNo18.substring(0, 6) + idCardNo18.substring(8, 17);
}
}
好了,分享到这里结束了,希望帮助到大家!