Class ModulusValidator<A extends Annotation>

  • Type Parameters:
    A -
    All Implemented Interfaces:
    jakarta.validation.ConstraintValidator<A,​CharSequence>
    Direct Known Subclasses:
    ABANumberValidator, CUSIPValidator, EAN13Validator, ISBN10Validator, LuhnValidator, SedolValidator

    abstract class ModulusValidator<A extends Annotation>
    extends Object
    implements jakarta.validation.ConstraintValidator<A,​CharSequence>
    Abstract Modulus Check digit calculation/validation.

    Provides a base class for building modulus Check Digit routines.

    This implementation only handles numeric codes, such as EAN-13. For alphanumeric codes such as EAN-128 you will need to implement/override the toInt() and toChar() methods.

    • Constructor Detail

      • ModulusValidator

        public ModulusValidator​(int modulus)
    • Method Detail

      • initialize

        public final void initialize​(A annotation)
        Specified by:
        initialize in interface jakarta.validation.ConstraintValidator<A extends Annotation,​CharSequence>
      • isValid

        public boolean isValid​(CharSequence code,
                               jakarta.validation.ConstraintValidatorContext context)
        Specified by:
        isValid in interface jakarta.validation.ConstraintValidator<A extends Annotation,​CharSequence>
      • weightedValue

        protected abstract int weightedValue​(int charValue,
                                             int leftPos,
                                             int rightPos)
                                      throws Exception
        Calculates the weighted value of a character in the code at a specified position.

        Some modulus routines weight the value of a character depending on its position in the code (e.g. ISBN-10), while others use different weighting factors for odd/even positions (e.g. EAN or Luhn). Implement the appropriate mechanism required by overriding this method.

        Parameters:
        charValue - The numeric value of the character
        leftPos - The position of the character in the code, counting from left to right
        rightPos - The position of the character in the code, counting from right to left
        Returns:
        The weighted value of the character
        Throws:
        Exception
      • toInt

        protected int toInt​(char character,
                            int leftPos,
                            int rightPos)
        Convert a character at a specified position to an integer value.

        Note: this implementation only handlers numeric values For non-numeric characters, override this method to provide character-->integer conversion.

        Parameters:
        character - The character to convert
        leftPos - The position of the character in the code, counting from left to right
        rightPos - The positionof the character in the code, counting from right to left
        Returns:
        The integer value of the character
      • sumDigits

        protected static int sumDigits​(int number)
        Add together the individual digits in a number.
        Parameters:
        number - The number whose digits are to be added
        Returns:
        The sum of the digits