Class CUSIPCheckDigit
- All Implemented Interfaces:
Serializable, CheckDigit
CUSIP Numbers are 9 character alphanumeric codes used to identify North American Securities.
Check digit calculation uses the Modulus 10 Double Add Double technique with every second digit being weighted by 2. Alphabetic characters are converted to numbers by their position in the alphabet starting with A being 10. Weighted numbers greater than ten are treated as two separate numbers.
See Wikipedia - CUSIP for more details.
- Since:
- 1.4
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanValidates a modulus check digit for a code.protected inttoInt(char character, int leftPos, int rightPos) Convert a character at a specified position to an integer value.protected intweightedValue(int charValue, int leftPos, int rightPos) Calculates the weighted value of a character in the code at a specified position.Methods inherited from class ModulusCheckDigit
calculate, calculateModulus, getModulus, sumDigits, toCheckDigitModifier and TypeMethodDescriptionCalculates a modulus Check Digit for a code which does not yet have one.protected intcalculateModulus(String code, boolean includesCheckDigit) Calculates the modulus for a code.intGets the modulus value this check digit routine is based on.static intsumDigits(int number) Adds together the individual digits in a number.protected StringtoCheckDigit(int charValue) Converts an integer value to a check digit.
-
Field Details
-
CUSIP_CHECK_DIGIT
Singleton CUSIP Check Digit instance.
-
-
Constructor Details
-
CUSIPCheckDigit
public CUSIPCheckDigit()Constructs a CUSIP Identifier Check Digit routine.
-
-
Method Details
-
isValid
Validates a modulus check digit for a code.The weight is taken from
rightPos, which does not change when a character is prepended, soModulusCheckDigitwould accept an over-length code whose leading character lands on a no-op weight (for example0037833100). The nine-character length is checked here before the check digit test.- Specified by:
isValidin interfaceCheckDigit- Overrides:
isValidin classModulusCheckDigit- Parameters:
code- The code to validate.- Returns:
trueif the check digit is valid, otherwisefalse.
-
toInt
Convert a character at a specified position to an integer value.- Overrides:
toIntin classModulusCheckDigit- Parameters:
character- The character to convert.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 integer value of the character.
- Throws:
CheckDigitException- if the character is not alphanumeric.
-
weightedValue
Calculates the weighted value of a character in the code at a specified position.For CUSIP (from right to left) odd digits are weighted with a factor of one and even digits with a factor of two. Weighted values > 9, have 9 subtracted
- Specified by:
weightedValuein classModulusCheckDigit- 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.
-