编码可以最大限度地减少误读/错误输入/错误提示?

Chr*_*son 5 encoding character-encoding error-correction human-readable

假设您有一个系统,通过电子邮件或纸张可以在屏幕上准确地传达相当长的键值; 但是用户需要能够通过电话阅读,或者通过阅读并将其键入其他界面来准确地将密钥传回给您.

对键进行编码的"好"方法是什么,使阅读/听觉/打字简单准确?

这可以是发票号,文档ID,事务ID或一些其他抽象值.让我们说为了这个讨论,底层的键值是一个很大的数字,比如10的基数.

一些想法:

较短的键通常更好

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

不能在视觉上相互混淆的角色更好

  • 例如,包含O(oh)和0(零),或S(ess)和5(五)的编码可能是坏的
  • 此问题取决于用于显示密钥的字体/面,在某些情况下您可能能够控制(如在纸上打印)但在其他情况下无法控制(如网页和电子邮件).
  • 还取决于你是否可以控制上和/或小写的独占使用 - 例如,资本D(dee)可能看起来像O(哦)但是小写d(dee)不会; 小写l(ell)看起来像1(一),而大写L(ell)则不然.(特别是异国情调的字体/面孔除外).

不能在口头/听觉上相互混淆的角色更好

  • a(ay)8(八)
  • B(蜜蜂)C(cee)D(dee)E(ee)g(gee)p(小便)t(tee)v(vee)z(zee)3(三)
  • 这个问题取决于端到端信道的音频质量 - 如果预期的用户群可能存在语音障碍,或者可能不得不通过防毒面具说话,或者通信信道可能包括CB无线电或波动,则会遇到更大的挑战VOIP电话系统.

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

alpha - bravo - charlie - delta类型对话框可以帮助解决听力错误,但不能读取错误.

可能的编码选择:

  • 基础64 - 紧凑,但太多难以言语的字符(下划线,短划线等)
  • 基数34 - 0-9和AZ但是O(哦)和I(aye)被遗漏为最简单的数字混淆
  • 基数32 - 与基数34相同,但也省略了0(零)和1(一)

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

Rol*_*lig 0

当我第一次听到它时,我喜欢这篇文章《Proquints 的提案:可读、可拼写和可发音的标识符》。它将数据编码为辅音和元音的序列。但它与英语相关。(因为在德语中,fv听起来相等,所以它们不应该同时使用。)但我喜欢总体想法。