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

如何生成一个只包含AZ 0-9字符伪随机字符串,像没有"+""/""=" SecureRandom.base64一样0-9 ? 例如:

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

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

即使是蛮力也很容易:

 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的回答中可以看出,这可以简化一点。)