难辨的人物?

时间:2010-06-21 07:36:25

标签: python

我的数据库中有很多项目。每个都分配了一个唯一的ID。我想缩短这个ID并将其显示在页面上,这样如果我需要通过电话联系我们(通过电话)关于特定项目,他可以给我们缩短的ID,而不是一个非常大的数字。与SKU类似,在NCIX等网站上。因此,我在考虑在36号编码它。然而,问题是像1lI这样的字母看起来都是一样的。所以,我正在考虑消除相似之处。这是个好主意,还是我应该使用一个非常易读的字体?

4 个答案:

答案 0 :(得分:6)

是的,你应该消除混乱的根源。因为如果可以犯错误,来制作错误。很容易将0与O和I混淆为l或1 - 因此不应同时使用它们。嗯,这很容易 - 因为你不会使用3个字符(i,L和o),只需得到36-3中的数字= 33并转换

SKU.replace('I','X').replace('L','Y').replace('O','Z')

反过来,当给出这样的代码并且在做int之前(SKU,33),你将不得不将XYZ返回到令人困惑的字符。在此之前,如果 - 如预期的那样 - 你错误地给出了L或I,则替换为1,如果给定O,则替换为0。使用SKU.translate() string.maketrans('LIOXYZ','110IL0')

答案 1 :(得分:3)

我假设原始ID是数字。我们从z-base-32获得了类似场景的良好结果。我们自2009年4月以来一直在使用它。

我特别喜欢编码的目标,即通过删除字母表中令人困惑的字母以及简洁来最小化转录错误,因为较短的标识符更易于使用。

编码对字母表进行排序,以便更常出现的字符是更容易阅读,书写,说话和记忆的字符。使用小写,因为它更容易阅读。

在我们决定使用z-base-32之前,我问this similar question

答案 2 :(得分:1)

使用易读的字体。

答案 3 :(得分:1)

多年前,我在一家公司工作过的常规应用程序中遇到过类似的情况。有一个ID,基数36(0-9a-z),通常必须通过电话进行通信。这是一个在Unix服务器上运行并在串行终端上查看的应用程序(不相关,只是故事的一部分:)。

我们的解决方案是,每当用户在该区域并按F2时,会弹出一个小窗口,其中显示该字段的无线电代码:“a9vg5”将显示“alpha niner victor golf five”,用户可以大声朗读。

当应用程序开发出来时,我倾向于将ID显示为64位编码,大写字母加上点和斜线,并为大写字母使用不同的无线电代码字,但指定的分析师不同意。您可以在Wikipedia中查找不同的字词或具有创造性。

PS澄清:尽管我写作的方式并不清楚,但分析师不同意一个很好的理由,因为人们必须认为这两个方面的沟通;用户只是阅读,但手机的另一面必须记住或查找,例如delta == d和Dalton == D.