in src/main/java/org/apache/commons/validator/CreditCardValidator.java [229:250]
protected boolean luhnCheck(final String cardNumber) {
// number must be validated as 0..9 numeric first!!
final int digits = cardNumber.length();
final int oddOrEven = digits & 1;
long sum = 0;
for (int count = 0; count < digits; count++) {
int digit = 0;
try {
digit = Integer.parseInt(cardNumber.charAt(count) + "");
} catch (final NumberFormatException e) {
return false;
}
if ((count & 1 ^ oddOrEven) == 0) { // not
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
}
return sum != 0 && sum % 10 == 0;
}