对“校验和”一词的误解阻止了我编写算法

时间:2013-10-05 16:19:50

标签: java checksum

我正在尝试使用以下算法获取UPC代码的校验和:

  • 从右到左工作,将奇数位(第一,第三,第五等)的数字相加。
  • 将总数乘以3
  • 对偶数位置(第二,第四,第六等)中的数字求和
  • 将(1)和(2)的结果一起添加,和
  • 从大于或等于该总数的最接近的十倍中减去总数

结果应该是校验位。

这是我的代码:

int[] a = {1, 2, 3, 4, 5}
checksum = 0;
int i = 0;

while ( a[i] < a.length-1  )
{
  checksum += a[i] + a[i - 1] ;
  i++;
}
checksum = ;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您只想对数组的所有条目求和,可以执行此操作(未测试):

var sum = 0;
var vars = [1, 2, 3, 4, 5];

vars.forEach(function (callback) {
    sum = sum + callback;
})

alert(sum);

这不是真正的校验和,也可能有5,2,3,1,4

您也可以查看a similar question on SO。 它是关于如何获取文件的md5校验和;你也可以用它作为字符串。

我不能更具体地回答,因为你的问题不是。

修改

如果我理解了最后一行,那么这应该有效(未经测试):

var vars = [1, 2, 3, 4, 5];
var sum135;
var sum246;
var i = 0;

while (i < vars.length) {
    sum135 = sum135 + vars[i];
    sum246 = sum246 + vars[i + 1];
    i = i + 2;
}

sum135 = sum135 * 3;
var checksum = (sum135 + sum246) * (sum135 + sum246 + 10) - (sum135 + sum246);