生成伪随机字符串A-Z,0-9

时间:2014-09-27 15:06:03

标签: ruby random

如何生成仅包含A-Z0-9的{​​n}字符伪随机字符串,如"+""/""="和{{1} }}?例如:

(0..n).map {(('1'..'9').to_a + ('A'..'Z').to_a)[rand(36)]}.join

5 个答案:

答案 0 :(得分:11)

Array.new(n){[*"A".."Z", *"0".."9"].sample}.join

答案 1 :(得分:1)

即使是蛮力也很容易:

n = 20

c = [*?A..?Z + *?0..?9]
size = c.size
n.times.map { c[rand(size)] }.join
  #=> "IE210UOTDSJDKM67XCG1"

或,无需替换:

c.sample(n).join
  #=> "GN5ZC0HFDCO2G5M47VYW"

应该是否需要。 (我最初有c = [*(?A..?Z)] + [*(?0..?9)],但从@ sawa的回答中可以看出,这可以简化一点。)

答案 2 :(得分:1)

在Rails 5中做到这一点的一种优雅方法(我没有在其他Rails版本中对其进行测试):

SecureRandom.urlsafe_base64(n)

其中n是您想要的位数。

ps:SecureRandom使用一个数组来装入您的字母数字字符串,因此请记住,n 应为您想要的位数+ 1

例如:如果您需要8位字母数字:

SecureRandom.urlsafe_base64(9)

答案 3 :(得分:1)

你可以简单地做如下:

[*'A'..'Z', *0..9].sample(10).join

将数字10改为任意数字即可改变字符串的长度

答案 4 :(得分:0)

要生成一个10到20个字符的随机字符串,包括从A到Z以及数字,总是这样:

require 'string_pattern'

puts "10-20:/XN/".gen