使用uuidtools在Rails中生成一个简短的UUID字符串

Sid*_*rth 16 ruby uuid ruby-on-rails-3

我必须生成一个唯一的随机字符串,该字符串将存储在数据库中.为此,我使用了"uuidtools"宝石.然后在我的控制器中添加了以下行:

require "uuidtools"
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器创建方法我已经声明了一个'temp'变量并生成一个独特的随机'uuid'字符串,如下所示:

temp=UUIDTools::UUID.random_create
Run Code Online (Sandbox Code Playgroud)

这是创建一个像这样的字符串:

f58b1019-77b0-4d44-a389-b402bb3e6d50
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我必须缩短它,最好在8-10个字符之内.现在我该怎么办?是否可以传递任何参数使其成为理想的长度字符串?

提前致谢...

Dog*_*ert 40

你不需要uuidtools.您可以使用安全随机.

[1] pry(main)> require "securerandom"
=> true
[2] pry(main)> SecureRandom.hex(20)
=> "82db4d707c4c5db3ebfc349da09c991b7ca0faa1"
[3] pry(main)> SecureRandom.base64(20)
=> "CECjUqNvPBaq0o4OuPy8RvsEoCY="
Run Code Online (Sandbox Code Playgroud)

传递45hex将分别生成8个10字符的十六进制字符串.

[5] pry(main)> SecureRandom.hex(4)
=> "a937ec91"
[6] pry(main)> SecureRandom.hex(5)
=> "98605bb20a"
Run Code Online (Sandbox Code Playgroud)

  • SecureRandom实际上有一个`#uuid`方法,可以生成符合RFC 4122的UUID. (8认同)
  • @Siddharth,无需下载,只需在使用此方法之前添加`require'securerandom'.这是在Ruby 1.9.3的stdlib中. (2认同)
  • @ Siddharth的要求之一是独特性.我很确定`#hex`和`#base64`方法只能保证随机性.正如@Duke所说,"#uuid"是更好的选择. (2认同)