/** * Validates a credit card numer. * @author Apache Ah64 */ public class CreditCardValidator { /** * The credit card numbers. */ private static final String[] CC_CARDS = new String[] { "378282246310005", "371449635398431", "378734493671000", "5610591081018250", "30569309025904", "38520000023237", "6011111111111117", "6011000990139424", "3530111333300000", "3566002020360505", "5555555555554444", "5105105105105100", "4111111111111111", "4012888888881881", "4222222222222", "4417123456789113" }; /** * The main method. * @param args The arguments. */ public static void main(String[] args) { for(int i = 0; i < CC_CARDS.length; i++) { final String number = CC_CARDS[i]; System.out.println("Credit card number: "+number+" is "+(!isValid(number.toCharArray()) ? "in" : "")+"valid"); } } /** * Check for a valid credit card number. * @param number The credit card number. * @return If the credit card number is valid {@code true}. */ private static boolean isValid(char[] numbers) { int sum = 0, len = numbers.length, d, i; final boolean div_two_z = len % 2 == 0; for (i = len - 1; i >= 0; i--) { d = (numbers[i] - '0') * ((div_two_z ? i % 2 == 0 : i % 2 != 0) ? 2 : 1); sum += d > 9 ? d / 10 + d % 10 : d; } return sum % 10 == 0; } }