4

到目前为止,我有以下代码,它只生成字母。我正在寻找字母和数字

#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
4

5 回答 5

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" }

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

于 2013-04-03T15:03:39.333 回答
3
(('a'..'z').to_a + ('0'..'9').to_a).sample( 8 ).join

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

于 2013-04-03T15:03:48.630 回答
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

享受。

于 2013-04-03T15:02:55.517 回答
2

使用SecureRandom.hex(10)他在 0-9 和 af 中生成字母和数字

或者

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

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

于 2013-04-03T15:14:01.517 回答
2

所有数字和字母都以 36 为基数使用:

max = 36**8
500.times.map{ rand(max).to_s(36).rjust(8,'0') } #rjust pads short strings with '0'
于 2013-04-03T15:15:05.843 回答