尝试使用 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/