用Java计算校验数

用Java计算校验数,java,Java,不确定是否有人能向我解释或帮助我 我有一个15位数字,我想把每个偶数乘以2,除非偶数大于9。如果是,需要减去9,得到一个整数,我可以再乘以2。一旦我把所有的偶数乘以2,我需要把它们和奇数相加 这有意义吗 更新*** 所以我有一个号码是49209999856459。对于这个数字,我希望得到偶数整数,例如,第一个偶数是4,第二个偶数是2,依此类推 如果其中一个偶数乘以2,那么它可能大于9,所以我想减去9,然后用余数代替偶数 所以!!! 将从索引0开始的每个偶数数字的值乘以2,然后再乘以每个偶数索引。

不确定是否有人能向我解释或帮助我

我有一个15位数字,我想把每个偶数乘以2,除非偶数大于9。如果是,需要减去9,得到一个整数,我可以再乘以2。一旦我把所有的偶数乘以2,我需要把它们和奇数相加

这有意义吗

更新***
所以我有一个号码是49209999856459。对于这个数字,我希望得到偶数整数,例如,第一个偶数是4,第二个偶数是2,依此类推

如果其中一个偶数乘以2,那么它可能大于9,所以我想减去9,然后用余数代替偶数

所以!!!
将从索引0开始的每个偶数数字的值乘以2,然后再乘以每个偶数索引。在每种情况下,如果结果值大于9,则从中减去9(这会将较大的值减少为一个位数)。保持奇数索引处的数字值不变

public String calculateCheckNumber()

  String firstFifteen = longNumber.substring(0,15) ;
  int i, checkSum = 0, totalSum = 0;
  for (i = 0; i<firstFifteen.length(); i += 2) {


while (i < 9)
        i *= 2;
 if   (i > 9)
       i -= 9 ;
       
}
公共字符串calculateCheckNumber()
String first十五=longNumber.substring(0,15);
整数i,校验和=0,总和=0;
对于(i=0;i=9)
i-=9;
}
这是我尝试过的一个选择,但老实说,我似乎无法理解


任何帮助都将不胜感激。

好吧,这里有一种方法。这使用三元(?:)运算符来压缩操作。根据OP中的说明进行编辑。您给出的示例实际上是一个14位字符串。但是,如果以字符串开头,则以下内容适用于任意数量的数字。如果有长值,则可以使用以下方法创建字符数组:

long v = 49209999856459L;
char[] d = Long.toString(v).toCharArray();
这里是主要的算法

String s = "49209999856459";
int sum = 0;
char[] d = s.toCharArray();
for (int i = 0; i < d.length; i++) {
    int v = d[i] - '0';
    // The even digit will only be greater than 9 after
    // doubling if it is >= 5 before.
    sum += ((i % 2) == 1) ? v : (v >= 5) ? v+v-9 : v+v; 
}
System.out.println(sum);

在while循环中,只有当我9岁时它才会停止,所以。。。什么?我想你指的是数字(在while循环中),对吗?不是整数。你说的偶数是什么意思?在偶数位置(即第二、第四、第六位数字)可被二整除。还有一个15位数的数字。一个数字怎么可能大于9。请举例说明?还包括预期的校验和。每个偶数是否意味着15位数字中的每个数字都是偶数?当它大于9时,会发生什么情况?所以我有一个数字,比如49209999856459。对于这个数字,我希望得到偶数整数,例如,第一个偶数是4,第二个偶数是2,依此类推。如果其中一个偶数乘以2,那么它可能大于9,所以我想减去9,然后用余数代替偶数。我喜欢这种方法。谢谢你的帮助。虽然我想我把你弄糊涂了。我一直在寻找字符串中的第二个字符,并将其加倍。这就是我所说的偶数。即使是在字符串上,也不是在单个字符上。所以如果这个数字是4895523,我想要加倍的数字是4,9,5,3。如果这有意义的话?乘以2,从索引0开始的每个偶数数字的值,然后再乘以每个偶数索引。在每种情况下,如果结果值大于9,则从中减去9(这会将较大的值减少为一个位数)。保持奇数索引处的数字值不变。@EirmisSolutions因为您是新手,所以我想您应该知道,版主非常不赞成重新发布相同的问题。你可能会因为屡次违规而被禁止。正确的步骤是使用任何更新编辑第一个。无论如何,我根据你的澄清修改了我的答案。请看一看。
86