2016-03-07 1 views
0

Я пытаюсь разработать небольшую программу java, которая может проверить, действительно ли случайный номер социального страхования (SIN). Для того, чтобы SIN (9 цифр) был действительным, они должны суммироваться до кратного 10. Это действительный номер SIN. Я придумал 464-147-464 для тестирования моей программы. Что мне нужно сделать сейчас, это возможность изолировать каждую цифру (используя модулю и/или деление). Это то, к чему я придумал.Изолирование 9-значного числа с использованием Modulo/Divison

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 (используя модулю или деление), это хорошо.

Кто-нибудь знает, что я могу сделать?

ответ

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

Это не компилировать; и не проверяет, имеет ли 'sin' 9 цифр (например,' Integer.MAX_VALUE' имеет 10 цифр). –

+0

Да, вы правы, но в вопросе он сказал: «Пользователь должен иметь возможность вводить любые 9 чисел, и если они составляют до 10 (используя модулю или деление), это хорошо». Я ответил на его вопрос, я просто не справился с его вводом. И я исправил свой ответ, поэтому компилирует –

+1

'return total% 10 == 0;'. –

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 
+0

Знаем ли мы, что ведущие цифры не могут быть 0? – childofsoong

+0

@childofsoong ty fixed – osanger

+0

Ваш код возвращает false, используя действительный SIN 046 454 286. Мое не работает с этим делом, просто подумал, что вы хотите знать. –

Смежные вопросы