package ink.wgink.util; import ink.wgink.exceptions.ParamsException; import org.joda.time.DateTime; /** * @ClassName: IdCardUtil * @Description: 身份证工具 * @Author: wanggeng * @Date: 2022/5/20 22:39 * @Version: 1.0 */ public class IdCardUtil { /** * 获得生日 * * @param idCard * @return */ public static String getBirth(String idCard) { if (!RegexUtil.isIdentity(idCard)) { throw new ParamsException("身份证格式错误"); } return idCard.substring(6, 10) + "-" + idCard.substring(10, 12) + "-" + idCard.substring(12, 14); } /** * 获取性别 * * @param idCard * @return */ public static Integer getSexNumber(String idCard) { if (!RegexUtil.isIdentity(idCard)) { throw new ParamsException("身份证格式错误"); } return Integer.parseInt(idCard.substring(16, 17)); } /** * 获取性别 * * @param idCard * @return */ public static String getSexName(String idCard) { int sexNumber = getSexNumber(idCard); if (sexNumber % 2 == 0) { return "女"; } else { return "男"; } } /** * 获得年龄 * * @param idCard * @return */ public static Integer getAge(String idCard) { int birthYear = Integer.parseInt(idCard.substring(6, 10)); int birthMonth = Integer.parseInt(idCard.substring(10, 12)); int birthDay = Integer.parseInt(idCard.substring(12, 14)); DateTime now = DateTime.now(); int year = now.getYear(); int month = now.getMonthOfYear(); int day = now.getDayOfMonth(); int age = year - birthYear; if (month < birthMonth) { return age - 1; } else if (month == birthMonth && day < birthDay) { return age - 1; } return age; } /** * 身份证脱敏 * * @param idCard * @return */ public static String removeSensitive(String idCard) { if (!RegexUtil.isIdentity(idCard)) { throw new ParamsException("身份证格式错误"); } if (idCard.length() == 15) { return idCard.replaceAll("(\\w{6})\\w*(\\w{3})", "$1******$2"); } return idCard.replaceAll("(\\w{6})\\w*(\\w{3})", "$1*********$2"); } }