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

don*_*ald 34 ruby ruby-on-rails-3

如何修复此代码,以便以小写形式生成唯一的随机字母和数字?

api_string = (0...32).map{65.+(rand(25)).chr}.join    
Run Code Online (Sandbox Code Playgroud)

目前,它只生成字母.

Vas*_*ich 83

如果您使用的是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"
Run Code Online (Sandbox Code Playgroud)

  • 甚至更好的`SecureRandom.urlsafe_base64(长度)` (8认同)
  • 最好使用base64,它也是内置的:SecureRandom.base64(16).gsub(/ = + $ /,'') (5认同)
  • 不是API密钥的问题,但也有方便的urlsafe_base64方法:SecureRandom.urlsafe_base64(16)=>"XpMnLfc3FySd-C4V2Ipxag" (4认同)
  • 这对于简单的需求很方便,但alpha范围仅为af,因此生成的字符串的安全性/复杂性不是很高. (2认同)

ste*_*lag 26

所有字母和数字,这就是数字在基数36中的表示方式.

api_string = Array.new(32){rand(36).to_s(36)}.join
Run Code Online (Sandbox Code Playgroud)


Anu*_*shi 16

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