diff --git a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java
index 621569a..15be79c 100644
--- a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java
+++ b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CardSelector.java
@@ -9,6 +9,7 @@ public class CardSelector {
public static final CardSelector MASTER = new CardSelector(R.drawable.card_color_round_rect_pink, R.drawable.chip_yellow, R.drawable.chip_yellow_inner, android.R.color.transparent, R.drawable.ic_billing_mastercard_logo, CardSelector.CVV_LENGHT_DEFAULT);
public static final CardSelector AMEX = new CardSelector(R.drawable.card_color_round_rect_green, android.R.color.transparent, android.R.color.transparent, R.drawable.img_amex_center_face, R.drawable.ic_billing_amex_logo1, CardSelector.CVV_LENGHT_AMEX);
public static final CardSelector DISCOVER = new CardSelector(R.drawable.card_color_round_rect_brown, android.R.color.transparent, android.R.color.transparent, android.R.color.transparent, R.drawable.ic_billing_discover_logo, CardSelector.CVV_LENGHT_DEFAULT);
+ public static final CardSelector DINERS = new CardSelector(R.drawable.card_color_round_rect_grey, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, R.drawable.ic_billing_diners_logo, CardSelector.CVV_LENGHT_DEFAULT);
public static final CardSelector DEFAULT = new CardSelector(R.drawable.card_color_round_rect_default, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, android.R.color.transparent, CardSelector.CVV_LENGHT_DEFAULT);
public static final int CVV_LENGHT_DEFAULT = 3;
@@ -89,6 +90,10 @@ public static CardSelector selectCardType(CreditCardUtils.CardType cardType) {
return MASTER;
case VISA_CARD:
return VISA;
+ case DINERS_14_CARD:
+ return DINERS;
+ case DINERS_16_CARD:
+ return DINERS;
default:
return DEFAULT;
}
@@ -100,7 +105,8 @@ public static CardSelector selectCard(String cardNumber) {
CardSelector selector = selectCardType(cardType);
if ((selector != DEFAULT) && (cardNumber.length() >= 3)) {
- int[] drawables = {R.drawable.card_color_round_rect_brown, R.drawable.card_color_round_rect_green, R.drawable.card_color_round_rect_pink, R.drawable.card_color_round_rect_purple, R.drawable.card_color_round_rect_blue};
+ int[] drawables = {R.drawable.card_color_round_rect_brown, R.drawable.card_color_round_rect_green, R.drawable.card_color_round_rect_pink,
+ R.drawable.card_color_round_rect_purple, R.drawable.card_color_round_rect_blue, R.drawable.card_color_round_rect_grey};
int hash = cardNumber.substring(0, 3).hashCode();
if (hash < 0) {
diff --git a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java
index 030d991..f5ad430 100755
--- a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java
+++ b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/CreditCardUtils.java
@@ -10,19 +10,24 @@
*/
public class CreditCardUtils {
public enum CardType {
- UNKNOWN_CARD, AMEX_CARD, MASTER_CARD, VISA_CARD, DISCOVER_CARD
+ UNKNOWN_CARD, AMEX_CARD, MASTER_CARD, VISA_CARD, DISCOVER_CARD, DINERS_14_CARD, DINERS_16_CARD
}
private static final String PATTERN_AMEX = "^3(4|7)[0-9 ]*";
private static final String PATTERN_VISA = "^4[0-9 ]*";
- private static final String PATTERN_MASTER = "^5[0-9 ]*";
+ private static final String PATTERN_MASTER = "^[52][0-9]*$";
private static final String PATTERN_DISCOVER = "^6[0-9 ]*";
+ private static final String PATTERN_DINERS_14 = "^3(0[0-5]|[6])[0-9]*$";
+ private static final String PATTERN_DINERS_16 = "^3[89][0-9]*$";
- public static final int MAX_LENGTH_CARD_NUMBER = 16;
- public static final int MAX_LENGTH_CARD_NUMBER_AMEX = 15;
+ private static final int MAX_LENGTH_CARD_NUMBER = 16;
+ private static final int MAX_LENGTH_CARD_NUMBER_AMEX = 15;
+ private static final int MAX_LENGTH_CARD_NUMBER_DINERS_14 = 14;
- public static final String CARD_NUMBER_FORMAT = "XXXX XXXX XXXX XXXX";
- public static final String CARD_NUMBER_FORMAT_AMEX = "XXXX XXXXXX XXXXX";
+ private static final String CARD_NUMBER_FORMAT = "XXXX XXXX XXXX XXXX";
+ private static final String CARD_NUMBER_FORMAT_AMEX = "XXXX XXXXXX XXXXX";
+ private static final String CARD_NUMBER_FORMAT_DINERS_14 = "XXXXX XXXX XXXXX";
+ private static final String CARD_NUMBER_FORMAT_DINERS_16 = "XXXXX XXXX XXXXXXX";
public static final String EXTRA_CARD_NUMBER = "card_number";
public static final String EXTRA_CARD_CVV = "card_cvv";
@@ -42,7 +47,6 @@ public enum CardType {
public static final char CHAR_X = 'X';
public static String handleCardNumber(String inputCardNumber) {
-
return handleCardNumber(inputCardNumber,SPACE_SEPERATOR);
}
@@ -56,6 +60,12 @@ public static CardType selectCardType(String cardNumber) {
pCardType = Pattern.compile(PATTERN_AMEX);
if(pCardType.matcher(cardNumber).matches())
return CardType.AMEX_CARD;
+ pCardType = Pattern.compile(PATTERN_DINERS_14);
+ if(pCardType.matcher(cardNumber).matches())
+ return CardType.DINERS_14_CARD;
+ pCardType = Pattern.compile(PATTERN_DINERS_16);
+ if(pCardType.matcher(cardNumber).matches())
+ return CardType.DINERS_16_CARD;
pCardType = Pattern.compile(PATTERN_DISCOVER);
if(pCardType.matcher(cardNumber).matches())
return CardType.DISCOVER_CARD;
@@ -63,13 +73,33 @@ public static CardType selectCardType(String cardNumber) {
}
public static int selectCardLength(CardType cardType) {
- return cardType == CardType.AMEX_CARD ? MAX_LENGTH_CARD_NUMBER_AMEX : MAX_LENGTH_CARD_NUMBER;
+ switch (cardType) {
+ case AMEX_CARD:
+ return MAX_LENGTH_CARD_NUMBER_AMEX;
+ case DINERS_14_CARD:
+ return MAX_LENGTH_CARD_NUMBER_DINERS_14;
+ default:
+ return MAX_LENGTH_CARD_NUMBER;
+ }
+ }
+
+ public static String getCardFormat(CardType cardType) {
+ switch (cardType) {
+ case AMEX_CARD:
+ return CARD_NUMBER_FORMAT_AMEX;
+ case DINERS_14_CARD:
+ return CARD_NUMBER_FORMAT_DINERS_14;
+ case DINERS_16_CARD:
+ return CARD_NUMBER_FORMAT_DINERS_16;
+ default:
+ return CARD_NUMBER_FORMAT;
+ }
}
public static String handleCardNumber(String inputCardNumber, String seperator) {
String unformattedText = inputCardNumber.replace(seperator, "");
CardType cardType = selectCardType(inputCardNumber);
- String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT;
+ String format = getCardFormat(cardType);
StringBuilder sbFormattedNumber = new StringBuilder();
for(int iIdx = 0, jIdx = 0; (iIdx < format.length()) && (unformattedText.length() > jIdx); iIdx++) {
if(format.charAt(iIdx) == CHAR_X)
@@ -84,7 +114,7 @@ public static String handleCardNumber(String inputCardNumber, String seperator)
public static String formatCardNumber(String inputCardNumber, String seperator) {
String unformattedText = inputCardNumber.replace(seperator, "");
CardType cardType = selectCardType(inputCardNumber);
- String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT;
+ String format = getCardFormat(cardType);
StringBuilder sbFormattedNumber = new StringBuilder();
for(int iIdx = 0, jIdx = 0; iIdx < format.length(); iIdx++) {
if((format.charAt(iIdx) == CHAR_X) && (unformattedText.length() > jIdx))
diff --git a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java
index a70e9d7..a9c1121 100644
--- a/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java
+++ b/creditcarddesign/src/main/java/com/cooltechworks/creditcarddesign/pager/CardNumberFragment.java
@@ -10,8 +10,6 @@
import com.cooltechworks.creditcarddesign.CreditCardUtils;
import com.cooltechworks.creditcarddesign.R;
-import static com.cooltechworks.creditcarddesign.CreditCardUtils.CARD_NUMBER_FORMAT;
-import static com.cooltechworks.creditcarddesign.CreditCardUtils.CARD_NUMBER_FORMAT_AMEX;
import static com.cooltechworks.creditcarddesign.CreditCardUtils.EXTRA_CARD_NUMBER;
/**
@@ -57,7 +55,7 @@ public void afterTextChanged(Editable s) {
mCardNumberView.setText(cardNumber);
String rawCardNumber = cardNumber.replace(CreditCardUtils.SPACE_SEPERATOR, "");
CreditCardUtils.CardType cardType = CreditCardUtils.selectCardType(rawCardNumber);
- int maxLengthWithSpaces = ((cardType == CreditCardUtils.CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT).length();
+ int maxLengthWithSpaces = CreditCardUtils.getCardFormat(cardType).length();
mCardNumberView.setSelection(cardNumber.length() > maxLengthWithSpaces ? maxLengthWithSpaces : cardNumber.length());
mCardNumberView.addTextChangedListener(this);
diff --git a/creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml b/creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml
new file mode 100644
index 0000000..1a3a9c3
--- /dev/null
+++ b/creditcarddesign/src/main/res/drawable/card_color_round_rect_grey.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/creditcarddesign/src/main/res/drawable/ic_billing_diners_logo.png b/creditcarddesign/src/main/res/drawable/ic_billing_diners_logo.png
new file mode 100644
index 0000000..f84baf5
Binary files /dev/null and b/creditcarddesign/src/main/res/drawable/ic_billing_diners_logo.png differ
diff --git a/creditcarddesign/src/main/res/values/colors.xml b/creditcarddesign/src/main/res/values/colors.xml
index b3da404..ea0b83b 100644
--- a/creditcarddesign/src/main/res/values/colors.xml
+++ b/creditcarddesign/src/main/res/values/colors.xml
@@ -25,7 +25,8 @@
#800000
#A52A2A
-
+ #D4D4D4
+ #D4CCD4
\ No newline at end of file