如何检测 UPC 代码中的错误?
How do I detect errors in UPC codes?
我知道 UPC 代码有一个校验位以及如何使用这个校验位来查看代码是否有效。
如果代码无效,我的程序需要告诉我错误在哪里。我知道这是可以做到的,但是怎么做呢?我需要检测单个替换错误(例如,在 2 的位置键入 5)和换位错误(例如,键入 12 而不是 21)。
看似简单,但我想不通
当被认为是 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。如link中所述:https://en.wikipedia.org/wiki/Universal_Product_Code、UPC-A检测100%的个位数错误和90%的2位换位错误.
*UPC不支持纠错。但是,如果您知道哪个数字不正确,您可以尝试该数字的所有 10 个可能值,直到没有检测到错误(有效的 UPC 代码)。
我知道 UPC 代码有一个校验位以及如何使用这个校验位来查看代码是否有效。
如果代码无效,我的程序需要告诉我错误在哪里。我知道这是可以做到的,但是怎么做呢?我需要检测单个替换错误(例如,在 2 的位置键入 5)和换位错误(例如,键入 12 而不是 21)。
看似简单,但我想不通
当被认为是 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。如link中所述:https://en.wikipedia.org/wiki/Universal_Product_Code、UPC-A检测100%的个位数错误和90%的2位换位错误.
*UPC不支持纠错。但是,如果您知道哪个数字不正确,您可以尝试该数字的所有 10 个可能值,直到没有检测到错误(有效的 UPC 代码)。