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

Java 如何检测UPC代码中的错误?,java,error-detection,Java,Error Detection,我知道UPC代码有一个校验位,以及如何使用这个校验位来查看代码是否有效 如果代码无效,我的程序需要告诉我错误在哪里。我知道这是可以做到的,但是怎么做呢?我需要检测单个替换错误(例如,用5代替2)和换位错误(例如,用12代替21) 看起来很简单,但我无法理解。以下代码将检测UPC-a代码(12位)中的错误,如果将其视为字符串(推荐方式) 通常最好在测试之前验证UPC代码。i、 e.检查以确保其包含正确的位数,并且仅包含数字0-9。如链接中所述,UPC-A检测100%的单位数错误和90%的2位数转置

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

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


看起来很简单,但我无法理解。

以下代码将检测UPC-a代码(12位)中的错误,如果将其视为
字符串(推荐方式)

通常最好在测试之前验证UPC代码。i、 e.检查以确保其包含正确的位数,并且仅包含数字0-9。如链接中所述,UPC-A检测100%的单位数错误和90%的2位数转置错误


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

错误检测和错误更正是相关的,但不同。据我所知,UPC仅用于检测错误。由于单个校验位对许多代码有效,因此无法在UPCs中更正单个数字错误。
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 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");