2

画像から認識される数値には、次の制約があります。

  • 6桁データ
  • 1桁誤り訂正
  • 最初の 6 桁は変更できません (人間が判読できる必要があります)。
  • チェック ディジットは数字のままである必要があります

現在、エラー訂正スキームはチェックサムに基づいており、最初の 6 桁の合計の最後の桁が 7 桁目になります。

例えば

123456 => 1234561
999999 => 9999994
472912 => 4729125
219274 => 2192745

このスキームが検出/修正できるエラーの数と種類を特定するにはどうすればよいですか? また、より適切なエラー検出を提供するスキームはありますか? (私のユースケースでは、エラー検出はエラー修正よりも重要です)。

4

1 に答える 1

3

Luhnを試すことができます。説明した内容よりも少し複雑ですが、要件を満たします。

ウィキペディアからのコピペ:

Luhn アルゴリズムは、1 桁のエラーだけでなく、隣接する数字のほぼすべての転置も検出します。ただし、09 から 90 までの 2 桁のシーケンス (またはその逆) の転置は検出されません。可能性のある 10 個のツイン エラーのうち 7 個を検出します (22 ↔ 55、33 ↔ 66、または 44 ↔ 77 は検出しません)。

その他のより複雑なチェック ディジット アルゴリズム (Verhoeff アルゴリズムや Damm アルゴリズムなど) は、より多くの転記エラーを検出できます。Luhn mod N アルゴリズムは、数値以外の文字列をサポートする拡張機能です。

アルゴリズムは右から左の方法で数字を操作し、ゼロの数字は位置のシフトを引き起こす場合にのみ結果に影響を与えるため、数字の文字列の先頭をゼロで埋めても計算には影響しません。したがって、特定の桁数にパディングするシステム (たとえば、1234 を 0001234 に変換することによって) は、パディングの前または後に Luhn 検証を実行して、同じ結果を得ることができます。

0 を奇数長の数値の先頭に追加すると、数値を右から左ではなく左から右に処理して、奇数桁を 2 倍にすることができます。

このアルゴリズムは、チェックサムを計算するハンドヘルドの機械装置に関する米国特許に記載されています。したがって、かなりシンプルである必要がありました。デバイスは、機械的手段によって mod 10 の合計を取得しました。置換数字、つまり double および reduce プロシージャの結果は、機械的に生成されませんでした。むしろ、数字は機械の本体に並べ替えられた順序でマークされていました。

于 2012-12-29T19:07:09.213 に答える