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

PHP生成重复订单号

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

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

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

经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。...这里简要展示下当时的代码: /** * OD单号生成 * 订单号生成规则:OD + yyMMddHHmmssSSS + 5位数(商户ID3位+随机数2位) 22位 *...,可是这里的随机数只有两位 在高并发环境下极容易出现重复问题,同时毫秒这一选择也不是很好,在多核CPU多线程下,一定时间内(极小的)这个毫秒可以说是固定不变的(测试验证过),所以这里我先以100个并发测试下这个订单号生成...("重复订单数:"+(orderNos.size()-filterOrderNos.size())); } 果然,测试的结果如下: 生成订单数:100 过滤重复后订单数:87 重复订单数:13...同时还有一个因素也很重要,就是所有涉及到订单号生成的应用都是在同一台宿主机(linux实体服务器)上, 所以就目前的系统架构我选用了IP的方式。

80731

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

theme: z-blue 订单、指定长度随机码生成是业务系统中重要且不可避免的一个需求,往往在电商系统中,业务量、并发量庞大,如何不重复、快速、安全的生成一个订单号成了需要重点考虑的问题。...这篇文章我将举一个实际的订单号生成需求,来和大家一起探究基于Redisson实现订单号生成。 业务场景 如何避免重复下单?...当生成订单号的逻辑和订单创建、落库逻辑分开,每次点击提交订单时,前端调用单独的生成订单号接口,再拿着生成订单号去请求订单创建、落库的逻辑,每次生成订单号都不一致,这样便保证了每次的请求都不是重复的,...接下来实现不重复订单号逻辑即可。...图片来源: 图片来源 不重复订单号生成重复订单号生成实现方式有: UUID 雪花算法 时间戳+随机数+序列号 时间戳+随机数+序列号相比于UUID、雪花算法的优势主要包括以下几点: 可读性:时间戳+

35410

在 SpringBoot 中设计一个订单号生成系统

在Spring Boot中设计一个订单号生成系统,主要考虑到生成订单号需要满足的几个要求:唯一性、可扩展性、以及可能的业务相关性。以下是几种常见的解决方案及相应的示例代码: 1....UUID 最简单的方法是使用UUID生成唯一的订单号。...数据库序列或自增ID 利用数据库的序列(如PostgreSQL的SEQUENCE)或自增ID(如MySQL的AUTO_INCREMENT)生成唯一的订单号。...时间戳+随机数/序列 结合时间戳和随机数(或自定义序列)生成订单号,以保证唯一性和可读性。可以通过添加业务相关的前缀来增强业务相关性。...如果当前时间戳小于上一次生成ID的时间戳,抛出异常,因为时钟回拨会导致ID重复

22710

简单聊聊电商系统的订单号生成规则

不得重复 由于我们在业务中对于订单编号的要求是唯一的,所以订单编号生成的时候一定要遵循不可重复这一特性,而实际在底层生成订单编号的时候由于业务流水很大,处于一个高并发的状态,并且订单号生成规则一般是固定的...其次就是业务的长时间积累可能导致新生成订单号会与过去很久的订单号产生重复,所以在设计订单号的时候一定要充分考虑到不可重复性的原则(后面讲到订单号设计中的变量部分会详细讲到)。 2....而且像时间、星期这些自增长的属于作为订单号的设计的一部分元素,有助于解决业务累积而导致的订单号重复的问题。...随机数 随机数就是系统根据程序在一定规则内随机生成的字符,可以为数字也可以是字符串,一般可以用来降低重复;随机数在订单生成中的使用频率非常高,常常是前面几位都是一些显式的规律性数字,比如订单生成的时分秒...预先生成 系统预先生成重复的编号,业务系统要使用时候按顺序取数即可。这种编号一般系统拥有一套成熟的加密规则,不属于常规的订单生成规则,一般用于加密程度较高的业务。

2.2K30

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

经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。...这里简要展示下当时的代码: /** * OD单号生成 * 订单号生成规则:OD + yyMMddHHmmssSSS + 5位数(商户ID3位+随机数2位) 22位 *...,可是这里的随机数只有两位 在高并发环境下极容易出现重复问题,同时毫秒这一选择也不是很好,在多核CPU多线程下,一定时间内(极小的)这个毫秒可以说是固定不变的(测试验证过),所以这里我先以100个并发测试下这个订单号生成...("重复订单数:"+(orderNos.size()-filterOrderNos.size())); } 果然,测试的结果如下: 生成订单数:100 过滤重复后订单数:87 重复订单数:13...同时还有一个因素也很重要,就是所有涉及到订单号生成的应用都是在同一台宿主机(linux实体服务器)上, 所以就目前的系统架构我选用了IP的方式。

64240

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

禁用随机码:很多人分析生成订单号的时候,第一个念头肯定是不重复唯一性,那么第二个念头可能就是安全性,想要同时满足前两者,很容易想到使用随机码,随机码从一定程度来说,更安全、不重复性更高,但是可读性差,有概率会发生重复...防止并发:针对系统的并发业务场景(如秒杀),需要做到并发场景下,订单编号生成快速、不重复等要求 控制位数:订单号的位数尽量在 10 位 ~ 18 位之间。...因此推荐采用 uuid 来生成订单编号!...以后数量大的时候,需要对 mysql 进行分库分表,此时订单号重复,因此推荐采用!...在高并发的环境下,Snowflake 算法可以生成全局唯一的订单编号,但是他的长度达到21位,因此推荐采用,但是可以用它来生成主键 ID,是完全没有问题的!

1.2K20

简单介绍订单号或者流水号的生成方法

一般订单号或者流水号等可能在一些平台会用到,然后我就简单的介绍一个我自己生成订单号和流水号的一个方法吧,如果程序有问题或者你有更好的生成办法,欢迎留言,留下你的文章链接,我们一起学习和进步哈。...方法简介: 一般订单号或者流水号的生成,是时间戳+随机数(或者自己写的算法生成),或者是时间戳+订单类型+随机数 比如在A平台付款的,订单类型就是0001,B平台付款的就是0002,总之可以自己想怎么定义就怎么定义...,如果是这样的话,大家可以再在将时间精确到毫秒,如下代码,毫秒+随机数 还是有重复的话,可以再在将随机数扩大到8位10位这样,如果这样在毫秒级别还能重复,那你的并发量是有多大,这么大的企业,自己可以写一个生成订单号的算法了吧...r = new Random(); return r.nextInt(900000)+100000;//(int)(Math.random()*999999) } ---- 生成订单号如图所示...生成订单号的demo代码可以下载:(只有一个java文件) https://download.csdn.net/download/qq_27471405/10696399 参考文章: https://blog.csdn.net

5.6K10

Rocketmq消费消息时丢失不重复

消息消费丢失手动ACK在消费者端,需要确保在消息拉取并消费成功之后再给Broker返回ACK,就可以保证消息丢失了,如果这个过程中Broker一直没收到ACK,那么就可以重试。...一个死信队列包含了这个ConsumeGroup里的所有死信消息,而区分该消息属于哪个Topic。死信队列中的消息不会再被消费者正常消费。死信队列的有效期跟正常消息相同。...RocketMQ 消息重复的场景发送时消息重复当一条消息已被成功发送到服务端并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。...投递时消息重复消息消息已投递到消费者并完成业务处理,当客户端给服务端反馈应答的时候网络闪断。...负载均衡时消息重复包括但不限于网络抖动、Broker 重启以及订阅方应用重启,当消息队列 RocketMQ 的 Broker 或客户端重启、扩容或缩容时,会触发 Rebalance,此时消费者可能会收到重复消息

60521
领券