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

使用Luhn算法检查信用卡有效性

孙昂然
2023-03-14

我尝试使用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方法的结果等于零。
不胜感激。

import java.util.Scanner;
public class CreditCardValidation {
      public static void main(String[] args) {
     Scanner in = new Scanner(System.in);
        int count = 0;
        long array[] = new long [16];
       do
       {
        count = 0;
       array = new long [16];
        System.out.print("Enter your Credit Card Number : ");
        long number = in.nextLong();
        for (int i = 0; number != 0; i++) {
        array[i] = number % 10;
        number = number / 10;
        count++;
        }
       }
        while(count < 13); 
        if ((array[count - 1] == 4) || (array[count - 1] == 5) || (array[count - 1] == 3 && array[count - 2] == 7)){
            if (isValid(array) == true) {
                System.out.println("\n The Credit Card Number is Valid. ");
        } else {
            System.out.println("\n The Credit Card Number is Invalid. ");
        }
        } else{
          System.out.println("\n The Credit Card Number is Invalid. ");
        }
    }

    public static boolean isValid(long[] array) {
        int total = sumOfDoubleEvenPlace(array) + sumOfOddPlace(array);        
        if ((total % 10 == 0)) {
         for (int i=0; i< array.length; i++){
            System.out.println(array[i]);}
            return true;
        } else {
          for (int i=0; i< array.length; i++){
            System.out.println(array[i]);}
            return false;
        }
    }

    public static int getDigit(int number) {
        if (number <= 9) {
            return number;
        } else {
            int firstDigit = number % 10;
            int secondDigit = (int) (number / 10);
            return firstDigit + secondDigit;
        }
    }

    public static int sumOfOddPlace(long[] array) {
        int result = 0;
        for (int i=0; i< array.length; i++)
        {
        while (array[i] > 0) {
            result += (int) (array[i] % 10);
            array[i] = array[i] / 100;
         }}
         System.out.println("\n The sum of odd place is " + result);
        return result;
    }

    public static int sumOfDoubleEvenPlace(long[] array) {
        int result = 0;
        long temp = 0;
        for (int i=0; i< array.length; i++){
        while (array[i] > 0) {
             temp = array[i] % 100;
             result += getDigit((int) (temp / 10) * 2);
            array[i] = array[i] / 100;
           }
        }
        System.out.println("\n The sum of double even place is " + result);
        return result;
    }
     }

共有1个答案

穆建华
2023-03-14

您可以自由地导入以下代码:

public class Luhn
{
    public static boolean Check(String ccNumber)
    {
            int sum = 0;
            boolean alternate = false;
            for (int i = ccNumber.length() - 1; i >= 0; i--)
            {
                    int n = Integer.parseInt(ccNumber.substring(i, i + 1));
                    if (alternate)
                    {
                            n *= 2;
                            if (n > 9)
                            {
                                    n = (n % 10) + 1;
                            }
                    }
                    sum += n;
                    alternate = !alternate;
            }
            return (sum % 10 == 0);
    }
}

链接参考:https://github.com/jduke32/gnuc-credit-card-checker/blob/master/cccheckerpro/src/com/gnuc/java/ccc/luhn.java

 类似资料:
  • 我试图用JAVA开发一个应用程序,它将检查用户输入的信用卡号是否有效。 下面是检查模数10的步骤: 步骤1:从右到左每秒数字加倍。如果一个数字的倍增导致一个两位数,则将这两个数字相加得到一个个位数。 步骤4:求和步骤2和步骤3的结果 步骤5:如果步骤4的结果可被10整除,则卡号有效;否则无效。在这种情况下,卡号无效--因为75不能被10整除。 到目前为止,我的问题是,我尝试的每一个卡号(使用有效的

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

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

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

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

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