生成易于记忆的随机标识符

6
作为开发人员,我们经常处理各种标识符作为日常工作的一部分。大多数情况下,这涉及到错误或支持票。我们的软件在检测到错误时,会创建一个包,其名称格式由时间戳和版本号组成,这是一种廉价的创建合理唯一标识符以避免混淆包的方法。例如:“Bug Report 20101214 174856 6.4b2”。
我的大脑并不擅长记忆数字。我希望有一种简单的方式可以生成容易记忆的字母数字标识符。
使用Python编写以下算法只需要约5分钟,就可以产生半可用的结果:
import random

vowels = 'aeiuy' # 0 is confusing
consonants = 'bcdfghjklmnpqrstvwxz'
numbers = '0123456789'

random.seed()

for i in range(30):
    chars = list()
    chars.append(random.choice(consonants))
    chars.append(random.choice(vowels))
    chars.append(random.choice(consonants + numbers))
    chars.append(random.choice(vowels))
    chars.append(random.choice(vowels))
    chars.append(random.choice(consonants))
    print ''.join(chars)

结果如下所示:
re1ean
meseux
le1ayl
kuteef
neluaq
tyliyd
ki5ias

这已经很不错了,但我觉得仍然很容易忘记它们的拼写,所以如果你走到同事的桌子旁想查找其中之一,仍然存在困难的可能性。
我知道有些算法可以对文本进行三元分析(比如你给它一本德语书),并且可以生成看起来和感觉像德语单词的字符串,因此通常更容易处理。不过这需要大量数据,并且稍微不太适合嵌入到只为此目的而编写的应用程序中。
您知道有没有任何已发布的算法可以解决这个问题吗?
谢谢!
卡尔

5
在开始考虑生成随机单词之前,您应该阅读这篇文章:http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx - Prutswonder
哈哈,好的!我会记住的! - Carl Seleborg
2个回答

2

我不确定这是否回答了你的问题,但或许可以考虑需要多少个唯一的bug报告编号。

只需使用一个四个大写字母数字键,如“BX-3D”,就可以有36^4=170万个bug报告。

编辑:我刚看到你的示例。如果使用音节而不是辅音和元音,结果可能会大大改善。


2

正如你所说,你的示例非常好。但是如果你想要容易记忆的随机标识符,那么你不应该混合字母和数字字符。相反,你可以选择在字母数字字符串后缀加上几个数字。

另外,在你的示例中,你明智地排除了 'o',但忘记了 'l',这很容易与 '1' 混淆。我建议你也删除 'l'。 ;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接