不重复的 10 位数的订单 ID

2014 年 10 月 31 日
 domino
如何不重复的10位数的订单 ID

10个字内,用时间+随机号很像容易碰撞
10165 次点击
所在节点    PHP
28 条回复
leyle
2014 年 10 月 31 日
这个要看你的业务需求,比如你每日的交易量,一个月的交易量,一年的交易量,是要求永远不重复,还是说一段时间内不重复。
如果是要求永远不重复,并且每日交易量不大于100 的话,按照 yyyymmdd+两位数字(0~99)

如果业务在订单号超过 9999999999 之前就不存在了,那就从 0 开始递增。

否则,你为啥子要把订单号这么敏感的信息设定的长度那么短。
leyle
2014 年 10 月 31 日
以前做过的银行里面的订单号,一般是 20 位长, yyyymmdd+12顺序数。
xuyuanp
2014 年 10 月 31 日
@leyle 这样不会暴露交易量嘛
sneezry
2014 年 10 月 31 日
时间戳转16进制,位数不够后面补随机数
jemyzhang
2014 年 10 月 31 日
@xuyuanp 交易量是用来炫耀的,你怕啥^^
domino
2014 年 10 月 31 日
原本是写不重复的,但用到毫秒时间. 客户说太长难记.
要求要短一点
ipconfiger
2014 年 10 月 31 日
对分布式系统来说,10位的ID很难做到不重复,除非你用自增id
7654
2014 年 10 月 31 日
两位数年份+两位数月份+两位数周别+4位流水码,这样一周内交易量没有9999肯定不重复的,16进制都用不上
sc
2014 年 10 月 31 日
加密订单的顺序数(数据库的自增ID),比如,

order_id = encrypt(secret_key, serial_id)

通过订单号查询数据库的时候,解密order_id得到serial_id

serial_id = decrypt(secret_key, order_id)

至于加密算法应该有很多。
nomaka
2014 年 10 月 31 日
弄张表主键自增啊 yahoo就这么做的貌似
akstrom
2014 年 10 月 31 日
每天多少订单量?以前设计过一个8位数的
domino
2014 年 10 月 31 日
做的是报名系统.一个活动约100-200 人.有名额限制.
报名者一次可填写多人报名资料.希望每笔资料都有一个订单序号.
一天差不多会有10-20 个活动一起跑.
chasion
2014 年 10 月 31 日
就用递增呗,从1000000000
limbo0
2014 年 10 月 31 日
@domino 题主这头像和我github上一样哈,差点看错了
lygmqkl
2014 年 10 月 31 日
@ipconfiger 分布式系统只能 自增 或者建立一个表存储上一次的字段,read and ++
shuson
2014 年 10 月 31 日
ren2881971
2014 年 10 月 31 日
用时间戳+随机数啊。
xuyuanp
2014 年 10 月 31 日
@jemyzhang 如果比较炫耀不起来呢。。。。
akstrom
2014 年 10 月 31 日
全数字还是可以数字+字母?
wy315700
2014 年 10 月 31 日
short_uuid

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

https://www.v2ex.com/t/142878

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

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

© 2021 V2EX