ruby - 仅安全随机十六进制数字

标签 ruby ruby-on-rails-3

尝试使用 SecureRandom 类 Rails 生成随机数字。我们能否使用 SecureRandom.hex 创建一个仅包含数字而不含字母的随机数。

例如:

代替

SecureRandom.hex(4)
=> "95bf7267"

应该给

SecureRandom.hex(4)
=> "95237267"

最佳答案

查看 SecureRandom 的 API:http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html

我相信您正在寻找一种不同的方法:#random_number。

SecureRandom.random_number(a_big_number)

由于 #hex 返回一个十六进制数,因此要求随机结果只包含数字字符是不寻常的。

对于基本用例,使用#rand 就足够简单了。

rand(9999)

编辑:

我不知道有哪个库可以生成指定长度的随机数,但写一个似乎很简单。这是我的通行证:

def rand_by_length(length)
  rand((9.to_s * length).to_i).to_s.center(length, rand(9).to_s).to_i
end

#rand_by_length 方法采用指定长度的整数作为参数,并尝试根据长度生成最大位数的随机数。 String#center 用于用随机数字字符填充缺失的数字。最坏情况下为指定长度的每个数字调用#rand。这可能会满足您的需要。

关于ruby - 仅安全随机十六进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12582226/

相关文章:

ruby-on-rails - Activerecord:通过单个查询查找非关联加关联的记录

ruby - Eclipse(在 OS X 10.9 上)默认内置 Ruby 2.0 但需要 1.8.7

ruby-on-rails-3 - 在 Rails 3 应用程序中解析 JSON HTTP 帖子?

ruby-on-rails - 你能为 Ruby on Rails 推荐好的数据网格类/gem 吗?

ruby - 如何在 Markdown 文件中传递和呈现 ruby​​ 变量? gem "redcarpet"

ruby-on-rails - 未初始化常量 ExecJS::Runtimes::RubyRacerRuntime

ruby - 与 splat ruby​​ 连接

ruby-on-rails - 尽管 bundle 安装,但未找到 Ruby Gems

ruby-on-rails - 升级到 Rails 3.2.11 时出现问题:Static_pages#home 中的 ExecJS::RuntimeError

ruby-on-rails-3 - Rails 3 - 如何替换回形针中的现有附件