Author: sebb
Date: Sun Feb  5 21:58:38 2017
New Revision: 1781815

URL: http://svn.apache.org/viewvc?rev=1781815&view=rev
Log:
VALIDATOR-413 Generic CreditCard validation

Modified:
    commons/proper/validator/trunk/src/changes/changes.xml
    
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java
    
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/CreditCardValidatorTest.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=1781815&r1=1781814&r2=1781815&view=diff
==============================================================================
--- commons/proper/validator/trunk/src/changes/changes.xml (original)
+++ commons/proper/validator/trunk/src/changes/changes.xml Sun Feb  5 21:58:38 
2017
@@ -90,6 +90,9 @@ The dependencies for Validator have not
 For the current list of dependencies, please see
 http://commons.apache.org/validator/dependencies.html
   ">
+    <action issue="VALIDATOR-413" type="add" dev="sebb">
+    Generic CreditCard validation
+    </action>
     <action issue="VALIDATOR-379" type="fix" dev="sebb">
     CodeValidator unconditionally trim()s the input string - document the 
behaviour
     </action>

Modified: 
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java
URL: 
http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java?rev=1781815&r1=1781814&r2=1781815&view=diff
==============================================================================
--- 
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java
 (original)
+++ 
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/CreditCardValidator.java
 Sun Feb  5 21:58:38 2017
@@ -57,6 +57,10 @@ public class CreditCardValidator impleme
 
     private static final long serialVersionUID = 5955978921148959496L;
 
+    private static final int MIN_CC_LENGTH = 12; // minimum allowed length
+
+       private static final int MAX_CC_LENGTH = 19; // maximum allowed length
+
     /**
      * Option specifying that no cards are allowed.  This is useful if
      * you want only custom card types to validate so you turn off the
@@ -252,6 +256,36 @@ public class CreditCardValidator impleme
     }
 
     /**
+     * Create a new generic CreditCardValidator which validates the syntax and 
check digit only.
+     * @param minLen minimum allowed length
+     * @param maxLen maximum allowed length
+     * @return the validator
+     * @since 1.5.2
+     */
+    public static CreditCardValidator genericCreditCardValidator(int minLen, 
int maxLen) {
+       return new CreditCardValidator(new CodeValidator[] {new 
CodeValidator("(\\d+)", minLen, maxLen, LuhnCheckDigit.LUHN_CHECK_DIGIT)});
+    }
+
+    /**
+     * Create a new generic CreditCardValidator which validates the syntax and 
check digit only.
+     * @param length exact length
+     * @return the validator
+     * @since 1.5.2
+     */
+    public static CreditCardValidator genericCreditCardValidator(int length) {
+       return genericCreditCardValidator(length, length);
+    }
+
+    /**
+     * Create a new generic CreditCardValidator which validates the syntax and 
check digit only.
+     * @return the validator
+     * @since 1.5.2
+     */
+    public static CreditCardValidator genericCreditCardValidator() {
+       return genericCreditCardValidator(MIN_CC_LENGTH, MAX_CC_LENGTH);
+    }
+
+    /**
      * Checks if the field is a valid credit card number.
      * @param card The card number to validate.
      * @return Whether the card number is valid.

Modified: 
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/CreditCardValidatorTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/CreditCardValidatorTest.java?rev=1781815&r1=1781814&r2=1781815&view=diff
==============================================================================
--- 
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/CreditCardValidatorTest.java
 (original)
+++ 
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/CreditCardValidatorTest.java
 Sun Feb  5 21:58:38 2017
@@ -44,6 +44,34 @@ public class CreditCardValidatorTest ext
     private static final String VALID_VPAY2 = "4370000000000012";
     private static final String ERROR_VPAY = "4370000000000069";
 
+    private static final String [] VALID_CARDS = {
+               VALID_VISA,
+               VALID_SHORT_VISA,
+               VALID_AMEX,
+               VALID_MASTERCARD,
+               VALID_DISCOVER,
+               VALID_DISCOVER65,
+               VALID_DINERS,
+               VALID_VPAY,
+               VALID_VPAY2,
+    };
+
+    private static final String [] ERROR_CARDS = {
+               ERROR_VISA,
+               ERROR_SHORT_VISA,
+               ERROR_AMEX,
+               ERROR_MASTERCARD,
+               ERROR_DISCOVER,
+               ERROR_DISCOVER65,
+               ERROR_DINERS,
+               ERROR_VPAY,
+//             ERROR_VPAY2,
+               "",
+               "12345678901", // too short (11)
+               "12345678901234567890", // too long (20)
+               "4417123456789112", // invalid check digit
+    };
+
     /**
      * Constructor for CreditCardValidatorTest.
      */
@@ -522,4 +550,13 @@ public class CreditCardValidatorTest ext
         assertEquals("Valid-D", "5123456789012346", 
validator.validate("5123456789012346"));
     }
 
+    public void testGeneric() {
+       CreditCardValidator ccv = 
CreditCardValidator.genericCreditCardValidator();
+       for(String s : VALID_CARDS) {
+               assertTrue(s, ccv.isValid(s));
+       }
+       for(String s : ERROR_CARDS) {
+               assertFalse(s, ccv.isValid(s));
+       }
+    }
 }


Reply via email to