私は、UPCコードにチェック桁があり、このチェック桁を使ってコードが有効かどうかを確認する方法を知っています。UPCコードのエラーを検出するにはどうすればよいですか?
コードが有効でない場合、私のプログラムはエラーがどこにあるか教えてください。私はそれができますが、どのように知っている?私は単一の置換エラー(例えば、2の代わりに5をタイプする)と転置エラー(例えば21の代わりに12をタイプする)を検出する必要があります。
シンプルなようですが、わかりません。
私は、UPCコードにチェック桁があり、このチェック桁を使ってコードが有効かどうかを確認する方法を知っています。UPCコードのエラーを検出するにはどうすればよいですか?
コードが有効でない場合、私のプログラムはエラーがどこにあるか教えてください。私はそれができますが、どのように知っている?私は単一の置換エラー(例えば、2の代わりに5をタイプする)と転置エラー(例えば21の代わりに12をタイプする)を検出する必要があります。
シンプルなようですが、わかりません。
次のコードは、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の値をすべて試すことができます。
エラー検出とエラー訂正は関連していますが、それぞれ異なります。私が知る限り、UPCはエラーの検出にのみ使用されます。 1つのチェックディジットが多くのコードに対して有効であるため、UPCでは1桁のエラーを修正することはできません。 [https://en.wikipedia.org/wiki/Universal_Product_Code](https://en.wikipedia.org/wiki/Universal_Product_Code) – PEF