生成 16 位长度的数字+字母编码组合,如果不使用保存 mysql 时设置 unique,怎么在生成的过程中确保唯一呢?

2020 年 2 月 25 日
 kayseen
4233 次点击
所在节点    Python
20 条回复
kayseen
2020 年 2 月 25 日
比如年前的支付宝的福卡,每张卡都有一个大概 8 位长度的编码,且保证编码唯一,组合的可能性肯定超过需要的数量,但是对于重复性的处理是咋搞的啊
shintendo
2020 年 2 月 25 日
参考 uuid 原理
Varobjs
2020 年 2 月 25 日
13 位时间戳,map 映射定义好的字母表,➕几个随机字母数字
lxml
2020 年 2 月 25 日
mini 版 雪花算法啊
janxin
2020 年 2 月 25 日
搜索关键词“分布式 唯一 ID”
littlewing
2020 年 2 月 25 日
分布式唯一 ID 生成器
loginbygoogle
2020 年 2 月 25 日
多此一举
mostkia
2020 年 2 月 25 日
我生成唯一 id 的算法是一般都是 MD5 (时间戳+盐)
虽然依旧有极小概率会出现重复,但我感觉我的一生里应该不会碰到一次,所以没必要太过纠结
formatex
2020 年 2 月 25 日
不要求随机性的话这样:
0000
0001
....
aaaa
aaab
aaac
hihipp
2020 年 2 月 25 日
时间戳 + 用户标识,用 16 位 MD5 摘要算法。
cmdOptionKana
2020 年 2 月 26 日
RedisMasterNode
2020 年 2 月 26 日
xuanbg
2020 年 2 月 26 日
@mostkia
@hihipp 你们这个不行啊,同一毫秒有两个请求咋办呀?

如果不能通过算法保证唯一性,那就只能通过查表保证唯一性了。。。
melkor
2020 年 2 月 26 日
@xuanbg 时间戳加序列号加随机数,碰撞概率足够低即可。真的遇上碰撞就重试。先查表没用,并发问题一样有。
BlackBerry999
2020 年 2 月 26 日
雪花算法生成 ID 靠谱一点
vevlins
2020 年 2 月 26 日
自荐一下文章:分布式唯一 ID https://juejin.im/post/5e43b22251882549361e4be4,不过如果单表就是脱裤子放屁了,设置 unique + 随便一个随机算法成本最小。
ps1aniuge
2020 年 2 月 26 日
使用 [使用保存 mysql 时设置 unique]即可呀。设置 unique + 随便一个随机算法成本最小。
楼上正解。
zunceng
2020 年 2 月 26 日
snowflake + base58
mostkia
2020 年 2 月 26 日
@xuanbg 没看到有盐嘛,单纯时间戳自然不太可靠的。加点佐料啊,哈哈
xpdoh
2020 年 2 月 28 日
base36,时间戳 x7//2020 年起约 120 年,间隔 50 毫秒,随机码 x9//约 10^15 种可能,共 16 位

这是我的方案,又短又不会冲突,能用 120 年,就是这么自信

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/647452

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX