From 66e19e81f71b08ace4818caa98cc914d122b6a84 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Wed, 29 Sep 2021 09:43:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E8=AF=81=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/annotations/IdCard.java | 41 +++++++++++++++++++ .../validators/IdCardValidator.java | 35 ++++++++++++++++ .../validation/validators/PhoneValidator.java | 8 ++-- .../beans/enums/ValidationCandidate.java | 5 ++- 4 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 flyfish-common/src/main/java/com/flyfish/framework/validation/annotations/IdCard.java create mode 100644 flyfish-common/src/main/java/com/flyfish/framework/validation/validators/IdCardValidator.java diff --git a/flyfish-common/src/main/java/com/flyfish/framework/validation/annotations/IdCard.java b/flyfish-common/src/main/java/com/flyfish/framework/validation/annotations/IdCard.java new file mode 100644 index 0000000..afa551f --- /dev/null +++ b/flyfish-common/src/main/java/com/flyfish/framework/validation/annotations/IdCard.java @@ -0,0 +1,41 @@ +package com.flyfish.framework.validation.annotations; + +import com.flyfish.framework.validation.validators.IdCardValidator; +import com.flyfish.framework.validation.validators.MoneyValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import com.flyfish.framework.validation.annotations.IdCard.List; + +import java.lang.annotation.Documented; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) +@Retention(RUNTIME) +@Documented +@Constraint(validatedBy = {IdCardValidator.class}) +@Repeatable(List.class) +public @interface IdCard { + + String message() default "不是合法的身份证号!"; + + //分组 + Class[] groups() default {}; + + //负载 + Class[] payload() default {}; + + //指定多个时使用 + @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE}) + @Retention(RUNTIME) + @Documented + @interface List { + IdCard[] value(); + } +} diff --git a/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/IdCardValidator.java b/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/IdCardValidator.java new file mode 100644 index 0000000..c6de89e --- /dev/null +++ b/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/IdCardValidator.java @@ -0,0 +1,35 @@ +package com.flyfish.framework.validation.validators; + +import com.flyfish.framework.validation.annotations.IdCard; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Pattern; + +/** + * 身份证验证,使用正则 + * + * @author wangyu + */ +public class IdCardValidator implements ConstraintValidator { + + private static final Pattern PATTERN = Pattern.compile( + "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$" + ); + + /** + * Implements the validation logic. + * The state of {@code value} must not be altered. + *

+ * This method can be accessed concurrently, thread-safety must be ensured + * by the implementation. + * + * @param value object to validate + * @param context context in which the constraint is evaluated + * @return {@code false} if {@code value} does not pass the constraint + */ + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + return null == value || PATTERN.matcher(value).matches(); + } +} diff --git a/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/PhoneValidator.java b/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/PhoneValidator.java index f3d28ea..b2b06bf 100644 --- a/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/PhoneValidator.java +++ b/flyfish-common/src/main/java/com/flyfish/framework/validation/validators/PhoneValidator.java @@ -17,9 +17,9 @@ public class PhoneValidator implements ConstraintValidator { private PhoneType type; - private static final Pattern mobile = Pattern.compile("^1[3,5]\\d{9}||18[6,8,9]\\d{8}$"); + private static final Pattern MOBILE = Pattern.compile("^1[3,5]\\d{9}||18[6,8,9]\\d{8}$"); - private static final Pattern tel = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); + private static final Pattern TEL = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); @Override public void initialize(Phone phone) { @@ -49,10 +49,10 @@ public class PhoneValidator implements ConstraintValidator { } private boolean isMobile(String value) { - return mobile.matcher(value).matches(); + return MOBILE.matcher(value).matches(); } private boolean isTel(String value) { - return tel.matcher(value).matches(); + return TEL.matcher(value).matches(); } } diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java index 51ef576..9333254 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/enums/ValidationCandidate.java @@ -2,6 +2,7 @@ package com.flyfish.framework.beans.enums; import com.flyfish.framework.beans.meta.BeanPropertyType; import com.flyfish.framework.beans.meta.BeanValidation; +import com.flyfish.framework.validation.annotations.IdCard; import com.flyfish.framework.validation.annotations.Phone; import com.flyfish.framework.validation.enums.PhoneType; import lombok.Getter; @@ -67,7 +68,9 @@ public enum ValidationCandidate { CURRENCY((annotation, validation) -> validation.setValidator("currency"), Currency.class), // 手机号 PHONE(((annotation, validation) -> validation.setValidator("phone").prop("type", - annotation.getEnum("type", PhoneType.class).name().toLowerCase())), Phone.class); + annotation.getEnum("type", PhoneType.class).name().toLowerCase())), Phone.class), + // 身份证号 + ID_CARD(((annotation, validation) -> validation.setValidator("idCard")), IdCard.class); private final BiConsumer, BeanValidation> mapper;