-4

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

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

看起来很简单,但我无法弄清楚。

4

1 回答 1

1

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可以在以下代码中使用 a:(注意:必须删除前导零。)

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 代码)。

于 2016-09-30T15:05:28.247 回答