From 7f28e86f0ce33531eb6090b51783891ac7a5b943 Mon Sep 17 00:00:00 2001 From: Sualeh Fatehi Date: Sun, 17 Nov 2024 20:32:05 -0500 Subject: [PATCH] Add random card number generator --- .../java/com/example/CardNumberGenerator.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/test/java/com/example/CardNumberGenerator.java diff --git a/src/test/java/com/example/CardNumberGenerator.java b/src/test/java/com/example/CardNumberGenerator.java new file mode 100644 index 0000000..f9c1604 --- /dev/null +++ b/src/test/java/com/example/CardNumberGenerator.java @@ -0,0 +1,57 @@ +/* + * + * Credit Card Number + * https://github.com/sualeh/credit_card_number + * Copyright (c) 2014-2024, Sualeh Fatehi. + * + */ + +package com.example; + +import java.util.Random; + +public class CardNumberGenerator { + + public static int calculateCheckDigit(final String cardNumber) { + int sum = 0; + boolean alternate = true; + + for (int i = cardNumber.length() - 1; i >= 0; i--) { + int n = Integer.parseInt(cardNumber.substring(i, i + 1)); + + if (alternate) { + n *= 2; + if (n > 9) { + n = n % 10 + 1; + } + } + + sum += n; + alternate = !alternate; + } + + return (10 - sum % 10) % 10; + } + + public static String generateRandomCardNumber(final String bin) { + final Random random = new Random(); + final StringBuilder cardNumber = new StringBuilder(bin); + + // Generate the remaining digits except the last one + while (cardNumber.length() < 15) { + cardNumber.append(random.nextInt(10)); + } + + // Calculate the check digit + final int checkDigit = calculateCheckDigit(cardNumber.toString()); + cardNumber.append(checkDigit); + + return cardNumber.toString(); + } + + public static void main(final String[] args) { + final String bin = args[0]; + final String cardNumber = generateRandomCardNumber(bin); + System.out.println("Generated Card Number: " + cardNumber); + } +}