All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.bekk.bekkopen.banking.KidnummerValidator Maven / Gradle / Ivy

package no.bekk.bekkopen.banking;

import no.bekk.bekkopen.common.StringNumber;
import no.bekk.bekkopen.common.StringNumberValidator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import static no.bekk.bekkopen.common.Checksums.*;

public class KidnummerValidator extends StringNumberValidator implements ConstraintValidator {

    public static final String ERROR_LENGTH = "A Kidnummer is between 3(+1) and 25 digits";

    private KidnummerValidator() {
        super();
    }

    /**
     * Return true if the provided String is a valid KID-nummmer.
     *
     * @param kidnummer A String containing a Kidnummer
     * @return true or false
     */
    public static boolean isValid(String kidnummer) {
        try {
            KidnummerValidator.getKidnummer(kidnummer);
            return true;
        } catch (IllegalArgumentException e) {
            return false;
        }
    }

    /**
     * Returns an object that represents a Kidnummer.
     *
     * @param kidnummer A String containing a Kidnummer
     * @return A Kidnummer instance
     * @throws IllegalArgumentException thrown if String contains an invalid Kidnummer
     */
    public static Kidnummer getKidnummer(String kidnummer) throws IllegalArgumentException {
        validateSyntax(kidnummer);
        validateChecksum(kidnummer);
        return new Kidnummer(kidnummer);
    }

    static void validateSyntax(String kidnummer) {
        validateAllDigits(kidnummer.replace("-", ""));
        validateLengthInRange(kidnummer, 4, 25);
    }

    private static void validateLengthInRange(String kidnummer, int i, int j) {
        if (kidnummer == null || kidnummer.length() < i || kidnummer.length() > j) {
            throw new IllegalArgumentException(ERROR_LENGTH);
        }
    }

    public static void validateChecksum(String kidnummer) {
        StringNumber k = new Kidnummer(kidnummer);
        int kMod10 = calculateMod10CheckSum(getMod10Weights(k), k);
        if (kMod10 == k.getChecksumDigit()) {
            return;
        }
        String kMod11 = calculateMod11CheckSumAllowDash(getMod11Weights(k), k);
        if ("-".equals(kMod11) || Integer.parseInt(kMod11) == k.getChecksumDigit()) {
            return;
        }
        throw new IllegalArgumentException(ERROR_INVALID_CHECKSUM + kidnummer);
    }

    public void initialize(no.bekk.bekkopen.banking.annotation.Kidnummer constraintAnnotation) {
    }

    public boolean isValid(String kidnummer, ConstraintValidatorContext context) {
        if (kidnummer == null) {
            return true;
        }

        return isValid(kidnummer);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy