不重复的 10 位数的订单 ID

2014-10-31 12:23:02 +08:00
 domino
如何不重复的10位数的订单 ID

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

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

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

order_id = encrypt(secret_key, serial_id)

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

serial_id = decrypt(secret_key, order_id)

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

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

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

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

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

© 2021 V2EX