Class ModulusValidator<A extends Annotation>
- java.lang.Object
-
- org.apache.bval.extras.constraints.checkdigit.ModulusValidator<A>
-
- 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()
andtoChar()
methods.
-
-
Constructor Summary
Constructors Constructor Description ModulusValidator(int modulus)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
initialize(A annotation)
boolean
isValid(CharSequence code, jakarta.validation.ConstraintValidatorContext context)
protected static int
sumDigits(int number)
Add together the individual digits in a number.protected int
toInt(char character, int leftPos, int rightPos)
Convert a character at a specified position to an integer value.protected abstract int
weightedValue(int charValue, int leftPos, int rightPos)
Calculates the weighted value of a character in the code at a specified position.
-
-
-
Method Detail
-
initialize
public final void initialize(A annotation)
- Specified by:
initialize
in interfacejakarta.validation.ConstraintValidator<A extends Annotation,CharSequence>
-
isValid
public boolean isValid(CharSequence code, jakarta.validation.ConstraintValidatorContext context)
- Specified by:
isValid
in interfacejakarta.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 characterleftPos
- The position of the character in the code, counting from left to rightrightPos
- 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 convertleftPos
- The position of the character in the code, counting from left to rightrightPos
- 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
-
-