【发布时间】:2010-09-10 10:33:14
【问题描述】:
我目前正在为 "A" .. "Z" 生成一个 8 字符的伪随机大写字符串:
value = ""; 8.times{value << (65 + rand(25)).chr}
但它看起来并不干净,并且不能作为参数传递,因为它不是单个语句。为了得到混合大小写的字符串 "a" .. "z" 加上 "A" .. "Z",我将其更改为:
value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}
但它看起来像垃圾。
谁有更好的方法?
【问题讨论】:
-
我不明白你为什么关心“因为它不是一个单一的语句,它不能作为参数传递”。为什么不把它变成一个实用程序或辅助方法呢?
-
假设有一个方法可以重置用户的密码并且它有一个新密码的参数。我想传入一个随机字符串,在上面的代码中我需要一个 tmp 变量,而在下面的单个语句示例中,我可以将整个事情作为一个衬垫来完成。当然,从长远来看,实用方法可能会很好,尤其是如果我需要类似的地方和那里,但有时你只是希望它到位,一次完成。
-
不,您不必使用临时变量。试试这个:
reset_user_password!(random_string)def random_string; SecureRandom.urlsafe_base64(20) end -
8 个字母是可耻的弱密码。鉴于 md5sum,现代 PC 可以恢复 30 seconds 中的密码。再长点儿怎么样
securerandom.urlsafe_base64 -
为什么会有这么多答案?并不是说这不是一个有用的问题,但我很好奇它是如何引起注意的。