猿问

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

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


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


Step1:从右到左每第二个数字加倍。如果一位数加倍得到两位数,则将两位数相加得到一位数。


步骤 2:现在将步骤 1 中的所有个位数相加


Step3:将卡号中从右到左奇数位的所有数字相加


Step4:将第2步和第3步的结果相加


第五步:如果第四步的结果能被10整除,则卡号有效;否则无效。在这种情况下,卡号无效——因为 75 不能被 10 整除。


到目前为止,我的问题是我尝试的每个卡号(使用有效号码)都被告知它无效。我尝试使用调试工具,看起来我的 sum 值总是错误的。我需要帮助找出我在计算中搞砸的地方,或者我是否遗漏了什么。


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;


}


}


米琪卡哇伊
浏览 184回答 1
1回答

拉丁的传说

您在执行该步骤时出错:Step1:从右到左每第二个数字加倍。如果一位数加倍得到两位数,则将两位数相加得到一位数。您从信用卡号的最后(n) 位开始迭代,而您应该从第 (n-1) 位开始。也就是说,改变:for&nbsp;(int&nbsp;i&nbsp;=&nbsp;digits.length&nbsp;-&nbsp;1;&nbsp;i&nbsp;>=&nbsp;0;&nbsp;i&nbsp;-=&nbsp;2)到for&nbsp;(int&nbsp;i&nbsp;=&nbsp;digits.length&nbsp;-&nbsp;2;&nbsp;i&nbsp;>=&nbsp;0;&nbsp;i&nbsp;-=&nbsp;2)另外,请记住,您的FindSum(String cardNo)方法仅适用String于其中没有任何空格的 s(这就是您获取输入的方式)。
随时随地看视频慕课网APP

相关分类

Java
我要回答