2015-10-17 59 views
0

我正在创建一个程序,生成每个包含10个字母数字字符的唯一代码,但我想知道是否有一个有效的算法。我使用random.choice函数来确定这些代码是否已经存在于列表中,但这样效率很低。独特的固定长度代码的高效生成

我已经研究了带有SHA1索引的哈希,所以没有发生冲突。但是,生成的哈希码不具有十个字符的固定长度。我怎么能做同样的产生10个字符的结果?请不要建议切片。这会增加碰撞的机会。

+0

你需要多少个代码?你是否事先知道你需要多少? –

+0

@StefanPochmann不,客户端将输入要生成的代码数量。 –

+0

为什么“不”?那么你在生成它们之前确实有这个数字,不是吗? –

回答

0

你可以看看uuid模块,它完全解决了这个问题。 如果你坚持要有固定长度的代码,我会散列uuid的输出(例如sha1)并选择第一个字节n

+0

会选择第一个'n'字节增加碰撞的几率? –

+0

是的,因为n字节中的可能性较小。与选择uuid的前几个字节相比,哈希会降低概率。 – Zah

+0

选择每个字段的前几个字节会更好,但是稍微小一点,而且一般性较差。 – Zah