【问题标题】:Isolating 9 digit number using Modulo/Divison使用模数/除法隔离 9 位数字
【发布时间】:2016-03-07 18:17:49
【问题描述】:

我正在尝试开发一个小型 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 的倍数(通过使用模数或除法),那就很好了。

有人知道我能做什么吗?

【问题讨论】:

    标签: java integer division checksum modulo


    【解决方案1】:

    你可以这样做。您当前的实现将无法工作,因为使用整数算术您所做的所有除法都为零。

    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;
    }
    

    【讨论】:

    • 这实际上并没有编译;也不检查sin是否有9位数字(例如Integer.MAX_VALUE有10位数字)。
    • 是的,你是对的,但在问题中他说“用户应该能够输入任何 9 个数字,如果它们加起来是 10 的倍数(通过使用模数或除法),那就太好了。”我回答了他的问题,我只是没有处理他的意见。我修正了我的答案,所以它编译
    • return total % 10 == 0;.
    • 检查 sin 最多有 9 位数字可能也很好 - 因为您在最后一次添加后除以 10,这可能只是意味着您将最后一行更改为 @987654327 @如果有开头数字不能为0的规则,也应该考虑。
    【解决方案2】:

    应该这样做:

    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
    

    【讨论】:

    • 我们确定前导数字不能为0吗?
    • @childofsoong 修复了它
    • 您的代码使用有效的 SIN 046 454 286 返回 false。我的不适用于这种情况,或者只是认为您想知道。
    • 哈哈哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇。看起来 op 对如何验证罪过不正确。查看en.m.wikipedia.org/wiki/Social_Insurance_Number#Temporary_SINs 验证部分与我们的两个实现不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2021-11-16
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多