![]() | 1 leyle 2014-10-31 12:46:04 +08:00 ![]() 这个要看你的业务需求,比如你每日的交易量,一个月的交易量,一年的交易量,是要求永远不重复,还是说一段时间内不重复。 如果是要求永远不重复,并且每日交易量不大于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 ![]() 对分布式系统来说,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 ![]() |
![]() | 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 47jm9ozp 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进制 |