С ruby 2.5 действительно легко с SecureRandom.alphanumeric
:
len = 8
SecureRandom.alphanumeric(len)
=> "larHSsgL"
Генерирует случайные строки, содержащие A-Z, a-z и 0-9 и, следовательно, должны применяться в большинстве случаев использования. И они генерируются случайным образом, что тоже может быть выгодно.
Редактировать: тест для сравнения с решением, имеющим наибольшее количество голосов:
require 'benchmark'
require 'securerandom'
len = 10
n = 100_000
Benchmark.bm(12) do |x|
x.report('SecureRandom') { n.times { SecureRandom.alphanumeric(len) } }
x.report('rand') do
o = [('a'..'z'), ('A'..'Z'), (0..9)].map(&:to_a).flatten
n.times { (0...len).map { o[rand(o.length)] }.join }
end
end
user system total real
SecureRandom 0.429442 0.002746 0.432188 ( 0.432705)
rand 0.306650 0.000716 0.307366 ( 0.307745)
Таким образом, решение rand
занимает всего около 3/4 времени SecureRandom
. Может иметь значение, если вы генерируете действительно много строк, но если вы просто время от времени создаете какую-то случайную строку, я всегда выбираю более безопасную реализацию (так как ее также проще вызывать и более явную).