我目前正在为“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的随机字符串。它不是很可定制的,但它又短又干净。

其他回答

我喜欢使用的另一种方法:

 rand(2**256).to_s(36)[0..7]

如果您真的对正确的字符串长度有疑问,请添加ljust:

 rand(2**256).to_s(36).ljust(8,'a')[0..7]

使用此方法,您可以传入一个很短的长度。默认设置为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

使用“SafeRandom”Gem GithubLink

它将提供生成Rails2、Rails3、Rails4和Rails5兼容的随机值的最简单方法。

require 'sha1'
srand
seed = "--#{rand(10000)}--#{Time.now}--"
Digest::SHA1.hexdigest(seed)[0,8]

Array.new(n){[*“0”..“9”].sample}.join,其中n=8。

广义:Array.new(n){[*“A”..“Z”,*“0”..“9”].sample}.join等。

来自:“生成伪随机字符串A-Z,0-9”。