生成带有小写字母和数字的唯一随机字符串



如何修复此代码,使其生成小写的唯一随机字母和数字?

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"

所有字母和数字,这就是以 36 为基数的数字表示方式。

api_string = Array.new(32){rand(36).to_s(36)}.join

8.times.map { [*'0'..'9', *'a'..'z'].sample }.join

较新版本的Ruby支持SecureRandom.base58,它将为你提供比十六进制更密集的令牌,没有任何特殊字符。

> SecureRandom.base58(24)
> "Zp9N4aYvQfz3E6CmEzkadoa2" 

这里有一种方法可以做到这一点:

POSSIBLE = (('A'..'Z').to_a + (0..9).to_a)
api_string = (0...32).map { |n| POSSIBLE.sample }.join

如果您有可用的活动支持,您还可以执行此操作以创建类似 API 密钥的字符串:

ActiveSupport::SecureRandom.hex(32)

我忘记了从哪里来的,但我今天早上不知何故读到了这篇文章

l,m = 24,36
rand(m**l).to_s(m).rjust(l,'0')

它创建从 0 到 Power(36,24) 的随机数,然后将其转换为 base-36 字符串(即 0-9 和 A-Z)

CHARS = (?0..?9).to_a + (?a..?z).to_a
api_string = 32.times.inject("") {|s, i| s << CHARS[rand(CHARS.size)]}
((('a'..'z').to_a + (0..9).to_a)*3).shuffle[0,(rand(100).to_i)].join

rand(100)替换为rand(n)其中n是所需字符串的最大长度。

这将生成一个较低的随机字符串,从 32 到 50 个字符,包括数字和字母,两者:

require 'string_pattern'
puts "32-50:/xN/".gen

使用Ruby语言的SecureRandom。

require 'securerandom' randomstring = SecureRandom.hex(5)

它将生成包含"0-9"和"a-f"的 n*2 随机字符串

您可以使用 redix base 36 的时间(以毫秒为单位)

例: Time.now.to_f.to_s.gsub('.', '').ljust(17, '0').to_i.to_s(36) # => "4j26l5vq964"

看看这个答案可以更好地解释:https://stackoverflow.com/a/72738840/7365329

Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond).to_s(36)

相关内容

  • 没有找到相关文章

最新更新