2016-09-29 11 views
-4

私は、UPCコードにチェック桁があり、このチェック桁を使ってコードが有効かどうかを確認する方法を知っています。UPCコードのエラーを検出するにはどうすればよいですか?

コードが有効でない場合、私のプログラムはエラーがどこにあるか教えてください。私はそれができますが、どのように知っている?私は単一の置換エラー(例えば、2の代わりに5をタイプする)と転置エラー(例えば21の代わりに12をタイプする)を検出する必要があります。

シンプルなようですが、わかりません。

+0

エラー検出とエラー訂正は関連していますが、それぞれ異なります。私が知る限り、UPCはエラーの検出にのみ使用されます。 1つのチェックディジットが多くのコードに対して有効であるため、UPCでは1桁のエラーを修正することはできません。 [https://en.wikipedia.org/wiki/Universal_Product_Code](https://en.wikipedia.org/wiki/Universal_Product_Code) – PEF

答えて

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桁の1桁のエラーと90桁の2桁の転置エラーを検出します。

* UPCはエラー訂正をサポートしていません。しかし、どの桁が間違っているかわかっている場合は、エラーが検出されなくなるまで(有効なUPCコード)、その桁の10の値をすべて試すことができます。

関連する問題