使用带字符串的Luhn算法在Java中进行信用卡验证

时间:2015-10-14 15:07:27

标签: java string luhn

我试图创建一种方法来验证信用卡号,但我们必须将其作为字符串进行处理

以下是关于我的任务的一些信息......

信用卡号码遵循某些模式。信用卡必须在13到16位之间。

1954年,IBM的Hans Luhn提出了一种验证信用卡号码的算法。该算法可用于确定是否正确输入了卡号或扫描仪是否正确扫描了信用卡。几乎所有信用卡号都是在此有效性检查后生成的,通常称为Luhn检查或模数10检查,可以描述如下。例如,请考虑卡号4388576018402625。

从右到左加倍每秒。如果数字加倍会产生2位数字,请将两位数相加得到一位数字。 2 x 2 = 4

2 x 2 = 4

4 x 2 = 8

1 x 2 = 2

6 x 2 = 12(1 + 2 = 3)

5 x 2 = 10(1 + 0 = 1)

8 x 2 = 16(1 + 6 = 7)

4 x 2 = 8

添加步骤1中的所有单个数字4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37

在卡号

中添加从右到左奇数位的所有数字

5 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 37

对步骤2和步骤3 37 + 37 = 74

的结果求和

如果步骤的结果可被10整除,则卡号有效;否则,它无效。例如,号码4388576018402625无效,但号码4388576018410707是有效的Visa卡;号码6011000593748745无效,但号码6011000593748746是一张有效的Discover卡。

这是我到目前为止所拥有的

static void CreditCardValidator() {
    System.out.println("enter a credit card number");
    String temp = options.nextLine();

    if (temp.length() < 13 || temp.length() > 16) {
        System.out.println("Input is invalid");
    }

    // inside loop with char at command do all the math
    int tmpdouble;
    int sum = 0;
    int counter = temp.length() - 1;
    for (int i = temp.length(); i != 0; i--) {
        char tmp = temp.charAt(i);
        //tmp converted to int
        tmpdouble = tmp * 2;

        int firstDigit;
        int secondDigit;
        if (tmpdouble >= 10) {
            firstDigit = i / 10;
            secondDigit = i % 10;
            sum = sum + firstDigit + secondDigit;
        }

        else if(tmpdouble <= 9) {
            sum = sum + tmpdouble;
        }

    HELP HERE{
        // need to have it do the same thing as above but for odd numbers
    }

我从哪里去? ^^

由于

1 个答案:

答案 0 :(得分:1)