5

假设您有一个系统,可以通过电子邮件或纸张将相当长的关键值准确地传达给用户,但用户需要能够通过电话阅读,或通过阅读并将其键入其他界面,从而准确地将密钥传回给您。编码,最大限度地减少误读/ mistyping/misspeaking?

什么是“好”的方式来编码的密钥,使阅读/听力/打字很容易&准确?

这可能是发票号码,文档ID,交易ID或其他抽象值。我们先来说说这次讨论的基础键值是一个大数目的缘故,说是40个位数10为基数

的几点思考:

较短的键通常更好

  • 40 -digit基数10的值可能不符合给定的空间,并且容易在
  • 的中间丢失
  • 相同的值可以用基数16表示在33-34位的数字中
  • 相同的值可能在底座36中26个数字
  • 来表示相同的值可在基座64中22-23位数字

字符不能在视觉上相互混淆表示更好

  • 例如包含O(oh)和0(零)或S(ess)和5(五)的编码可能很差
  • 此问题取决于用于显示密钥的字体/能够在某些情况下进行控制(如在纸上打印),但无法控制其他人(如网页和电子邮件)。
  • 还取决于您是否可以控制大写和/或小写的独占使用 - 例如,资本D(迪)可能看起来像O(哦),但小写d(迪)不会;而小写l(ell)看起来像1(一),而大写L(ell)不会。 (对于特殊的字体/脸部例外)。

字符不能口头/听觉上相互混淆更好

  • 一个(AY)8(8)
  • B(蜜蜂)C(CEE)d(DEE) E(ee)g(gee)p(pee)t(tee)v(vee)z(zee)3(三)
  • 此问题取决于端到端信道的音频质量 - 更大的挑战如果预期的用户群可能存在语音障碍,或者可能不得不通过防毒面具说话,或者通信信道可能包括CB无线电或者不稳定的VOIP电话系统。

添加一个或两个校验位将检测错误,但无法帮助解决错误。

alpha - bravo - charlie - delta类型的对话框可以帮助识别错误,但不会读取错误。

编码的可能的选择:

  • 基本64 - 紧凑,但太多难以用语言表达的字符(下划线,破折号等等)
  • 基座34 - 0-9和AZ,但用O(oh)和I(aye)遗漏,因为最易与数字混淆
  • 基数32 - 与基数34相同,但省略了0(零)和1(一个)

I那里有一个公认的编码方式,对于这种情况是一个合理的解决方案?

+1

使用ICAO(http://en.wikipedia.org/wiki/NATO_phonetic_alphabet)? – ninjalj 2012-03-09 18:46:19

回答

相关问题