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

Reinvent your career. Join DEV.

It takes one minute and is worth it for your career.

Get started

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.

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay