2013-07-02 43 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 –