You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2017/02/05 21:58:38 UTC

svn commit: r1781815 - in /commons/proper/validator/trunk/src: changes/changes.xml main/java/org/apache/commons/validator/routines/CreditCardValidator.java test/java/org/apache/commons/validator/routines/CreditCardValidatorTest.java

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));
+    	}
+    }
 }