protected boolean luhnCheck()

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;
    }