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

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

3
这个链接是关于Ruby语言中的SecureRandom模块的文档,其中介绍了urlsafe_base64方法。 - Colonel Panic
好问题 - 这些需要有多随机? - Neil Slater
不需要太随意,因为它们只是零件的代码。 - Ninja2k
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" }

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

有没有办法在这里添加一个新行,以便每个值都出现在单独的一行上? - Ninja2k
这将每个字符添加到新行,但我需要每个8位数字值单独成行。 - Ninja2k
这个可以正常工作,但是你必须删除 output="" 才能使其正常运行。 - Ninja2k

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

这是随机生成的内容,但不会重复使用任何数字/字母,因此它不能覆盖所有可能的字符串。

不要重复使用任何数字/字母!哎呀! - Neil Slater
1
这给了我一个语法错误,期望关键字_end randomer = ('a'..'z').to_a + ('0'..'9').to_a).sample( length ).join ^ - Ninja2k
@Ninja2k。打错字了,现在已经修正了。感谢您让我知道。 - Neil Slater
1
它并没有使用所有可能的组合。对于您的使用,当您有几十种产品时(当您有613种产品时,两个产品具有相同代码的概率为50/50,除非您清除重复!),这将开始变得重要。其他帖子可以让您拥有数万个具有相同8个字母的产品... - Neil Slater

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

享受。


我该如何将这个整合到我的当前公式中? - Ninja2k

2
所有数字和字母都在36进制中使用:
max = 36**8
500.times.map{ rand(max).to_s(36).rjust(8,'0') } #rjust pads short strings with '0'

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接