/**
* 身份证号 @IdCard代码如下
*/
@Excel(name = "身份证号", orderNum = "1", width = 50)
@NotNull(message = "身份证号不能为空")
@Length(min = 18, max = 18, message = "身份证号长度有误")
@IdCard(message = "身份证格式不对")
private String idCard;
/**
* 校验身份证号码
* @author zhouyanhaung
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IdCardValidator.class)
@Documented
public @interface IdCard {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
/**
* @author zhouyanhuang
* @date 2021-08-06 14:50
* 实现注解IdCard
*/
public class IdCardValidator implements ConstraintValidator<IdCard, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 校验逻辑...
if (value == null) {
return true;
}
return IdCardUtil.identityCodeValid(value).isSuccess();
}
}
编写身份证校验的工具类
import io.micrometer.common.util.StringUtils;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
/**
* @Author zhouyanhuang:
* @Date 2023/4/24 17:06
* @Version 1.0
*/
public class IdCardUtil {
/**
* 一代身份证
*/
private static final Integer FIRST_GENERATION_ID_CARD = 15;
/**
* 二代身份证
*/
private static final Integer SECOND_GENERATION_ID_CARD = 1