使用Modulo / Divison隔离9位数字

时间:2016-03-07 18:17:50

标签: java integer division checksum modulo

我正在尝试开发一个小型java程序,可以检查随机SIN(社会保险号)是否有效。为了使SIN(9位)有效,它们必须总和为10的倍数。这是一个有效的SIN号码,我想出了464-147-464来测试我的程序。 我现在需要做的是能够隔离每个数字(使用模数和/或除法)。这是我到目前为止所提出的。

 public static void main(String[] args) {
    // TODO code application logic here
    int x1 = 1;
    int x2 = 2;
    int x3 = 3;
    int x4 = 4;
    int x5 = 5;
    int x6 = 6;
    int x7 = 7;
    int x8 = 8;
    int x9 = 9;
    int x0 = 0;


int x1 = 1/100000000; 
int num1 = 1%100000000;

int x2 = 2/10000000;
int num2 = 2%10000000;

int x3 = 3/1000000;
int num3 = 3%1000000;

int x4 = 4/100000;
int num4 = 4%100000;

int x5 = 5/10000;
int num5 = 5%10000;

int x6 = 6/1000;
int num6 = 6%1000;

int x7 = 7/100;
int num7 = 7%100;

int x8 = 8/10;
int num8 = 8%10;

int x9 = 9/1;
int num9 = 9%1;

String number = JOptionPane.showInputDialog("Please enter a valid SIN.");

我是否在正确的轨道上?整点是用户应该能够输入任何9个数字,如果它们加起来为10的倍数(通过模数或除法),它就是好的。

任何人都知道我能做什么?

2 个答案:

答案 0 :(得分:0)

你可以这样做。您当前的实现不会起作用,因为使用整数运算,您所执行的所有除法都会得到零。

public static boolean validate(int sin) {

    int total = 0;
    for(int i =0;i<9;i++){
        total += sin %10;
        sin = sin/10;
    }
    return total%10==0 && sin ==0;
}

答案 1 :(得分:0)

这应该这样做:

public static boolean isValidate(String arg0) {
            int num = Integer.parseInt(arg0.replaceAll("-",""));
               if((num+"").length() != 9 ) return false;
                 int sum = 0;
                    while (0 != num) {
                        sum += (num% 10);
                        num /=  10;
                    }

                return (sum%10==0);
            }

用法:

System.out.println(isValidate("464-144-464")); //returns false
System.out.println(isValidate("460-127-064")); // return true