我尝试使用Luhn算法检查信用卡的有效性,该算法的步骤如下:

  • 从右到左每隔两位数加倍。如果将两位数加倍得到两位数,则将两位数相加即可得到一位数。

    2 * 2 = 4

    2 * 2 = 4

    4 * 2 = 8

    1 * 2 = 2

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

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

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

    4 * 2 = 8
  • 现在添加步骤1中的所有一位数字。

    4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37
  • 在卡号的从右到左的奇数位添加所有数字。

    6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38
  • 对步骤2和步骤3的结果求和。

    37 + 38 = 75
  • 如果步骤4的结果可被10整除,则卡号有效;否则无效。例如,数字4388576018402626无效,但是数字4388576018410707有效。

  • 简而言之,我的程序始终对我输入的所有内容显示有效。即使它是一个有效数字,并且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;
        }
         }
    

    最佳答案

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

    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

    09-10 06:29
    查看更多