如何在Ruby中生成随机混合字母和数字

时间:2013-04-03 14:56:45

标签: ruby

到目前为止,我有以下代码,这只会生成字母。我希望得到字母和数字

#Generate random 8 digit number and output to file
    output = File.new("C:/Users/%user%/Desktop/Strings.txt", "w")

    i = 0
     while i < 500
        randomer = (0...8).map{65.+(rand(26)).chr}.join
        output << randomer
        output << "\n"
        i = i+1
     end

    output.close

5 个答案:

答案 0 :(得分:3)

这个怎么样:

def random_tuple(length)
    letters_and_numbers = "abcdefghijklmnopqrstuvwxyz0123456789"
    answer = ""
    length.times { |i| answer << letters_and_numbers[rand(36)] }
    answer
end

output = ""
500.times { |i| output << random_tuple(8) + "\n" }

你也可以让函数附加换行符,但我认为这种方式更为通用。

答案 1 :(得分:3)

(('a'..'z').to_a + ('0'..'9').to_a).sample( 8 ).join

随机,但不会重复使用任何数字/字母,因此它不会涵盖所有可能的字符串。

答案 2 :(得分:2)

你可以做这样的事情

i = 0
while i < 500
    randomer = (1..8).map { (('a'..'z').to_a + ('0'..'9').to_a)[rand(36)] }.join
    output << randomer
    output << "\n"
    i = i+1
end

output.close

享受。

答案 3 :(得分:2)

在0-9和a-f

中使用SecureRandom.hex(10)生成的字母和数字

SecureRandom.base64.delete('/+=')[0, 8]

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html

答案 4 :(得分:2)

所有数字和字母用于基数36:

max = 36**8
500.times.map{ rand(max).to_s(36).rjust(8,'0') } #rjust pads short strings with '0'