2013-07-02 42 views
3

我更喜歡生成唯一的隨機字母數字字符串以追加到我的UID的末尾。生成隨機字符串以追加到UID

到目前爲止,我在類庫中找到的最接近的是Random類,該類生成的數字是次好的。

我至今是:

getNextRandomNumber 
^(((rand nextValue)/
    (Time now milliSeconds asInteger/Time now minutes asInteger 
    + (Time now hour24 asInteger)) asInteger)). 

rand是一個類變量,初始化爲:

initialize 
    rand := Random new. 

這似乎寫得很糟糕。但我不確定還有什麼要做。

+0

嘗試http://smalltalk.gnu.org/blog/sblinn/fun-md5-and-random –

回答

6

您使用哪種方言?

在Pharo中,我通常在String class中實現一種叫做#randomOfSize:的方法。例如:

String class >> randomOfSize: anInteger 

^ self streamContents: [ :s | 
    anInteger timesRepeat: 
     [ s nextPut: (Character codePoint: (97 to: 122) atRandom) ] ] 

您可以調整字符代碼以獲取所需字符的間隔。

然後,生成8個字符長的隨機字符串,你可以這樣做:

String randomOfSize: 8 

在菲羅,您還可以使用UUID類,如下所示:

UUID new printString 

希望它幫助!

+1

這會創建一個只包含小寫字符的隨機字符串,而不是字母數字字符串。 ASCII 97到122是$ a到$ z。 –

+0

所以UUID類...它如何保持唯一性?我是否需要擔心這個問題,還是已經全部自動處理了?你的個人實現是否處理唯一性? – MrDuk

+0

UUID類的類評論(Pharo 1.4)說:生成UUID John M McIntosh的類[email protected] 請參閱http://www.webdav.org/specs/draft-leach-uuids- guids-01.txt 如果一個插件不存在,那麼我們生成一個UUID版本4類型的GUID; http://en.wikipedia.org/wiki/Uuid#Version_4_.28random.29 –