计算奇数位(第一,第三,......,第十一位)中的数字之和,并将此总和乘以3.
计算偶数位置(第二,第四,......,第十位)的数字之和,并将其添加到上一个结果中。
如果步骤2的结果的最后一位为0,则0为校验位。否则,从10中减去最后一位数来计算校验位。
如果校验位与12位数的最后一位相匹配,则表示条形码是正确的。
for(int j = 0; j< = 10; j = j + 2) {
sumOdd = sumOdd + bar[0][j];
}
result1 = sumOdd * 3;
for(int j = 1; j <= 11; j = j + 2)
{
sumEven = sumEven + bar[0][j];
}
result2 = result1 + sumEven;
if(result2 % 10 == 0)
{
checkDigit = 0;
}
else
{
checkDigit = 10 - result2 % 10;
}
if(checkDigit == bar[0][11])
{
System.out.printf("validated\n");
//System.out.printf("Step1 Result: %d\n", result1);
//System.out.printf("Step2 Result: %d\n", result2);
}
else
{
System.out.printf("error in barcode\n");
//System.out.printf("Step1 Result: %d\n", result1);
//System.out.printf("Step2 result: %d\n", result2);
}
}
答案 0 :(得分:0)
它应该更像是这样,因为您必须从用户输入n
次:
int n = myScan.nextInt();
int[] bar = new int[n];
for (int i=0; i<bar.length; i++) {
int n = myScan.nextInt();
bar[i] = n;
}
在这种情况下,我考虑使用long
代替int
。
如果你想将每个数字存储在一个数组中,你必须使用一个多维数组,几乎应该如下所示:
int number = myScan.nextInt();
int[][] bar = new int[number][12];
for (int i=0; i<bar.length; i++) {
for (int j=0; j<bar[i].length; j++) {
int n = myScan.nextInt();
bar[i][j] = n;
}
您将拥有一个二维数组[x][]
,其中x
将是特定条形码的0-(number-1)
的索引号,[x][0]-[x][11]
将是索引处的条形码数字号码x
。