| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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 ? "男" : "女";
- }
- }
|