我该如何修复这段代码,以便它生成小写字母和数字的唯一随机组合?
api_string = (0...32).map{65.+(rand(25)).chr}.join
目前,它只生成字母。
我该如何修复这段代码,以便它生成小写字母和数字的唯一随机组合?
api_string = (0...32).map{65.+(rand(25)).chr}.join
目前,它只生成字母。
如果你正在使用 Ruby 1.9.2,你可以使用 SecureRandom:
irb(main):001:0> require 'securerandom'
=> true
irb(main):002:0> SecureRandom.hex(13)
=> "5bbf194bcf8740ae8c9ce49e97"
irb(main):003:0> SecureRandom.hex(15)
=> "d2413503a9618bacfdb1745eafdb0f"
irb(main):004:0> SecureRandom.hex(32)
=> "432e0a359bbf3669e6da610d57ea5d0cd9e2fceb93e7f7989305d89e31073690"
SecureRandom.urlsafe_base64(length)
。 - Dennis所有字母和数字都可以用36进制表示数字。
api_string = Array.new(32){rand(36).to_s(36)}.join
8次循环,每次从0到9和小写字母a到z中随机选取一个字符,并合并成字符串。
'0'..'9'
是一个范围,而 *
则是展开运算符。它将范围的元素拆分成单个项,并作为一组返回,因此基本上 *
帮助您分离元素,以便可以使用 sample
方法对其进行采样。 - Anuja Joshi> SecureRandom.base58(24)
> "Zp9N4aYvQfz3E6CmEzkadoa2"
我不记得是从哪里看到的,但今天早上我不知怎么看到了这个内容。
l,m = 24,36
rand(m**l).to_s(m).rjust(l,'0')
该技术会创建一个0到36的24次方之间的随机数,然后将其转换为基于36的字符串(即0-9和a-z)。
rand(36**len).to_s(36).length == len
一直成立,否则您需要执行 rand(36**len).to_s(36).rjust(len, '0')
。 - Cameron MartinPOSSIBLE = (('A'..'Z').to_a + (0..9).to_a)
api_string = (0...32).map { |n| POSSIBLE.sample }.join
ActiveSupport::SecureRandom.hex(32)
((('a'..'z').to_a + (0..9).to_a)*3).shuffle[0,(rand(100).to_i)].join
rand(100)
替换为rand(n)
,其中n
是所需字符串的最大长度。CHARS = (?0..?9).to_a + (?a..?z).to_a
api_string = 32.times.inject("") {|s, i| s << CHARS[rand(CHARS.size)]}
require 'string_pattern'
puts "32-50:/xN/".gen
你可以使用36进制的毫秒时间
示例:
Time.now.to_f.to_s.gsub('.', '').ljust(17, '0').to_i.to_s(36) # => "4j26l5vq964"
查看这个答案以获得更好的解释: https://dev59.com/4VnUa4cB1Zd3GeqPWgJF#72738840