我真的很陌生。我正在尝试使用Luhn算法来验证“人员编号”(瑞典社会安全号码)。我认为代码几乎已经完成但我不知道在“birthDate.length()”和“pos”类中放入什么才能使它工作。 birthDate.length需要确保字符串长度为10位,验证控制需要“pos”。
package kund;
import java.util.Scanner;
public class Kund {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Welcome customer. Please login by using your "
+ "birthdate (yymmddxxxx)");
Scanner input = new Scanner (System.in);
String birthDate = input.next();
int length = birthDate.length();
int sum = 0;
for (int i = 1; pos=length-1; i<=10; i++, pos--){
char tmp = birthDate.charAt(pos);
int num = Integer.parseInt(String.valueOf(tmp));
int produkt;
if (i % 2 != 0){
produkt = num * 1;
}else {
produkt = num * 2;
}
if ( produkt > 9 )
produkt -= 9;
sum += produkt;
boolean korrekt = (sum % 10) == 0;
if (!korrekt){
System.out.println("Invalid.");
}else if(korrekt){
System.out.println("Correct");
}
}
}
}
答案 0 :(得分:1)
你的代码语法不正确。你的for循环在循环头中有4个组件而不是3个。我移动了pos = length-1;一个句法正确的位置。我不知道算法应该如何工作,所以我无法检查程序现在是否在语义上正确。
但是,我假设您有一个瑞典社会安全号码,可以轻松查看。
package kund;
import java.util.Scanner;
public class Kund {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Welcome customer. Please login by using your "
+ "birthdate (yymmddxxxx)");
Scanner input = new Scanner (System.in);
String birthDate = input.next();
int length = birthDate.length();
int sum = 0;
int pos = length-1;
for (int i = 1; i<=10; i++, pos--){
char tmp = birthDate.charAt(pos);
int num = Integer.parseInt(String.valueOf(tmp));
int produkt;
if (i % 2 != 0){
produkt = num * 1;
}else {
produkt = num * 2;
}
if ( produkt > 9 )
produkt -= 9;
sum += produkt;
boolean korrekt = (sum % 10) == 0;
if (!korrekt){
System.out.println("Invalid.");
}else if(korrekt){
System.out.println("Correct");
}
}
}
}