首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP生成不重复订单号

使用场景:商城、微信支付等生成订单号需求 方法一 比较常见的一种简单方法 使用date()函数,获取当前日期的数字,再配合rand()函数,生成几位随机数。便是一个简单的12位订单号了 <?...当时前面的7位是不会经常变动的(应该是秒数,一秒一次) 所以我们使用substr()函数,截取字符串,从第8位到13位,接着这里会有一个问题,得到的是数字+字母的随机数,如果你需要的订单号可以包含字母,...这里为了纯数字的订单号,所以要继续进行处理。 使用str_split($string, 1)函数,将字符串,以一个字符的长度分割成变量。也就是一个字符一个变量。...而且是基于时间微秒来生成的,重复的可能性非常非常低,之所以加上时间日期,是为了看起来更加统一。

2.7K11

慌:一次订单号重复,差点被开除

经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。...,可是这里的随机数只有两位 在高并发环境下极容易出现重复问题,同时毫秒这一选择也不是很好,在多核CPU多线程下,一定时间内(极小的)这个毫秒可以说是固定不变的(测试验证过),所以这里我先以100个并发测试下这个订单号生成...) 毫秒仅保留三位(缩减长度同时保证应用切换不存在重复的可能) 使用线程安全的计数器做数字递增(三位数最低保证并发800不重复,代码中我给了4位) 更换日期转换为java8的日期类以格式化(线程安全及代码简洁性考量...; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import...java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import

75731
您找到你想要的搜索结果了吗?
是的
没有找到

订单号

订单是整个电子商务的核心, 而订单号就是订单业务中的非常重要的一部分. 订单号的本质就是一个唯一ID, 但又要一定的业务相关性. 1....订单号 订单号与分布式ID稍有不同的是, 分布式ID一般是作为数据主键使用, 订单号是会展示给用户和相关人员的, 这也就有了更严格的要求和规则了. 2.1 订单号规则 我们看下订单号, 需要哪些要求和规则.... ①不重复....不管你的订单号如何设, 需要保证订单在系统内的唯一性. 尤其是在高并发情况下, 不能出现订单号重复的情况. ②安全性....根据时间等信息按一定规则生成随机数, 降低订单重复率. ⑧自增序列. 单位时间内的自增序列. ⑨验证位. 类似身份证信息的验证位, 根据其他各项信息, 生成一位校验位, 提高订单号的安全性.

1.1K20

血的教训 | 一次订单号重复的事故差点被开除

经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。...,可是这里的随机数只有两位 在高并发环境下极容易出现重复问题,同时毫秒这一选择也不是很好,在多核CPU多线程下,一定时间内(极小的)这个毫秒可以说是固定不变的(测试验证过),所以这里我先以100个并发测试下这个订单号生成...) 毫秒仅保留三位(缩减长度同时保证应用切换不存在重复的可能) 使用线程安全的计数器做数字递增(三位数最低保证并发800不重复,代码中我给了4位) 更换日期转换为java8的日期类以格式化(线程安全及代码简洁性考量...; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import...java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import

61540

血的教训 ,一次订单号重复的事故我差点被开除

订单命名的几种规则总结: 不重复:这点我相信大家都懂,必须全局唯一 安全性:订单号需要做到不容易被人为的猜测或者推测出来,例如订单号就是流水号的话,那么别人就很容易从订单号推测出公司的整体运营情况。...禁用随机码:很多人分析生成订单号的时候,第一个念头肯定是不重复唯一性,那么第二个念头可能就是安全性,想要同时满足前两者,很容易想到使用随机码,随机码从一定程度来说,更安全、不重复性更高,但是可读性差,有概率会发生重复...以后数量大的时候,需要对 mysql 进行分库分表,此时订单号重复,因此不推荐采用!...由于在 Java 中 64bit 的整数是 long 类型,因此在 Java 中 SnowFlake 算法生成的 id 就是 long 来存储的。...总结起来,小米的订单规则是:业务编码+年的后 2 位+月+日+秒+订单数,固定长度为16,这种订单号规则可以保证 100 年不会重复

82620

LeetCode:移除重复节点-java实现

题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。...实现代码 package com.chenbin.demo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader...; import java.util.HashSet; import java.util.Set; public class Day0626 { public static ListNode removeDuplicateNodes...实现思路:单链表好比5个单向连接的有色球,颜色有重复,人工要实现这些球颜色不重复,那么从第二个球开始判断,如果和第一个颜色一样,则将第一个球的链子连接到第三个,在从第三个的下一个判断是否重复,以此类推。...参考:java对象的引用以及对象的赋值https://blog.csdn.net/smilelvcha/article/details/81531184

47420

订单场景-基于Redisson实现订单号生成

这篇文章我将举一个实际的订单号生成需求,来和大家一起探究基于Redisson实现订单号的生成。 业务场景 如何避免重复下单?...当生成订单号的逻辑和订单创建、落库逻辑分开,每次点击提交订单时,前端调用单独的生成订单号接口,再拿着生成的订单号去请求订单创建、落库的逻辑,每次生成的订单号都不一致,这样便保证了每次的请求都不是重复的,...接下来实现不重复订单号逻辑即可。...图片来源: 图片来源 不重复订单号生成 不重复订单号生成实现方式有: UUID 雪花算法 时间戳+随机数+序列号 时间戳+随机数+序列号相比于UUID、雪花算法的优势主要包括以下几点: 可读性:时间戳+...稳定性:时间戳+随机数+序列号生成的订单号的唯一性依赖于时间戳和序列号的组合,不会因为系统时间异常或者分布式环境下的节点标识冲突等原因导致重复

22610

如何正确设计一个订单号???

例如我们的省份证号,要求唯一可读性强等特点,也可以将之理解为一个订单号订单号规则 1.不重复。不管你的订单号设计的是多复杂还是多简单,首先我们需要确保的是订单号在一个系统中是唯一的。 2.安全性。...订单号需要做到不容易被人为的猜测或者推测出来。例如订单号包含系统的流水信息,用户信息等保密相关的信息。 3.禁用随机码。随机码从一定程度来说,更安全、不重复性更高,但是可读性差。...针对系统的并发业务场景(如秒杀),一定需要做到并发场景下,订单编号生成快速、不重复等要求。 5.控制位数。订单号的位数尽量在 10 位-20 位之间。...太短的情况下,如果交易量过大,很难做到防止重复,太长可读性差、意义也不大。 6.尽量使用数字。从软件角度,数字存储的订单号,占用空间小、检索快。...从第 3 和 4 点,我们不难分析出来,通过这样的方式来实现订单号,在一定程度很难出现重复的订单编号。那是为什么呢? 1.卖家的 ID 和买家 ID 的都是在下单之前生成的,具备唯一性。

1.5K50
领券