我目前正在为“A”生成一个8字符伪随机大写字符串。。“Z”:

value = ""; 8.times{value  << (65 + rand(25)).chr}

但它看起来不干净,而且不能作为参数传递,因为它不是一个单独的语句。要获取混合大小写字符串“a”。。“z”加“A”。。“Z”,我将其更改为:

value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}

但它看起来像垃圾。

有人有更好的方法吗?


当前回答

我使用它生成保证最大长度的随机URL友好字符串:

string_length = 8
rand(36**string_length).to_s(36)

它生成小写a-z和0-9的随机字符串。它不是很可定制的,但它又短又干净。

其他回答

使用此方法,您可以传入一个很短的长度。默认设置为6。

def generate_random_string(length=6)
  string = ""
  chars = ("A".."Z").to_a
  length.times do
    string << chars[rand(chars.length-1)]
  end
  string
end

我只是编写了一个小gemrandom_token来为大多数用例生成随机令牌,享受~

https://github.com/sibevin/random_token

在ruby 1.9中,可以使用Array的choice方法,该方法返回数组中的随机元素

这几乎是丑陋的,但也许是朝着正确的方向迈出的一步?

 (1..8).map{|i| ('a'..'z').to_a[rand(26)]}.join

如果需要,创建空字符串或预修复:

myStr = "OID-"

使用以下代码用随机数填充字符串:

begin; n = ((rand * 43) + 47).ceil; myStr << n.chr if !(58..64).include?(n); end while(myStr.length < 12)

笔记:

(rand * 43) + 47).ceil

它将从48-91(0,1,2..Y,Z)生成随机数

!(58..64).include?(n)

它用于跳过特殊字符(因为我不想包含它们)

while(myStr.length < 12)

它将生成总共12个字符的字符串,包括前缀。

样本输出:

"OID-XZ2J32XM"