package com.andreabaccega.formedittextvalidator;
import android.widget.EditText;
/**
* This validator takes care of validating the edittext. The input will be valid only if the number is a valid credit card.
* @author Andrea Baccega <me@andreabaccega.com>
*
*/
public class CreditCardValidator extends Validator{
public CreditCardValidator(String _customErrorMessage) {
super(_customErrorMessage);
}
public boolean isValid(EditText et) {
try {
return validateCardNumber(et.getText().toString());
} catch (Exception e) {
return false;
}
}
/**
* Validates the credit card number using the Luhn algorithm
* @param cardNumber the credit card number
* @return
*/
public static boolean validateCardNumber(String cardNumber) throws NumberFormatException {
int sum = 0, digit, addend = 0;
boolean doubled = false;
for (int i = cardNumber.length () - 1; i >= 0; i--) {
digit = Integer.parseInt (cardNumber.substring (i, i + 1));
if (doubled) {
addend = digit * 2;
if (addend > 9) {
addend -= 9;
}
} else {
addend = digit;
}
sum += addend;
doubled = !doubled;
}
return (sum % 10) == 0;
}
}