我知道UPC代码有一个校验位以及如何使用这个校验位来查看代码是否有效。
如果代码无效,我的程序需要告诉我错误在哪里。我知道可以做到,但是怎么做?我需要检测单个替换错误(例如,在2的位置键入5)和转置错误(例如,键入12而不是21)。
似乎很简单,但我无法理解。
答案 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代码)。