[Autofill] Credit Card validation for rAc.
Validate all things credit card. (Number, CSC, Expiration)
BUG=170467
Review URL: https://chromiumcodereview.appspot.com/12213077
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@181861 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autofill/validation.cc b/chrome/browser/autofill/validation.cc
index ad34b312..a0072111 100644
--- a/chrome/browser/autofill/validation.cc
+++ b/chrome/browser/autofill/validation.cc
@@ -45,4 +45,17 @@
return (sum % 10) == 0;
}
+bool IsValidCreditCardSecurityCode(const string16& text) {
+ if (text.size() < 3U || text.size() > 4U)
+ return false;
+
+ for (string16::const_iterator iter = text.begin();
+ iter != text.end();
+ ++iter) {
+ if (!IsAsciiDigit(*iter))
+ return false;
+ }
+ return true;
+}
+
} // namespace autofill
diff --git a/chrome/browser/autofill/validation.h b/chrome/browser/autofill/validation.h
index f8e923b..93557b7 100644
--- a/chrome/browser/autofill/validation.h
+++ b/chrome/browser/autofill/validation.h
@@ -13,6 +13,9 @@
// Uses the Luhn formula to validate the number.
bool IsValidCreditCardNumber(const string16& text);
+// Returns true if |text| looks like a valid credit card security code.
+bool IsValidCreditCardSecurityCode(const string16& text);
+
} // namespace autofill
#endif // CHROME_BROWSER_AUTOFILL_VALIDATION_H_
diff --git a/chrome/browser/autofill/validation_unittest.cc b/chrome/browser/autofill/validation_unittest.cc
index bb94a0f..6e67b861 100644
--- a/chrome/browser/autofill/validation_unittest.cc
+++ b/chrome/browser/autofill/validation_unittest.cc
@@ -34,7 +34,15 @@
"4111-1111-1111-1110", /* wrong Luhn checksum */
"3056 9309 0259 04aa", /* non-digit characters */
};
-
+const char* const kValidCreditCardSecurityCode[] = {
+ "323", // 3-digit CSC.
+ "3234", // 4-digit CSC.
+};
+const char* const kInvalidCreditCardSecurityCode[] = {
+ "32", // CSC too short.
+ "12345", // CSC too long.
+ "asd", // non-numeric CSC.
+};
} // namespace
TEST(AutofillValidation, IsValidCreditCardNumber) {
@@ -49,3 +57,19 @@
autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i])));
}
}
+
+TEST(AutofillValidation, IsValidCreditCardSecurityCode) {
+ for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) {
+ SCOPED_TRACE(kValidCreditCardSecurityCode[i]);
+ EXPECT_TRUE(
+ autofill::IsValidCreditCardSecurityCode(
+ ASCIIToUTF16(kValidCreditCardSecurityCode[i])));
+ }
+ for (size_t i = 0; i < arraysize(kInvalidCreditCardSecurityCode); ++i) {
+ SCOPED_TRACE(kInvalidCreditCardSecurityCode[i]);
+ EXPECT_FALSE(
+ autofill::IsValidCreditCardSecurityCode(
+ ASCIIToUTF16(kInvalidCreditCardSecurityCode[i])));
+ }
+}
+