lauhin
10/15/2019 - 6:19 PM

Enterprise number validator annotation

Enterprise number validator annotation

Dependency

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

Annotation interface

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 {};
}

Enterprise validator class

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);
    }
}

Usage

@EnterpriseNumber
private String kboNummer;