2010-04-16 101 views
5

與所有開發人員一樣,我們經常處理某種標識符作爲我們日常工作的一部分。大多數情況下,這是關於錯誤或支持票。我們的軟件在檢測到一個bug後,會創建一個名稱從時間戳和版本號格式化的包,這是創建合理唯一標識符以避免混合包的廉價方法。例如:「Bug Report 20101214 174856 6.4b2」。生成易於記憶的隨機標識符

我的大腦只是不擅於記憶數字。我想要的是一個簡單的方法生成易於記憶的字母數字標識符

這大約需要5分鐘掀起的算法像蟒蛇以下,產生中間有用的結果:

import random 

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

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 2010-04-16 12:15:14

+0

哈,好!我會牢記它! – 2010-04-16 12:25:21

回答

2

我不知道,這個回答你的問題,但也許想想你需要多少獨特的Bug號。

只需用類似「BX-3D」四個字母的大寫字母數字鍵,你可以有36^4 = 170萬bug報告。

編輯:我剛纔看到你的樣品。如果你使用音節而不是輔音和元音,結果可能會大大改善。

2

正如你所說,你的樣品是相當不錯的。但是,如果你想要隨機標識符,可以很容易地記住,那麼你不應該混合使用字母數字和數字字符。相反,你可以選擇用一些數字來後綴一個字母數字字符串。

另外,在你的例子中,你明智地排除了'o',但忘記了'l',你很容易與'1'混淆。我建議你刪除'l'。 ;-)