如何检测UPC代码中的错误?

时间:2016-09-29 16:55:38

标签: java error-detection

我知道UPC代码有一个校验位以及如何使用这个校验位来查看代码是否有效。

如果代码无效,我的程序需要告诉我错误在哪里。我知道可以做到,但是怎么做?我需要检测单个替换错误(例如,在2的位置键入5)和转置错误(例如,键入12而不是21)。

似乎很简单,但我无法理解。

1 个答案:

答案 0 :(得分:0)

当考虑String(推荐方式)时,以下代码将检测UPC-A代码(12位数)中的错误。

String upc = "074985003004";    // UPC as a string
int sum = 0;
for(int i = 0; i < a.length(); i++) {
    sum += (i%2==0) ? (3*(upc.charAt(i)-48)) : (upc.charAt(i)-48);
}
if (sum % 10 == 0) {
    System.out.println("true");
} else {
    System.out.println("false");
}

或者,可以在以下代码中使用long :(注意:必须删除前导零值。)

long upc = 74985003004L;  // omit leading zeros;
int sum =0;
for(int i=0; i < 12; i++) {
    sum += (i%2 == 0) ? (upc % 10) : (sum += 3*(upc % 10));
    upc /= 10;
}
if (sum % 10 == 0) {
    System.out.println("true");
} else System.out.println("false");

通常最好在测试之前验证UPC代码。即检查以确保它包含正确的位数和仅0-9的数字。如链接中所述:https://en.wikipedia.org/wiki/Universal_Product_Code UPC-A检测到100%的单位数错误和90%的2位转置错误

* UPC不支持纠错。但是,如果您知道哪个数字不正确,您可以尝试该数字的所有10个可能值,直到没有检测到错误(有效的UPC代码)。