6

与所有开发人员一样,我们在日常工作中不断处理某种标识符。大多数时候,它是关于错误或支持票的。我们的软件在检测到错误后会创建一个包,该包的名称由时间戳和版本号格式化,这是一种创建合理唯一标识符以避免混淆包的廉价方法。示例:“错误报告 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

这已经很好了,但我觉得仍然很容易忘记它们的确切拼写方式,所以如果你走到同事的办公桌前想查一下其中的一个,仍然可能会遇到困难。

我知道对文本执行三元组分析的算法(比如你用德语给他们一整本书)并且可以生成看起来和感觉像德语单词的字符串,因此通常更容易处理。但是,这需要大量数据,并且稍微不适合为此目的嵌入应用程序中。

您知道解决此问题的任何已发布算法吗?

谢谢!

卡尔

4

2 回答 2

2

我不确定这是否能回答您的问题,但也许考虑一下您需要多少个唯一的错误报告编号。

只需使用四位大写字母数字键,例如“BX-3D”,您就可以获得 36^4 = 170 万个错误报告。

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

于 2010-04-16T12:24:07.820 回答
2

正如您所说,您的样品非常好。但是,如果您想要容易记住的随机标识符,则不应混合字母数字字符和数字字符。相反,您可以选择后缀带有几个数字的字母数字字符串。

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

于 2010-04-16T12:45:38.807 回答