Tyl*_*ler 2 ruby hash ruby-on-rails ruby-on-rails-4
我需要创建一个与数据库中的ID对应的唯一哈希.我是否应该生成一个随机的字母数字哈希,然后将其存储在数据库中的特定行中?
现在这就是我正在做的事情,但我需要确保人们无法弄清楚创建这些哈希值的算法.
params[:slug].to_i(36)
id.to_s(36)
Run Code Online (Sandbox Code Playgroud)
实际上很简单:
enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation
enum.next.join
=> "qmrbSTBu6gGpMs4Jh0VZAiI9cW58jxoDz2NwL1eUClaFtdRXfPEOYQnvkKy7H3"
Run Code Online (Sandbox Code Playgroud)
这提供了
factorial(62)uniq字符串/ uids.(非常多!)
permutation如果你想要更短的字符串/ uid,你也可以提供一个限制,但这会减少你可以生成的uniq字符串/ uids的数量.
enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation(13)
enum.next.join
=> "A1BD3qljTKpOm"
Run Code Online (Sandbox Code Playgroud)
如果您担心安全性,那么使用安全的随机种子对阵列进行洗牌:
ary = [*'a'..'z', *'A'..'Z', *0..9].shuffle(random: SecureRandom.hex(23).to_i(16))
enum = ary.permutation(13)
enum.next.join
=> "9bNmv82ruBKjq"
Run Code Online (Sandbox Code Playgroud)
唯一性是保证(因此有限),没有调用数据库或测试唯一性的开销.
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |