<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy =EnterpriseNumberValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EnterpriseNumber {
String message() default "Invalid enterprise number number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class EnterpriseNumberValidator implements ConstraintValidator<EnterpriseNumber, String> {
@Override
public void initialize(EnterpriseNumber constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (failFastCheck(value)) {
String identifier10 = StringUtils.leftPad(value, 10, "0");
if (identifier10.matches("^[0-2][0-9]{9}$")) {
String main = identifier10.substring(0, 8);
int mainInt = Integer.parseInt(main);
String check = identifier10.substring(8, 10);
int checkInt = Integer.parseInt(check);
int ret = 97 - mainInt % 97;
return checkInt == ret;
}
}
return false;
}
private boolean failFastCheck(String enterpriseNr) {
final int size = StringUtils.length(enterpriseNr);
return (size == 9 || size == 10) && StringUtils.isNumeric(enterpriseNr);
}
}
@EnterpriseNumber
private String kboNummer;