org.apache.bval.extras.constraints.checkdigit
Class ModulusValidator<A extends Annotation>

java.lang.Object
  extended by org.apache.bval.extras.constraints.checkdigit.ModulusValidator<A>
Type Parameters:
A -
All Implemented Interfaces:
ConstraintValidator<A,String>
Direct Known Subclasses:
ABANumberValidator, CUSIPValidator, EAN13Validator, ISBN10Validator, LuhnValidator, SedolValidator

abstract class ModulusValidator<A extends Annotation>
extends Object
implements ConstraintValidator<A,String>

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 Summary
ModulusValidator(int modulus)
           
 
Method Summary
 void initialize(A annotation)
          
 boolean isValid(String code, 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ModulusValidator

public ModulusValidator(int modulus)
Method Detail

initialize

public final void initialize(A annotation)

Specified by:
initialize in interface ConstraintValidator<A extends Annotation,String>

isValid

public boolean isValid(String code,
                       ConstraintValidatorContext context)

Specified by:
isValid in interface ConstraintValidator<A extends Annotation,String>

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


Copyright © 2010-2012 Apache Software Foundation. All Rights Reserved.