gpt4 book ai didi

ruby-on-rails - 创建一个唯一的哈希

转载 作者:数据小太阳 更新时间:2023-10-29 08:20:03 24 4
gpt4 key购买 nike

我需要创建一个与数据库中的 ID 相对应的唯一哈希。我是否应该只生成一个随机的字母数字散列,然后将其存储在数据库的特定行中?

现在这就是我正在做的事情,但我需要确保人们无法弄清楚创建这些哈希值的算法。

params[:slug].to_i(36)

id.to_s(36)

最佳答案

2020 年 10 月更新:

不要自作聪明。 UUID 绰绰有余,它们便宜且生成速度快,忘记碰撞,其他故障更有可能发生(方式 WAY!!)。 UUID 背后的想法,有趣的东西。

require 'securerandom'
SecureRandom.uuid
#=> "a62f45ba-292d-425b-fb49-3733b00defe1"

旧答案:

其实很简单:

enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation
enum.next.join
=> "qmrbSTBu6gGpMs4Jh0VZAiI9cW58jxoDz2NwL1eUClaFtdRXfPEOYQnvkKy7H3"

这提供了factorial(62) uniq 字符串/uid。 (数量非常多!)

如果您想要更短的字符串/uid,您还可以限制排列,但这会减少您可以生成的 uniq 字符串/uid 的数量。

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"

唯一性是保证(因此是有限的),没有调用数据库或测试唯一性的开销。

关于ruby-on-rails - 创建一个唯一的哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27584351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com