Author: niallp
Date: Tue Nov 13 20:27:04 2007
New Revision: 594756

URL: http://svn.apache.org/viewvc?rev=594756&view=rev
Log:
VALIDATOR-249 Add Diners card validation to CreditCardValidator

Modified:
    
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/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=594756&r1=594755&r2=594756&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
 Tue Nov 13 20:27:04 2007
@@ -77,6 +77,11 @@
      * Option specifying that Discover cards are allowed.
      */
     public static final int DISCOVER = 1 << 3;
+
+    /**
+     * Option specifying that Diners cards are allowed.
+     */
+    public static final int DINERS = 1 << 4;
     
     /**
      * The CreditCardTypes that are allowed to pass validation.
@@ -91,6 +96,9 @@
     /** American Express (Amex) Card Validator */
     public static final CodeValidator AMEX_VALIDATOR = new 
CodeValidator("^(3[47]\\d{13})$", LUHN_VALIDATOR);
 
+    /** Diners Card Validator */
+    public static final CodeValidator DINERS_VALIDATOR = new 
CodeValidator("^(30[0-5]\\d{11}|36\\d{12})$", LUHN_VALIDATOR);
+
     /** Discover Card Validator */
     public static final CodeValidator DISCOVER_VALIDATOR = new 
CodeValidator("^(6011\\d{12})$", LUHN_VALIDATOR);
 
@@ -131,6 +139,10 @@
 
         if (f.isOn(DISCOVER)) {
             this.cardTypes.add(DISCOVER_VALIDATOR);
+        }
+
+        if (f.isOn(DINERS)) {
+            this.cardTypes.add(DINERS_VALIDATOR);
         }
     }
 

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=594756&r1=594755&r2=594756&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
 Tue Nov 13 20:27:04 2007
@@ -164,6 +164,81 @@
     }
 
     /**
+     * Test the Diners Card validator
+     */    
+    public void testDinersValidator() {
+
+        CodeValidator validator = CreditCardValidator.DINERS_VALIDATOR;
+        RegexValidator regex    = validator.getRegexValidator();
+
+        // ****** Test Regular Expression ******
+        // length 14 and start with a "300-305" or "36"
+        assertFalse("Length 12-300",  regex.isValid("300456789012"));
+        assertFalse("Length 12-36",   regex.isValid("363456789012"));
+        assertFalse("Length 13-300",  regex.isValid("3004567890123"));
+        assertFalse("Length 13-36",   regex.isValid("3634567890123"));
+        assertTrue("Length 14-300",   regex.isValid("30045678901234"));
+        assertTrue("Length 14-36",    regex.isValid("36345678901234"));
+        assertFalse("Length 15-300",  regex.isValid("300456789012345"));
+        assertFalse("Length 15-36",   regex.isValid("363456789012345"));
+        assertFalse("Length 16-300",  regex.isValid("3004567890123456"));
+        assertFalse("Length 16-36",   regex.isValid("3634567890123456"));
+        assertFalse("Length 17-300",  regex.isValid("30045678901234567"));
+        assertFalse("Length 17-36",   regex.isValid("36345678901234567"));
+        assertFalse("Length 18-300",  regex.isValid("300456789012345678"));
+        assertFalse("Length 18-36",   regex.isValid("363456789012345678"));
+
+        assertTrue("Prefix 300",      regex.isValid("30045678901234"));
+        assertTrue("Prefix 301",      regex.isValid("30145678901234"));
+        assertTrue("Prefix 302",      regex.isValid("30245678901234"));
+        assertTrue("Prefix 303",      regex.isValid("30345678901234"));
+        assertTrue("Prefix 304",      regex.isValid("30445678901234"));
+        assertTrue("Prefix 305",      regex.isValid("30545678901234"));
+        assertFalse("Prefix 306",     regex.isValid("30645678901234"));
+        assertFalse("Prefix 35",      regex.isValid("35345678901234"));
+        assertTrue("Prefix 36",       regex.isValid("36345678901234"));
+        assertFalse("Prefix 37",      regex.isValid("37345678901234"));
+
+        assertFalse("Invalid Char-A", regex.isValid("3004567x901234"));
+        assertFalse("Invalid Char-B", regex.isValid("3634567x901234"));
+
+        // *********** Test Validator **********
+        assertTrue("Valid regex",     regex.isValid(ERROR_DINERS));
+        assertFalse("Invalid",        validator.isValid(ERROR_DINERS));
+        assertNull("validate()",      validator.validate(ERROR_DINERS));
+        assertEquals(VALID_DINERS,    validator.validate(VALID_DINERS));
+
+        assertFalse("Amex",           validator.isValid(VALID_AMEX));
+        assertTrue("Diners",          validator.isValid(VALID_DINERS));
+        assertFalse("Discover",       validator.isValid(VALID_DISCOVER));
+        assertFalse("Mastercard",     validator.isValid(VALID_MASTERCARD));
+        assertFalse("Visa",           validator.isValid(VALID_VISA));
+        assertFalse("Visa Short",     validator.isValid(VALID_SHORT_VISA));
+        
+        assertTrue("Valid-A",         validator.isValid("30000000000004"));
+        assertTrue("Valid-B",         validator.isValid("30123456789019"));
+        assertTrue("Valid-C",         validator.isValid("36432685260294"));
+
+    }
+
+    /**
+     * Test the Diners Card option
+     */    
+    public void testDinersOption() {
+        CreditCardValidator validator = new 
CreditCardValidator(CreditCardValidator.DINERS);
+        assertFalse("Invalid",        validator.isValid(ERROR_DINERS));
+        assertNull("validate()",      validator.validate(ERROR_DINERS));
+        assertEquals(VALID_DINERS,    validator.validate(VALID_DINERS));
+
+        assertFalse("Amex",           validator.isValid(VALID_AMEX));
+        assertTrue("Diners",          validator.isValid(VALID_DINERS));
+        assertFalse("Discover",       validator.isValid(VALID_DISCOVER));
+        assertFalse("Mastercard",     validator.isValid(VALID_MASTERCARD));
+        assertFalse("Visa",           validator.isValid(VALID_VISA));
+        assertFalse("Visa Short",     validator.isValid(VALID_SHORT_VISA));
+    }
+
+    /**
      * Test the Discover Card validator
      */    
     public void testDiscoverValidator() {


Reply via email to