如何根據身份證號獲取性別及出生日期

獲取方法如下

    public static IdNumberConvert convertIdNumber(String idNumber){
        if (StringUtils.isBlank(idNumber)){
            throw new ServiceException("身份證號不能爲空");
        }
        IdNumberConvert idNumberConvert = new IdNumberConvert();
        idNumberConvert.setIdNumber(idNumber);
        idNumberConvert.setSex(SexEnum.MAN);
        try {
            //身份證上的年份(15位身份證爲1980年前的)
            String year="";
            //身份證上的月份
            String month="";
            //身份證上的日期
            String day="";
            //15位身份證號
            if (idNumber.length() == 15){
                //判斷性別
                if (Integer.parseInt(idNumber.substring(14, 15)) % 2 == 0) {
                    idNumberConvert.setSex(SexEnum.WOMAN);
                }
                year = "19" + idNumber.substring(6, 8);
                month = idNumber.substring(8, 10);
                day= idNumber.substring(10, 12);
                //18位身份證號
            }else if(idNumber.length() == 18){
                if (Integer.parseInt(idNumber.substring(16).substring(0, 1)) % 2 == 0) {
                    idNumberConvert.setSex(SexEnum.WOMAN);
                }
                year = idNumber.substring(6,10);
                month = idNumber.substring(10,12);
                day = idNumber.substring(12, 14);
            }
            idNumberConvert.setBirthDay(LocalDateUtil.parseStringToLocalDate(year + "-" + month + "-" + day));
        } catch (Exception e) {
            throw new ServiceException("身份證號不合法");
        }
        return idNumberConvert;
    }

實體類

@Data
public class IdNumberConvert {

    private String idNumber;

    private SexEnum sex;

    private LocalDate birthDay;

}

性別枚舉

@Getter
public enum SexEnum {
    MAN(0, "男"),
    WOMAN(1, "女");

    private Integer value;
    private String desc;

    SexEnum(final int value, final String desc) {
        this.value = value;
        this.desc = desc;
    }
}

日期格式轉換

    public static LocalDateTime parseStringToDateTime(String time) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        return LocalDateTime.parse(time, df);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章