我有一个检查身份证号码的任务,我必须检查这个身份证是否有11个字符,如果这些字符是数字,我必须检查控制号码。当这个等式正确时,数字是正确的:
ID = abcdefghijk
(1*a+3*b+7*c+9*d+1*e+3*f+7*g+9*h+1*i+3*j+1*k) % 10 = 0
样本正确ID为: 49040501580
这是我的计划。我不知道如何检查ID是否为数字以及为何不正确。有人帮吗? XD 提前谢谢:3
import java.util.*;
public class wat {
public static void main(String[] args) {
char[] weights = {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1};
System.out.print("Enter next digits your ID number: ");
Scanner keyboard = new Scanner(System.in);
String number = keyboard.nextLine();
char[] ofm = number.toCharArray();
Character[] id = new Character[ofm.length];
for (int i = 0; i < ofm.length; i++) {
id[i] = ofm[i];
System.out.print(id[i] + " ");
int length = id.length;
if (length == 11) {
System.out.println("This ID number has 11 digits");
System.out.println("Checking of the control number");
int amount = 0;
amount = id[i] * weights[i];
System.out.println(amount);
int result = 0;
result = amount % 10;
if (result == 0) {
System.out.println("ID number is correct");
} else {
System.out.println("ID number is not correct");
break;
}
} else {
System.out.print("This ID number hasn't 11 digits.");
break;
}
}
}
}
答案 0 :(得分:0)
对原始代码进行最少量的更改后,我相信这就是您所需要的。
import java.util.*;
public class wat {
public static void main(String[] args) {
char[] weights = {1,3,7,9,1,3,7,9,1,3,1};
System.out.print("Enter next digits your ID number: ");
Scanner keyboard = new Scanner(System.in);
String number = keyboard.nextLine();
char[] ofm=number.toCharArray();
Character[] id=new Character[ofm.length];
if (ofm.length == 11) {
System.out.println("This ID number has 11 characters");
int amount = 0;
for (int i = 0; i < ofm.length; i++) {
id[i]=ofm[i];
System.out.print(id[i]+" ");
int length = id.length;
if (isDigit(id[i])) {
amount = id[i]*weights[i];
} else {
System.out.println("character is not a digit");
break;
}
}
} else {
System.out.print("This ID number hasn't 11 digits.");
return;
}
System.out.println("Checking of the control number");
System.out.println(amount);
int result =0;
result = amount % 10;
if (result == 0) {
System.out.println("ID number is correct");
} else {
System.out.println("ID number is not correct");
}
}
}
如您所见,我们现在在循环开始之前验证字符串长度。
然后我们逐个检查每个字符是否为数字,如果其中一个字符不是,则退出并显示新的错误消息。你需要自己提供isDigit函数(在StackOverflow上有很多选择!)。
我们将数字值乘以权重加到数量变量中,每次循环迭代时都会添加一个新值。
最后,我们在循环结束后验证结果是否正确,并且所有11个字符都已处理完毕。
注意:我通常不使用Java,所以我不能完全确定你是否可以从Character类型对象中获取数字值(将它与权重相乘),就像这样。您可能会发现您正在获取ASCII代码值,或者完全不同。如果发生这种情况,您需要将'权重'转换为整数数组,并在将它们相乘之前从字符中提取实际数值。