package com.xjrsoft.common.utils; import com.xjrsoft.common.exception.MyException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; /** * 身份证号相关处理 * @author dzx * @date 2025/4/1 */ public class CredentialNumberUtil { /** * 根据身份证号获取出生日期 * @param idCardNumber 身份证号 * @return 出生日期 */ public static LocalDate getBirthDate(String idCardNumber){ // 获取出生日期前6位,即yyyyMM String birthdayString = idCardNumber.substring(6, 14); // 将字符串解析为LocalDate对象 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); try { LocalDate parse = LocalDate.parse(birthdayString, formatter); return parse; }catch (Exception e){ throw new MyException("身份证号填写错误,无法提取出生日期"); } } /** * 根据身份证号判断性别 * @param idCard 身份证号码 * @return "男" 或 "女" * @throws IllegalArgumentException 如果身份证号长度不正确 */ public static String getGenderByIdCard(String idCard) { if (idCard == null || (idCard.length() != 15 && idCard.length() != 18)) { throw new IllegalArgumentException("身份证号长度不正确"); } // 15位身份证号:最后一位是性别位 // 18位身份证号:第17位是性别位 char genderChar; if (idCard.length() == 15) { genderChar = idCard.charAt(14); } else { genderChar = idCard.charAt(16); } // 将字符转换为数字 int genderNum = Character.getNumericValue(genderChar); // 奇数男性,偶数女性 return genderNum % 2 == 1 ? "男" : "女"; } }