DEV Community

Teddy Zugana
Teddy Zugana

Posted on • Edited on

3 1

Java Luhn algorithm Card Number Generator

   import java.util.List;
   import java.util.Stack;
   import java.util.Vector;

   public class RandomCardNumberGenerator {


public static final String[] MASTERCARD_PREFIX_LIST = new String[] { "0626" };


public static final String[] VISA_PREFIX_LIST = new String[] { "4539",
        "4556", "4916", "4532", "4929", "40240071", "4485", "4716", "4" };

public static final String[] MASTERCARD_PREFIX_LIST2 = new String[] { "51",
        "52", "53", "54", "55" };

public static final String[] AMEX_PREFIX_LIST = new String[] { "34", "37" };

public static final String[] DISCOVER_PREFIX_LIST = new String[] { "6011" };

public static final String[] DINERS_PREFIX_LIST = new String[] { "300",
        "301", "302", "303", "36", "38" };

public static final String[] ENROUTE_PREFIX_LIST = new String[] { "2014",
        "2149" };

public static final String[] JCB_PREFIX_LIST = new String[] { "35" };

public static final String[] VOYAGER_PREFIX_LIST = new String[] { "8699" };


static String strrev(String str) {
    if (str == null)
        return "";
    String revstr = "";
    for (int i = str.length() - 1; i >= 0; i--) {
        revstr += str.charAt(i);
    }

    return revstr;
}

static String completed_number(String prefix, int length) 
{

    String ccnumber = prefix;

    while (ccnumber.length() < (length - 1)) {
        ccnumber += new Double(Math.floor(Math.random() * 10)).intValue();
    }

    String reversedCCnumberString = strrev(ccnumber);

    List<Integer> reversedCCnumberList = new Vector<Integer>();
    for (int i = 0; i < reversedCCnumberString.length(); i++) {
        reversedCCnumberList.add(new Integer(String
                .valueOf(reversedCCnumberString.charAt(i))));
    }

    int sum = 0;
    int pos = 0;

    Integer[] reversedCCnumber = reversedCCnumberList
            .toArray(new Integer[reversedCCnumberList.size()]);
    while (pos < length - 1) {

        int odd = reversedCCnumber[pos] * 2;
        if (odd > 9) {
            odd -= 9;
        }

        sum += odd;

        if (pos != (length - 2)) {
            sum += reversedCCnumber[pos + 1];
        }
        pos += 2;
    }

    int checkdigit = new Double(
            ((Math.floor(sum / 10) + 1) * 10 - sum) % 10).intValue();
    ccnumber += checkdigit;

    return ccnumber;

}

public static String[] credit_card_number(String[] prefixList, int length,int howMany) 
{

    Stack<String> result = new Stack<String>();
    for (int i = 0; i < howMany; i++) {
        int randomArrayIndex = (int) Math.floor(Math.random()
                * prefixList.length);
        String ccnumber = prefixList[randomArrayIndex];
        result.push(completed_number(ccnumber, length));
    }

    return result.toArray(new String[result.size()]);
}

public static String[] generateMasterCardNumbers(int howMany) {
    return credit_card_number(MASTERCARD_PREFIX_LIST, 16, howMany);
}

public static String generateMasterCardNumber() {
    return credit_card_number(MASTERCARD_PREFIX_LIST, 16, 1)[0];
}

public static boolean isValidCreditCardNumber(String creditCardNumber) {
    boolean isValid = false;

    try {
        String reversedNumber = new StringBuffer(creditCardNumber)
                .reverse().toString();
        int mod10Count = 0;
        for (int i = 0; i < reversedNumber.length(); i++) {
            int augend = Integer.parseInt(String.valueOf(reversedNumber
                    .charAt(i)));
            if (((i + 1) % 2) == 0) {
                String productString = String.valueOf(augend * 2);
                augend = 0;
                for (int j = 0; j < productString.length(); j++) {
                    augend += Integer.parseInt(String.valueOf(productString
                            .charAt(j)));
                }
            }

            mod10Count += augend;
        }

        if ((mod10Count % 10) == 0) {
            isValid = true;
        }
    } catch (NumberFormatException e) {
    }

    return isValid;
}

private static int sumToSingleDigit(int k)
{
    if (k < 10)
    return k;
    return sumToSingleDigit(k / 10) + (k % 10);
}

 }
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (3)

Collapse
 
rwetqi profile image
Lisandro

Valid credit card generator works by generating standard credit card numbers for you. It generates a set of standard generate credit card, in the format that is used in most credit card transactions. It is a tool that you can use to get rid of identity theft. It is a security system that prevents unauthorized transactions of your credit cards online.

Collapse
 
davidpaine profile image
David Paine

Here is another credit card generator, also check it out
dnschecker.org/credit-card-generat...

Collapse
 
thorstenhirsch profile image
Thorsten Hirsch

Different naming conventions, different bracket styles, some unused code... sorry man, but this looks like copy&pasted trash.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more