当前位置: 首页 > 知识库问答 >
问题:

基于Luhn算法的信用卡检查

伊铭
2023-03-14

我试图用JAVA开发一个应用程序,它将检查用户输入的信用卡号是否有效。

下面是检查模数10的步骤:

步骤1:从右到左每秒数字加倍。如果一个数字的倍增导致一个两位数,则将这两个数字相加得到一个个位数。

步骤4:求和步骤2和步骤3的结果

步骤5:如果步骤4的结果可被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;

}

}

共有1个答案

伍光济
2023-03-14

您在该步骤的实现中出现错误:

步骤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中没有任何空格(这是获取输入的方式)。

 类似资料:
  • 我尝试使用Luhn算法检查信用卡的验证,该算法的工作步骤如下: 2*2=4 4*2=8 1*2=2 4*2=8 现在将步骤1中的所有个位数相加。 4+4+8+2+3+1+7+8=37 简单地说,我的程序总是对我输入的所有内容显示有效。即使它是一个有效的数字并且sumOfOddPlace和sumOfDoubleEvenPlace方法的结果等于零。 不胜感激。

  • Luhn 算法 的实现,用来验证各种识别码,如信用卡号码,IMEI码,国家提供商标识符号码等。 使用 String.split('') ,Array.reverse() 和 Array.map() 结合 parseInt() 得到一个数字数组。 使用 Array.splice(0,1) 获取最后一位数字。 使用 Array.reduce() 来实现 Luhn 算法。 如果 sum 能被 10 整除

  • 我试图创建一个方法来验证信用卡号,但我们必须将其作为字符串处理 1954年,IBM的Hans Luhn提出了一种验证信用卡号码的算法。该算法有助于确定是否正确输入了卡号或扫描仪是否正确扫描了信用卡。几乎所有的信用卡号码都是根据这种有效性检查生成的,通常称为Luhn检查或模数10检查,可以描述如下。为了说明,请考虑卡号4388576018402625。 从右到左每秒数字加倍。如果一个数字的倍增导致一

  • 我一直试图弄清楚这种Luhns的方法来验证信用卡,但我似乎无法弄清楚。我需要使用方法,而不能使用数组,所以我完全被难住了。 null 我的问题是,我仍然在学习方法(完全是初学者。去年我试着学过一次代码,但放弃了,但这次我设法做到了这一点),我不知道如何使用这些方法来完成Luhn检查中的第4步和第5步。 谁能帮我一下吗?谢谢!!

  • 本文向大家介绍PHP实现通过Luhn算法校验信用卡卡号是否有效,包括了PHP实现通过Luhn算法校验信用卡卡号是否有效的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现通过Luhn算法校验信用卡卡号是否有效的方法。分享给大家供大家参考。具体实现方法如下: 运行结果 下面是一个更为简洁的代码: 输出结果如下 希望本文所述对大家的php程序设计有所帮助。

  • 本文向大家介绍Go语言通过Luhn算法验证信用卡卡号是否有效的方法,包括了Go语言通过Luhn算法验证信用卡卡号是否有效的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言通过Luhn算法验证信用卡卡号是否有效的方法。分享给大家供大家参考。具体实现方法如下: 输出结果 希望本文所述对大家的Go语言程序设计有所帮助。