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

PHP生成不重复订单号

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

2.8K11

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

经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。...,可是这里的随机数只有两位 在高并发环境下极容易出现重复问题,同时毫秒这一选择也不是很好,在多核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

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

    券系统设计及券和订单号使用重复下单问题汇总

    券系统设计及券和订单号使用重复下单问题汇总 1.根据订单号+券号来唯一标识一次请求,但是请求端每次请求都会重新生成一个新的订单号,导致每次都是一次新的请求。造成重复下单。...这样客户端在下单成功之后,就知道该订单号是否下单成功。可以控制下次进来券号和订单号是同一个。这样判断券号已下单,直接进入订单详情页面。...2.服务端在免登陆接口拦截,一个券号只允许一个订单号,存在订单号则跳转到“订单详情”,否则允许下单。 3.服务端在订单提交接口拦截。 只认券号来关联订单号返回提交订单的报错信息,阻止重复下单。...5.提交订单接口 重要字段:外部订单号,服务端订单号,渠道source 6.订单列表接口 重要字段:渠道source 7.订单详情接口 重要字段:外部订单号,服务端订单号 8.订单取消接口...重要字段:外部订单号,服务端订单号

    10410

    订单号

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

    1.2K20

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

    经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。...,可是这里的随机数只有两位 在高并发环境下极容易出现重复问题,同时毫秒这一选择也不是很好,在多核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

    65440

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

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

    1.5K20

    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

    48720
    领券