【发布时间】:2013-01-28 05:44:11
【问题描述】:
我正在生成一个唯一且随机的字母数字字符串段来表示将由用户生成的某些链接。为此,我使用 "uuid" 数字来确保它的唯一性和随机性,但是,根据我的要求,字符串的长度不应超过 5 个字符。所以我放弃了这个想法。
然后我决定使用 ruby 的随机函数和当前时间戳生成这样一个字符串。 我的随机字符串的代码是这样的:-
temp=DateTime.now
temp=temp + rand(DateTime.now.to_i)
temp= hash.abs.to_s(36)
我所做的是将当前日期时间存储在一个临时变量中,然后生成一个随机数,将当前日期时间作为参数传递。然后在第二行中实际将当前日期时间和随机数加在一起,形成一个唯一且随机的字符串。
很快我发现,当我在两台不同的机器上测试我的应用程序并同时发送请求时,经过 100 多次试验,它生成了一次相同的字符串(虽然很少见)。
现在我想在将 to_s(36) 传递到 temp 变量之前,我应该再添加一个参数,例如 mac 地址或客户端 IP 地址。但无法弄清楚如何做到这一点,即使那样它是否会是独一无二的......
谢谢....
【问题讨论】:
-
5 个字符(40 位)是相当少量的数据。对于小型顺序计数器来说没问题,但对于“随机唯一”数字 - 不是那么多。
-
在rails中,你可以通过调用
request.remote_ip获取客户端ip。如何在散列逻辑中编织它取决于您。 -
@SergioTulentsev 我必须让一个字符串看起来有点像...bcoz它将代表一个链接,根据请求将重定向到一个或多个长网址...
-
位链接不是随机的,AFAIK。它们是简单的 base-62 数字。
-
这就是 5 个字符的问题。使用更多字符。
标签: ruby-on-rails ruby