我在 Java 中创建了这个 Luhn 检查(或 Mod 10 检查),偶数和奇数的总和没有正确加起来,我不知道为什么。当我单独写出一个部分时它起作用了,而且它似乎工作正常。作为具有所有其他方法的整个程序,它不起作用。有人有想法么?
输入数字 4388576018410707 应该是有效的。
import java.util.Scanner;
import java.io.*;
public class combineAll {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a credit card number: ");
long userInput = input.nextLong();
int getSize=getSize(userInput); //Run getSize() Method.
Integer z = (int) (long) getPrefix(userInput, getSize); //Run getPrefix() Method.
if (prefixMatch(userInput, z)== true) { //Run prefixMatch() Method.
long n=sumbOfDoubleEvenPlace(userInput); //Run sumbOfDoubleEvenPlace() Method.
long m=sumOfOddPlace(userInput); //Run sumOfOddPlace() Method.
System.out.println("Total Even: " +n);
System.out.println("Total Odd: " +m);
long v=n+m;
if (isValid(v)==true) {
System.out.println("Valid");
} else if (isValid(v)==false){
System.out.println("Invalid");
}
} else {
System.out.println("Invalid");
}
} //End main
//Return the number of digits in d
public static int getSize(long d) {
String str = Long.toString(d);
int x = str.length();
return x;
}
//Return the first k number of digits from number. If the number of digits in number is less than k, return number
public static long getPrefix(long number, int k) {
int z=0;
if (k>=13 && k<=16) {
String str = Long.toString(number);
String g = str.substring(0,1);
String h = str.substring(0,2);
int d=Integer.parseInt(g);
int q=Integer.parseInt(h);
if (d==4 || d==5 ||d==6) {
z=d;
} else if (q==37) {
z=q;
}
} else {
z=-1;
}
return z;
}
//Return true if the digit d is a prefix for number
public static boolean prefixMatch(long number, int d) {
if (d==4 || d==5 || d==6 || d==37) {
return true;
} else {
return false;
}
}
//Get the result from step 2
public static int sumbOfDoubleEvenPlace(long number) {
long a=number;
int d=0; //Adds each individual numbers.
while (a>0) {
long b=0;
long c=0; //Equals the Mod of UserInput.
a=a/10;
c=a%10;
System.out.println("even: " +c);
b=c*2;
if (b>=10) {
Integer digit = (int) (long) b;
d+=getDigit(digit); //Run getDigit() Method.
} else {
Integer digit = (int) (long) b;
d+=b;
}
a=a/10; //Advance decimal one space to the left.
}
return d;
}
//Return sum of odd-place digits in number
public static int sumOfOddPlace(long number) {
long a=number;
int d=0; //Adds each individual numbers.
while (a>0) {
long b=0;
long c=0; //Equals the Mod of UserInput.
c=a%10;
System.out.println("odd: " +c); //Print for debugging.
b=c*2;
if (b>=10) {
Integer digit = (int) (long) b;
d+=getDigit(digit); //Run getDigit() Method.
} else {
Integer digit = (int) (long) b;
d+=b;
}
a=a/10; //Advance decimal one space to the left.
a=a/10;
}
return d;
}
//Return this number if it is a single digit, otherwise return the sum of the two digits
public static int getDigit(int number) {
int d=0;
int x=0;
int y=number;
while (y>0) {
x+=y%10;
y=y/10;
}
return x;
}
//Return true if the card number is valid
public static boolean isValid(long number) {
long c=number%10;
if (c==0) {
return true;
} else {
return false;
}
}
}