/****************************************************************************** * This program demonstrates the Luhn Algorithm for credit card validation. * * Copyright © 2021 Richard Lesh. All rights reserved. *****************************************************************************/ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.pureprogrammer.Utils; public class CreditCardValidator { static List GOOD_CASES = Utils.listFromStrings(new String[]{"4321123456789019", "5432123456789020", "65432101234567896"}); static List BAD_CASES = Utils.listFromStrings(new String[]{"4321123456798019", "4432123456789020", "65431201234567896"}); static boolean luhnCheck(String s) { int checksum = 0; final int LENGTH = Utils.cpLength(s); final int DOUBLE_DIGIT = LENGTH % 2; for (int i = 0; i < LENGTH - 1; ++i) { int c = Utils.cpAt(s, i) - "0".codePointAt(0); if (i % 2 == DOUBLE_DIGIT) { c *= 2; if (c > 9) { c -= 9; } } checksum += c; } checksum *= 9; checksum %= 10; return Utils.cpAt(s, LENGTH - 1) - "0".codePointAt(0) == checksum; } public static void main(String[] args) { System.out.println("Good Test Cases"); for (String s : GOOD_CASES) { System.out.println(Utils.join("", s, " is ", luhnCheck(s))); } System.out.println("Bad Test Cases"); for (String s : BAD_CASES) { System.out.println(Utils.join("", s, " is ", luhnCheck(s))); } } }