使用模数和整数除法来确认帐号

  • 本文关键字:除法 确认 帐号 整数 java
  • 更新时间 :
  • 英文 :


我是Java新手,目前正在处理一个小类赋值。问题如下:

编写一个程序,确定10位或更少的银行账号是否通过验证测试;它要求我们提取数字,从右到左按:

  • 使用模运算符提取最右边的数字
  • 使用整数除法从帐号中删除最右边的数字,以获得没有它的新数字。从最右边的第二个数字开始,从右向左移动,每隔一个数字加倍。如果它产生的值大于9,则从该值中减去9
  • 形成所有产品(新数字(和未更改数字的总和
  • 如果总和没有以0结尾,则无效

检查5113 4765 12和65 1234 1234 的有效性

这是我的代码:

long account = Long.parseLong(JOptionPane.showInputDialog( null, "Enter account number: " ));
int sum = 0;
long digit;
//5113476512
//6512341234
String str_number = String.valueOf(account);
digit = account % 10;
account /= 10;
for(int i = str_number.length() -2; i >= 0; i --){
digit = account % 10;
account /= 10;
// account%=10;
// sum += digit;
digit *= 2;
if (digit > 9){
digit -= 9;
}
sum += digit;
}
// for(int x = 0; x < digit.length; x ++){
//   sum += digit[x];
// }
if (sum % 10 != 0){
JOptionPane.showMessageDialog(null, "Account number invalid");
}
else{
JOptionPane.showMessageDialog(null, "Account number valid");
}
JOptionPane.showMessageDialog(null, sum);

但我觉得它不符合要求,可能不正确。只有一个账号返回有效,尽管我不确定是否应该是这样。有什么想法吗?

以下使用布尔标志检测另一个号码的实现表明两个帐号都无效:

public static boolean isValid(long acc) {
System.out.print(acc + " -> "); // debug print
int sum = 0;
boolean other = false;
while (acc > 0) {
int digit = (int) (acc % 10);
acc /= 10;
if (other) {
digit *= 2;
if (digit > 9) digit -= 9;
}
System.out.print(digit + " "); // debug print
sum += digit;
other = !other;
}
System.out.println("sum = " + sum); // debug print
return sum % 10 == 0;
}

测试:

System.out.println(isValid(5113476512L));
System.out.println(isValid(6512341234L));

输出:

5113476512 -> 2 2 5 3 7 8 3 2 1 1 sum = 34
false
6512341234 -> 4 6 2 2 4 6 2 2 5 3 sum = 36
false

最新更新