我的数据库中有一堆项目。每个都分配了一个唯一的 ID。我想缩短这个 ID 并将其显示在页面上,这样如果我的用户需要就特定项目联系我们(通过电话),他可以给我们缩短的 ID,而不是一个很大的数字。类似于 SKU,在 NCIX 等网站上.因此,我考虑将其编码为 base 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')
关于python - 可区分的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082812/