2015-10-17 40 views
0

我正在創建一個程序,生成每個包含10個字母數字字符的唯一代碼,但我想知道是否有一個有效的算法。我使用random.choice函數來確定這些代碼是否已經存在於列表中,但這樣效率很低。獨特的固定長度代碼的高效生成

我已經研究了帶有SHA1索引的哈希,所以沒有發生衝突。但是,生成的哈希碼不具有十個字符的固定長度。我怎麼能做同樣的產生10個字符的結果?請不要建議切片。這會增加碰撞的機會。

+0

你需要多少個代碼?你是否事先知道你需要多少? –

+0

@StefanPochmann不,客戶端將輸入要生成的代碼數量。 –

+0

爲什麼「不」?那麼你在生成它們之前確實有這個數字,不是嗎? –

回答

0

你可以看看uuid模塊,它完全解決了這個問題。 如果你堅持要有固定長度的代碼,我會散列uuid的輸出(例如sha1)並選擇第一個字節n

+0

會選擇第一個'n'字節增加碰撞的機率? –

+0

是的,因爲n字節中的可能性較小。與選擇uuid的前幾個字節相比,哈希會降低概率。 – Zah

+0

選擇每個字段的前幾個字節會更好,但是稍微小一點,而且一般性較差。 – Zah