-4
我知道UPC代碼有一個校驗位,以及如何使用這個校驗位來查看代碼是否有效。如何檢測UPC代碼中的錯誤?
如果代碼無效,我的程序需要告訴我錯誤在哪裏。我知道這可以做到,但是怎麼做?我需要檢測單個替換錯誤(例如,輸入5代替2)和換位錯誤(例如輸入12而不是21)。
看起來很簡單,但我無法弄清楚。
我知道UPC代碼有一個校驗位,以及如何使用這個校驗位來查看代碼是否有效。如何檢測UPC代碼中的錯誤?
如果代碼無效,我的程序需要告訴我錯誤在哪裏。我知道這可以做到,但是怎麼做?我需要檢測單個替換錯誤(例如,輸入5代替2)和換位錯誤(例如輸入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。如鏈接中所述:https://en.wikipedia.org/wiki/Universal_Product_Code,UPC-A檢測100%的單個數字錯誤和90%的2位數的換位錯誤。
* UPC不支持錯誤更正。但是,如果您知道哪個數字不正確,則可以嘗試使用該數字的所有10個可能值,直到檢測不到錯誤(有效的UPC代碼)。
錯誤檢測和錯誤更正有關,但不同。據我所知,UPC僅用於檢測錯誤。由於單個校驗位對許多代碼有效,所以在UPC中無法糾正單個數字的錯誤。 [https://en.wikipedia.org/wiki/Universal_Product_Code](https://en.wikipedia.org/wiki/Universal_Product_Code) – PEF