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 voidinitialize(A annotation)booleanisValid(CharSequence code, jakarta.validation.ConstraintValidatorContext context)protected static intsumDigits(int number)Add together the individual digits in a number.protected inttoInt(char character, int leftPos, int rightPos)Convert a character at a specified position to an integer value.protected abstract intweightedValue(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:
initializein interfacejakarta.validation.ConstraintValidator<A extends Annotation,CharSequence>
-
isValid
public boolean isValid(CharSequence code, jakarta.validation.ConstraintValidatorContext context)
- Specified by:
isValidin interfacejakarta.validation.ConstraintValidator<A extends Annotation,CharSequence>
-
weightedValue
protected abstract int weightedValue(int charValue, int leftPos, int rightPos) throws ExceptionCalculates 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
-
-