如何生成仅包含A-Z
,0-9
的{n}字符伪随机字符串,如"+"
,"/"
,"="
和{{1} }}?例如:
(0..n).map {(('1'..'9').to_a + ('A'..'Z').to_a)[rand(36)]}.join
答案 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