【发布时间】:2014-10-15 13:32:07
【问题描述】:
我正在尝试创建一个程序来验证基于 luhn 算法的 10 到 12 位长数字序列,但我的程序不断告诉我每个数字都是无效的,即使它们不是。
这个数字应该是有效的,但我的代码不这么认为:8112189876
这个数字应该是无效的,我的程序同意这一点,因为它认为每个数字都是无效的:8112189875
这是我的代码:
static void luhn(){
System.out.print("Enter number to validate:\n");
String pnr = input.nextLine();
int length = pnr.length();
int sum = 0;
for (int i = 1, pos = length - 1; i < 10; i++, pos--){
char tmp = pnr.charAt(pos);
int num = tmp - 0
int product;
if (i % 2 != 0){
product = num * 1;
}
else{
product = num * 2;
}
if (product > 9)
product -= 9;
sum+= product;
boolean valid = (sum % 10 == 0);
if (valid){
System.out.print("Valid!\r");
}
else{
System.out.print("Invalid!");
}
}
}
【问题讨论】:
-
ericlippert.com/2014/03/05/how-to-debug-small-programs -- 您应该使用调试器逐步完成这个正在运行的程序。我想知道
tmp是否具有您期望的价值。"1".charAt(0)不等于 1。试试Integer.parseInt()。 -
int num = tmp - 0很确定这一行返回的是 ASCII 字符值而不是数字值,不是吗? -
你也忽略了第一个字符。