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