Java练习 - 检查ID号

时间:2015-11-09 00:27:12

标签: java arrays string char

我有一个检查身份证号码的任务,我必须检查这个身份证是否有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;
            }
        }
    }

}

Sample output

1 个答案:

答案 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代码值,或者完全不同。如果发生这种情况,您需要将'权重'转换为整数数组,并在将它们相乘之前从字符中提取实际数值。