使用Luhn算法进行信用卡检查

时间:2018-10-05 18:39:30

标签: java

我正在尝试用JAVA制作一个应用程序,以检查用户输入的信用卡号是否有效。

这些是模数10的检查步骤:

步骤1:从右到左每隔两位数加倍。如果将两位数加倍得到两位数,则将两位数相加得到一位数。

第2步:现在添加第1步中的所有一位数字

步骤3:在卡号的从右到左的奇数位添加所有数字

第4步:对第2步和第3步的结果求和

步骤5:如果步骤4的结果可被10整除,则卡号有效;否则,卡号无效。否则无效。在这种情况下,卡号无效–因为75不能被10整除。

到目前为止,我的问题是,我尝试使用的每个卡号(使用有效号码)都被告知无效。我尝试使用调试工具,看来我的求和值始终是错误的。我需要帮助弄清楚我在计算中弄错了什么地方,或者如果我错过了什么。

public class CreditCardChecker {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter credit card number to check validity: ");
    System.out.println();
    String cardNo = sc.next();
    int sum = FindSum(cardNo);

    if ((sum % 10) == 0) {
        System.out.println("The card number is VALID.");
    } else {
        System.out.println("The card number is INVALID");
    }

}

public static int FindSum(String cardNo) {

    //CONVERTING CARD NUMBER INTO AN ARRAY
    int[] digits = new int[cardNo.length()];
    for (int i = 0; i < cardNo.length(); i++) {
        digits[i] = Character.getNumericValue(cardNo.charAt(i));
    }

    //DOUBLE EVERY OTHER NUMBER FROM RIGHT TO LEFT
    for (int i = digits.length - 1; i >= 0; i -= 2) {

        digits[i] += digits[i];

        if (digits[i] > 9) {
            digits[i] = digits[i] - 9;
        }
    }
    int sum = 0;
    for (int i = 0; i < digits.length; i++) {
        sum += digits[i];
    }

    sum *= 9;
    return sum;

}

}

1 个答案:

答案 0 :(得分:1)

在执行该步骤时出现错误:

  

步骤1:从右到左每隔两位数加倍。如果将两位数加倍得到两位数,则将两位数相加得到一位数。

您从信用卡号的最后(n)位开始迭代,而您应从第(n-1)位开始。也就是说,更改:

for (int i = digits.length - 1; i >= 0; i -= 2)

for (int i = digits.length - 2; i >= 0; i -= 2)

此外,请记住,您的FindSum(String cardNo)方法仅适用于String,而其中没有任何空格(您可以通过这种方式获得输入)。