// Method for verifying a credit card number: // 1. Starting with the second digit from the right, // double every other digit // 2. Break into digits, and add the digits together // 3. Result must end with 0 (e.g 70) import java.util.*; public class Credit3 { public static final int NUM_TRIALS = 10000; public static void main(String[] args) { int numWorked = 0; int numFailed = 0; while (numWorked < NUM_TRIALS) { String ranCredit = generateRandomCard(10); int sum = luhnSum(ranCredit); if (sum % 10 == 0) { numWorked++; } else { numFailed++; } } System.out.println("Num worked: " + numWorked); System.out.println("Num failed: " + numFailed); double percentWorked; percentWorked = ((double) numWorked) / ((double) (numWorked + numFailed)); percentWorked *= 100.0; System.out.println("% worked: " + percentWorked); } public static int luhnSum(String number) { int sum = 0; // Add up the digits formed by doubling every other digit for (int i=number.length()-2; i>=0; i = i-2) { char c = number.charAt(i); int n = 2 * Character.getNumericValue(c); sum = sum + n/10 + n%10; // Break into two digits and add } // Add the remaining digits for (int i=number.length()-1; i>=0; i = i-2) { char c = number.charAt(i); int n = Character.getNumericValue(c); sum = sum + n; } return sum; } public static String generateRandomCard(int num_digits) { String card = ""; Random r = new Random(); for (int i=0; i