现有一数据库表 random,表结构如下:
其中 user_id 是唯一索引,现在需要生成 code,code 是字符串类型,同样要求唯一。那么如何根据 user_id 来生成随机字符串呢?
数据表示例如下:
【问题补充】
经过参考网上这篇文章:产生唯一随机码的方法分析,但是仍然觉得产生的方法不够自然啊 QwQ
试试 md5?
UUID version 5 ActiveSupport 中的实现:Digest::UUID#uuid_v5
#2 楼 @karloku #1 楼 @king1990_cool 也考虑过 uuid 这些,可是我希望控制随机码的长度,最好能在 6-10 位左右
SecureRandom.hex(n),结果是 2n 位
位数太少的话,当数据达到一定的时候就容易碰撞。应该很多随机数的方法都能满足你的需求。如果你的数据量达到随机数可能没法满足的情况,估计也不会用 mysql 了。建议用 mongo 一类的。mongo 的_id 的产生算法就是一种不会有重复字符串产生的方法
"#{user_id.to_s(36)}#{SecureRandom.base58}"[0, 10]
这个肯定能保证唯一性吧,而且 code 也不会被轻易猜测出来
http://hashids.org/ruby/
楼上正解
谢谢,已经用 hashids 解决,thx
#8 楼 @quakewang 谢谢,已经用 hashids 解决,thx