Author: britter Date: Thu Jan 1 16:44:02 2015 New Revision: 1648878 URL: http://svn.apache.org/r1648878 Log: VALIDATOR-346: SedolCheckDigit fails to reject invalid (non-numeric) check digits. Fix implemented by Sebb.
Modified: commons/proper/validator/trunk/src/changes/changes.xml commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigit.java commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigitTest.java Modified: commons/proper/validator/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/changes/changes.xml?rev=1648878&r1=1648877&r2=1648878&view=diff ============================================================================== --- commons/proper/validator/trunk/src/changes/changes.xml (original) +++ commons/proper/validator/trunk/src/changes/changes.xml Thu Jan 1 16:44:02 2015 @@ -43,6 +43,9 @@ The <action> type attribute can be add,u <body> <release version="1.4.1" date="tba" description="1.4 Maintenance release"> + <action issue="VALIDATOR-346" dev="sebb" type="fix" > + SedolCheckDigit fails to reject invalid (non-numeric) check digits + </action> <action issue="VALIDATOR-345" dev="sebb" type="fix" > ISINCheckDigit fails to reject invalid (non-numeric) check digits </action> Modified: commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigit.java URL: http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigit.java?rev=1648878&r1=1648877&r2=1648878&view=diff ============================================================================== --- commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigit.java (original) +++ commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigit.java Thu Jan 1 16:44:02 2015 @@ -97,9 +97,11 @@ public final class SedolCheckDigit exten protected int toInt(char character, int leftPos, int rightPos) throws CheckDigitException { int charValue = Character.getNumericValue(character); - if (charValue < 0 || charValue > 35) { + // the check digit is only allowed to reach 9 + final int charMax = rightPos == 1 ? 9 : 35; + if (charValue < 0 || charValue > charMax) { throw new CheckDigitException("Invalid Character[" + - leftPos + "] = '" + charValue + "'"); + leftPos + "," + rightPos + "] = '" + charValue + "' out of range 0 to " + charMax); } return charValue; } Modified: commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigitTest.java URL: http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigitTest.java?rev=1648878&r1=1648877&r2=1648878&view=diff ============================================================================== --- commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigitTest.java (original) +++ commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/checkdigit/SedolCheckDigitTest.java Thu Jan 1 16:44:02 2015 @@ -49,4 +49,20 @@ public class SedolCheckDigitTest extends invalid = new String[] {"123#567"}; zeroSum = "0000000"; } + + private static String invalidCheckDigits[] = { + "026349E", // proper check digit is '4', see above + "087061C", // proper check digit is '2', see above + "B06LQ9H", // proper check digit is '7', see above + "343757F", // proper check digit is '5', see above + "B07LF5F", // proper check digit is '5', see above + }; + + public void testVALIDATOR_346() { + for (int i = 0; i < invalidCheckDigits.length; i++) { + String invalidCheckDigit = invalidCheckDigits[i]; + assertFalse("Should fail: " + invalidCheckDigit, routine.isValid(invalidCheckDigit)); + } + } + }