Python 可分辨字符?

Python 可分辨字符?,python,Python,我的数据库中有一大堆项目。每个都分配了一个唯一的ID。我想缩短此ID并将其显示在页面上,这样,如果我的用户需要就特定项目与我们联系(通过电话),他可以给我们缩短的ID,而不是一个真正大的数字。与SKU类似,在类似的网站上。因此,我考虑用36进制编码。然而,问题是像1lI这样的字母看起来都差不多。所以,我在考虑消除长得很像的人。这是个好主意,还是我应该使用真正易读的字体?使用易读的字体。是的,你应该消除混淆的根源。因为如果可能会犯错误,就会有人犯错。很容易将0与O和I与l或1混淆-因此不应同时使用

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

使用易读的字体。

是的,你应该消除混淆的根源。因为如果可能会犯错误,就会有人犯错。很容易将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')
许多年前,在我工作的一家公司,我们在一个常规应用程序中遇到了类似的情况。有一个ID,base 36(0-9a-z),经常需要通过电话进行沟通。这是一个在Unix服务器上运行并在串行终端上查看的应用程序(不相关,只是故事的一部分:)

我们的解决方案是,每当用户在该场地上并按下F2键时,就会弹出一个小窗口,其中包含该场地的无线电代码:“a9vg5”将显示“alpha niner victor golf five”,用户只需大声朗读即可

开发应用程序时,我倾向于将ID显示为base 64编码,大写字母加上点和斜杠,并使用不同的无线电码字来表示大写字母,但指定的分析师不同意。你可以在书中查找不同的单词,也可以发挥创意


PS澄清:虽然我写的方式不清楚,但分析师不同意一个很好的理由,因为我们必须考虑沟通的双方;用户只是阅读,但电话的另一端必须记住或查找,例如delta==d和Dalton==d。我假设原始ID是数字。我们从类似的场景中得到了很好的结果。我们从2009年4月开始使用它

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

编码对字母表进行排序,以便更常见的字符是那些更容易读、写、说和记住的字符。使用小写字母是因为它更容易阅读


在我们决定使用z-base-32之前,我问过你。

我不太明白,你想让10231变成IO23I吗?如果你使用良好的阅读字体,字符将是可分辨的。你想要清晰的字符是为了什么?如果这是一个网站的密码,那么我建议你不要花太多时间去烦恼,很多人要么登录一次(复制+粘贴)并将其更改为常用密码,要么让浏览器为他们记住密码。就我个人而言,我随机为每个新站点生成凭据,并将它们存储在加密的文件系统中。里面有130多个…@Skurmedel:嗯,没有。。。我认为这不太可读。在这里让我把问题改写一下,解释得再清楚一点。@MattH:我在第一轮中就漏掉了这一点,因为我不想让每个人都为一个大故事感到厌烦。。。但我想这很重要:)更新了问题。我想你完全误解了我,是的,模糊的版本不太可读。我的意思是,如果读取原始标识符是一个问题,那么字体可能是罪魁祸首。我认为消除外观别名的唯一原因是,如果你想确保它不被误解,如果它显示在你无法触及的地方,比如电子邮件程序或写在一张纸上。也考虑使用小写字母:<代码> IO < /代码>看起来不像<代码> 10代码> > <代码> IO < /代码>。但是
l
看起来像
1
。没有赢家。小写的
i
比大写的
i
更容易区分,但是大写的
L
比小写的
L
更容易区分……但是你告诉我你通过电话支持你的客户。所以这不仅仅是字体的问题,也是字符声音的问题。。。或时间:阿尔法、布拉沃、查理……;-)@狼:是的。。有一些他们可以点击的东西,给他们语音,他们可以通过电话重复可能会有所帮助。这个项目失败了,所以。。。。这最终并不重要。这似乎是一个完全合理的答案。为什么要投否决票?这是一个聪明的方法。有一秒钟我以为你没有1:1的映射,但我想这就是你减去最后3个字母的原因;)一个简洁的解决方案。。。但我想我们的用户可能也想互相交流这些代码。我们的网站有“发货”,他们可能希望与内部发票配对。。。所以他们可能需要和他们的会计沟通,或者。。。在某些情况下,也许会和另一个派对。给他们一张这样的表格会把他们搞糊涂,我敢肯定:)是的,这是一个数字ID。我没有通读整篇论文,但听起来很有希望,我同意他们的决定和目标。以后可能需要尝试并实施。