かなり長いキー値を、電子メールまたは紙を介して画面上のユーザーに正確に伝達できるシステムがあるとします。ただし、ユーザーは、電話でキーを読み取るか、キーを読み取って他のインターフェイスに入力し直すことにより、キーを正確に伝えることができる必要があります。
キーをエンコードして、読み/聞き取り/入力を簡単かつ正確にする「良い」方法は何ですか?
これは、請求書番号、ドキュメントID、トランザクションID、またはその他の抽象的な値である可能性があります。この説明のために、基になるキー値が大きな数値、たとえば基数10の40桁であるとしましょう。
いくつかの考え:
一般的に、キーは短い方が良いです
- 40桁の基数10の値は、指定されたスペースに収まらない可能性があり、途中で迷子になりやすいです。
- 同じ値を基数16で33〜34桁で表すことができます
- 同じ値をベース36で26桁で表すことができます
- 同じ値をbase64で22〜23桁で表すことができます
視覚的に混同できないキャラクターの方がいい
- たとえば、O(oh)と0(ゼロ)、またはS(ess)と5(5)の両方を含むエンコーディングは不良である可能性があります
- この問題は、キーの表示に使用されるフォント/面によって異なります。キーを制御できる場合(紙に印刷する場合など)は制御できますが、他の場合(Webページや電子メールなど)は制御できない場合があります。
- また、大文字および/または小文字の排他的使用を制御できるかどうかによっても異なります。たとえば、大文字のD(ディー)はO(oh)のように見えますが、小文字のd(ディー)はそうではありません。小文字のl(ell)は1(1)のように見えますが、大文字のL(ell)はそうではありません。(特にエキゾチックなフォント/顔を除いて)。
口頭/聴覚的に混同できないキャラクターの方が優れています
- a(ay)8(8)
- B(蜂)C(cee)D(dee)E(ee)g(gee)p(pee)t(tee)v(vee)z(zee)3(three)
- この問題は、エンドツーエンドチャネルのオーディオ品質によって異なります。予想されるユーザーベースに音声障害がある場合、ガスマスクを介して話す必要がある場合、または通信チャネルにCBラジオや途切れ途切れが含まれる場合は、より大きな課題になります。 VOIP電話システム。
チェックディジットを1つまたは2つ追加すると、エラーは検出されますが、エラーの解決には役立ちません。
アルファ-ブラボー-チャーリー-デルタタイプのダイアログは、聴覚エラーには役立ちますが、読み取りエラーには役立ちません。
エンコーディングの可能な選択肢:
- Base 64-コンパクトですが、言語化が難しい文字(アンダースコア、ダッシュなど)が多すぎます
- ベース34-0-9およびAZですが、数字と混同しやすいため、O(oh)およびI(aye)は省略されています
- Base 32-Base 34と同じですが、0(ゼロ)と1(1)も省略します
このシナリオの合理的な解決策である一般的に認識されているエンコーディングはありますか?