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 2016/04/15 01:24:48 UTC

svn commit: r1739207 - 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: Thu Apr 14 23:24:48 2016
New Revision: 1739207

URL: http://svn.apache.org/viewvc?rev=1739207&view=rev
Log:
VALIDATOR-392 - Mastercard Series 2 BIN ranges (active from October 2016)

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=1739207&r1=1739206&r2=1739207&view=diff
==============================================================================
--- commons/proper/validator/trunk/src/changes/changes.xml (original)
+++ commons/proper/validator/trunk/src/changes/changes.xml Thu Apr 14 23:24:48 2016
@@ -90,6 +90,10 @@ The dependencies for Validator have not
 For the current list of dependencies, please see
 http://commons.apache.org/validator/dependencies.html
   ">
+    <action issue="VALIDATOR-392" type="fix" dev="sebb" due-to="Tim Deboer">
+    Mastercard Series 2 BIN ranges (active from October 2016) added to CreditCardValidator
+    To disable the new ranges, use option MASTERCARD_PRE_OCT2016 or validator MASTERCARD_VALIDATOR_PRE_OCT2016
+    </action>
     <action issue="VALIDATOR-386" type="fix" dev="sebb" due-to="Auke van Leeuwen">
     org.apache.commons.validator.routines.DomainValidator.ArrayType is not public
     </action>
@@ -103,7 +107,7 @@ http://commons.apache.org/validator/depe
     DomainValidator - allow access to internal arrays
     </action>
     <action type="update" dev="sebb">
-    Updated to TLD list Version 2016011900, Last Updated Tue Jan 19 07:07:02 2016 UTC
+    Updated to TLD list Version 2016041301, Last Updated Thu Apr 14 07:07:01 2016 UTC
     </action>
   </release>
   <release version="1.5.0" date="2015-11-24" description="

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=1739207&r1=1739206&r2=1739207&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 Thu Apr 14 23:24:48 2016
@@ -103,6 +103,13 @@ public class CreditCardValidator impleme
      */
     public static final long VPAY = 1 << 5; // CHECKSTYLE IGNORE MagicNumber
 
+    /**
+     * Option specifying that Mastercard cards (pre Oct 2016 only) are allowed.
+     * @deprecated for use until Oct 2016 only
+     */
+    @Deprecated
+    public static final long MASTERCARD_PRE_OCT2016 = 1 << 6; // CHECKSTYLE IGNORE MagicNumber
+
 
     /**
      * The CreditCardTypes that are allowed to pass validation.
@@ -126,8 +133,28 @@ public class CreditCardValidator impleme
     /** Discover Card Validator */
     public static final CodeValidator DISCOVER_VALIDATOR = new CodeValidator(DISCOVER_REGEX, LUHN_VALIDATOR);
 
+    /** Mastercard regular expressions */
+    private static final RegexValidator MASTERCARD_REGEX = new RegexValidator(
+        new String[] {
+            "^(5[1-5]\\d{14})$",  // 51 - 55 (pre Oct 2016)
+            // valid from October 2016
+            "^(2221\\d{12})$",    // 222100 - 222199
+            "^(222[2-9]\\d{12})$",// 222200 - 222999
+            "^(22[3-9]\\d{13})$", // 223000 - 229999
+            "^(2[3-6]\\d{14})$",  // 230000 - 269999
+            "^(27[01]\\d{13})$",  // 270000 - 271999
+            "^(2720\\d{12})$",    // 272000 - 272099
+        });
+
     /** Mastercard Card Validator */
-    public static final CodeValidator MASTERCARD_VALIDATOR = new CodeValidator("^(5[1-5]\\d{14})$", LUHN_VALIDATOR);
+    public static final CodeValidator MASTERCARD_VALIDATOR = new CodeValidator(MASTERCARD_REGEX, LUHN_VALIDATOR);
+
+    /** 
+     * Mastercard Card Validator (pre Oct 2016)
+     * @deprecated for use until Oct 2016 only
+     */
+    @Deprecated
+    public static final CodeValidator MASTERCARD_VALIDATOR_PRE_OCT2016 = new CodeValidator("^(5[1-5]\\d{14})$", LUHN_VALIDATOR);
 
     /** Visa Card Validator */
     public static final CodeValidator VISA_VALIDATOR = new CodeValidator("^(4)(\\d{12}|\\d{15})$", LUHN_VALIDATOR);
@@ -139,6 +166,8 @@ public class CreditCardValidator impleme
 
     /**
      * Create a new CreditCardValidator with default options.
+     * The default options are:
+     * AMEX, VISA, MASTERCARD and DISCOVER
      */
     public CreditCardValidator() {
         this(AMEX + VISA + MASTERCARD + DISCOVER);
@@ -169,6 +198,10 @@ public class CreditCardValidator impleme
             this.cardTypes.add(MASTERCARD_VALIDATOR);
         }
 
+        if (isOn(options, MASTERCARD_PRE_OCT2016)) {
+            this.cardTypes.add(MASTERCARD_VALIDATOR_PRE_OCT2016);
+        }
+
         if (isOn(options, DISCOVER)) {
             this.cardTypes.add(DISCOVER_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=1739207&r1=1739206&r2=1739207&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 Thu Apr 14 23:24:48 2016
@@ -384,6 +384,15 @@ public class CreditCardValidatorTest ext
         assertTrue("Valid-C",         validator.isValid("5301250070000191"));
         assertTrue("Valid-D",         validator.isValid("5123456789012346"));
         assertTrue("Valid-E",         validator.isValid("5555555555554444"));
+        
+        RegexValidator rev = validator.getRegexValidator();
+        final String PAD = "0000000000";
+        assertFalse("222099",rev.isValid("222099"+PAD));
+        for(int i=222100; i <= 272099; i++) {
+            String j = Integer.toString(i)+PAD;
+            assertTrue(j, rev.isValid(j));
+        }
+        assertFalse("272100",rev.isValid("272100"+PAD));
     }
 
     /**