1
leyle 2014-10-31 12:46:04 +08:00 1
这个要看你的业务需求,比如你每日的交易量,一个月的交易量,一年的交易量,是要求永远不重复,还是说一段时间内不重复。
如果是要求永远不重复,并且每日交易量不大于100 的话,按照 yyyymmdd+两位数字(0~99) 如果业务在订单号超过 9999999999 之前就不存在了,那就从 0 开始递增。 否则,你为啥子要把订单号这么敏感的信息设定的长度那么短。 |
2
leyle 2014-10-31 12:47:46 +08:00
以前做过的银行里面的订单号,一般是 20 位长, yyyymmdd+12顺序数。
|
4
sneezry 2014-10-31 12:56:23 +08:00
时间戳转16进制,位数不够后面补随机数
|
6
domino OP 原本是写不重复的,但用到毫秒时间. 客户说太长难记.
要求要短一点 |
7
ipconfiger 2014-10-31 13:08:44 +08:00 1
对分布式系统来说,10位的ID很难做到不重复,除非你用自增id
|
8
7654 2014-10-31 13:18:59 +08:00
两位数年份+两位数月份+两位数周别+4位流水码,这样一周内交易量没有9999肯定不重复的,16进制都用不上
|
9
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) 至于加密算法应该有很多。 |
10
nomaka 2014-10-31 13:53:28 +08:00
弄张表主键自增啊 yahoo就这么做的貌似
|
11
akstrom 2014-10-31 13:56:57 +08:00
每天多少订单量?以前设计过一个8位数的
|
12
domino OP 做的是报名系统.一个活动约100-200 人.有名额限制.
报名者一次可填写多人报名资料.希望每笔资料都有一个订单序号. 一天差不多会有10-20 个活动一起跑. |
13
chasion 2014-10-31 14:07:26 +08:00
就用递增呗,从1000000000
|
15
lygmqkl 2014-10-31 14:49:36 +08:00
@ipconfiger 分布式系统只能 自增 或者建立一个表存储上一次的字段,read and ++
|
16
shuson 2014-10-31 14:57:15 +08:00 1
|
17
ren2881971 2014-10-31 15:19:39 +08:00
用时间戳+随机数啊。
|
19
akstrom 2014-10-31 16:58:49 +08:00
全数字还是可以数字+字母?
|
20
wy315700 2014-10-31 17:01:52 +08:00
short_uuid
|
21
ooxxcc 2014-10-31 17:05:39 +08:00
那个。。为啥订单号需要记的。。
|
22
domino OP 因为要用订单号码去发送礼物.
我也认为没人会用头脑记编号.都会用笔抄. 不过客户就这样坚持.要短才方便他们作业 |
23
staticor 2014-10-31 18:06:37 +08:00
时间加uid的增量, 取整数后再加一个简单的数学函数transform.
(存在反函数能寻原值的) 比如tan(x) 1/x 之类的.. |
24
Smartype 2014-10-31 20:31:12 +08:00
别想那么复杂,当然也没有那么好的办法。
1. 自增 2. 随机数(或者时间戳+随机数)检查是否存在,如果重复就继续生成随机数 真的没有别的办法。 |
25
rwalle 2014-10-31 21:08:27 +08:00 via Android
如果楼主又要短又要不重复,如果可能的话建议楼主直接改成字母+数字组合。不过还要看具体如何使用,以及是否一定要用数字。
|
26
iam36 2014-10-31 21:18:36 +08:00 via Android
Yyyymmddhhmmss xxxxxxxxxx
X从1开始自然递增,每日复位。 给苹果公司也够用了 |
27
domino OP 如果用自增量当order_sn,
是否一定先 insert , 取得 LAST_INSERT_ID后 在 (yyyymmdd+ id) UPDATE order_sn 呢. 有办法一句sql 完成吗. id , order_sn, user_id --------------------- 1 ,201411010001 ,123 2 ,201411010002 ,456 |
28
lowkey 2014-11-01 16:47:56 +08:00
能用字母的话就好办 0-9 加上 a-z 加上A-Z 变成 62进制
|