如何根据身份证号获取性别及出生日期

获取方法如下

    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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值