Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(755)

Unified Diff: components/autofill/core/browser/credit_card.cc

Issue 2906763005: Add support for Brazil Elo card in autofill. (Closed)
Patch Set: Fix test Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/credit_card.cc
diff --git a/components/autofill/core/browser/credit_card.cc b/components/autofill/core/browser/credit_card.cc
index fdec3b3a46bfd066b7f01bd17e4a7deff6bdbd71..33dc123d3b6a535525539d50f423f11d84295ca4 100644
--- a/components/autofill/core/browser/credit_card.cc
+++ b/components/autofill/core/browser/credit_card.cc
@@ -79,6 +79,8 @@ base::string16 NetworkForFill(const std::string& network) {
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_DINERS);
if (network == kDiscoverCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_DISCOVER);
+ if (network == kEloCard)
+ return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_ELO);
if (network == kJCBCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_JCB);
if (network == kMasterCard)
@@ -146,6 +148,8 @@ int CreditCard::IconResourceId(const std::string& network) {
return IDR_AUTOFILL_CC_DINERS;
if (network == kDiscoverCard)
return IDR_AUTOFILL_CC_DISCOVER;
+ if (network == kEloCard)
+ return IDR_AUTOFILL_CC_ELO;
if (network == kJCBCard)
return IDR_AUTOFILL_CC_JCB;
if (network == kMasterCard)
@@ -166,27 +170,24 @@ int CreditCard::IconResourceId(const std::string& network) {
// static
const char* CreditCard::GetCardNetwork(const base::string16& number) {
// Credit card number specifications taken from:
- // http://en.wikipedia.org/wiki/Credit_card_numbers,
- // http://en.wikipedia.org/wiki/List_of_Issuer_Identification_Numbers,
- // http://www.discovernetwork.com/merchants/images/Merchant_Marketing_PDF.pdf,
+ // https://en.wikipedia.org/wiki/Payment_card_number,
// http://www.regular-expressions.info/creditcard.html,
- // http://developer.ean.com/general_info/Valid_Credit_Card_Types,
- // http://www.bincodes.com/,
- // http://www.fraudpractice.com/FL-binCC.html, and
- // http://www.beachnet.com/~hstiles/cardtype.html
+ // https://developer.ean.com/general-info/valid-card-types,
+ // http://www.bincodes.com/, and
+ // http://www.fraudpractice.com/FL-binCC.html.
+ // (Last updated: May 29, 2017)
//
- // The last site is currently unavailable, but a cached version remains at
- // http://web.archive.org/web/20120923111349/http://www.beachnet.com/~hstiles/cardtype.html
- //
- // Card Type Prefix(es) Length
- // ---------------------------------------------------------------
- // Visa 4 13,16
- // American Express 34,37 15
- // Diners Club 300-305,3095,36,38-39 14
- // Discover Card 6011,644-649,65 16
- // JCB 3528-3589 16
- // Mastercard 51-55 16
- // UnionPay 62 16-19
+ // Card Type Prefix(es) Length
+ // --------------------------------------------------------------------------
+ // Visa 4 13,16,19
+ // American Express 34,37 15
+ // Diners Club 300-305,309,36,38-39 14
+ // Discover Card 6011,644-649,65 16
+ // Elo 431274,451416,5067,5090,627780,636297 16
+ // JCB 3528-3589 16
+ // Mastercard 2221-2720, 51-55 16
+ // MIR 2200-2204 16
+ // UnionPay 62 16-19
// Check for prefixes of length 1.
if (number.empty())
@@ -203,9 +204,6 @@ const char* CreditCard::GetCardNetwork(const base::string16& number) {
if (!base::StringToInt(number.substr(0, 2), &first_two_digits))
return kGenericCard;
- if (first_two_digits == 22)
- return kMirCard;
-
if (first_two_digits == 34 || first_two_digits == 37)
return kAmericanExpressCard;
@@ -231,7 +229,8 @@ const char* CreditCard::GetCardNetwork(const base::string16& number) {
if (!base::StringToInt(number.substr(0, 3), &first_three_digits))
return kGenericCard;
- if (first_three_digits >= 300 && first_three_digits <= 305)
+ if ((first_three_digits >= 300 && first_three_digits <= 305) ||
+ first_three_digits == 309)
return kDinersCard;
if (first_three_digits >= 644 && first_three_digits <= 649)
@@ -245,15 +244,35 @@ const char* CreditCard::GetCardNetwork(const base::string16& number) {
if (!base::StringToInt(number.substr(0, 4), &first_four_digits))
return kGenericCard;
- if (first_four_digits == 3095)
- return kDinersCard;
+ if (first_four_digits >= 2200 && first_four_digits <= 2204)
+ return kMirCard;
+
+ if (first_four_digits >= 2221 && first_four_digits <= 2720)
+ return kMasterCard;
if (first_four_digits >= 3528 && first_four_digits <= 3589)
return kJCBCard;
+ if (first_four_digits == 5067 || first_four_digits == 5090)
+ return kEloCard;
+
if (first_four_digits == 6011)
return kDiscoverCard;
+ // Check for prefixes of length 6.
+ if (number.size() < 6)
+ return kGenericCard;
+
+ int first_six_digits = 0;
+ if (!base::StringToInt(number.substr(0, 6), &first_six_digits))
+ return kGenericCard;
+
+ if (first_six_digits == 431274 ||
+ first_six_digits == 451416 ||
+ first_six_digits == 627780 ||
+ first_six_digits == 636297)
+ return kEloCard;
+
return kGenericCard;
}
@@ -930,12 +949,10 @@ std::ostream& operator<<(std::ostream& os, const CreditCard& credit_card) {
credit_card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR));
}
-// These values must match the values in WebKitPlatformSupportImpl in
-// webkit/glue. We send these strings to WebKit, which then asks
-// WebKitPlatformSupportImpl to load the image data.
const char kAmericanExpressCard[] = "americanExpressCC";
const char kDinersCard[] = "dinersCC";
const char kDiscoverCard[] = "discoverCC";
+const char kEloCard[] = "eloCC";
const char kGenericCard[] = "genericCC";
const char kJCBCard[] = "jcbCC";
const char kMasterCard[] = "masterCardCC";

Powered by Google App Engine
This is Rietveld 408576698