算法 如何根据数据库表唯一索引生成唯一的随机字符串

lichcnpul · 2016年04月29日 · 最后由 kirineko 回复于 2016年05月03日 · 9892 次阅读

现有一数据库表 random,表结构如下:

字段 user_id code
类型 bigInt varchar(64)

其中 user_id 是唯一索引,现在需要生成 code,code 是字符串类型,同样要求唯一。那么如何根据 user_id 来生成随机字符串呢?

数据表示例如下:

字段 user_id code
12345782 "待定"
12345793 "待定"
... ...

【问题补充】

经过参考网上这篇文章:产生唯一随机码的方法分析,但是仍然觉得产生的方法不够自然啊 QwQ

#2 楼 @karloku #1 楼 @king1990_cool 也考虑过 uuid 这些,可是我希望控制随机码的长度,最好能在 6-10 位左右

SecureRandom.hex(n),结果是 2n 位

位数太少的话,当数据达到一定的时候就容易碰撞。应该很多随机数的方法都能满足你的需求。如果你的数据量达到随机数可能没法满足的情况,估计也不会用 mysql 了。建议用 mongo 一类的。mongo 的_id 的产生算法就是一种不会有重复字符串产生的方法

6 楼 已删除
"#{user_id.to_s(36)}#{SecureRandom.base58}"[0, 10]

这个肯定能保证唯一性吧,而且 code 也不会被轻易猜测出来

楼上正解

谢谢,已经用 hashids 解决,thx

#8 楼 @quakewang 谢谢,已经用 hashids 解决,thx

需要 登录 后方可回复, 如果你还没有账号请 注册新账号