PHP生成唯一订单号

转载 2018年04月17日 11:25:41
$order_number = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

简单从内到外解析一下这个订单号生成过程:

1、date("Ymd"):这个很容易理解,是在最前方拼接一个当前年月日组成的数字。

2、uniqid():此函数获取一个带前缀、基于当前时间微秒数的唯一ID。

3、substr(uniqid(), 7, 13):由于uniqid()函数生成的结果前面7位很久才会发生变化,所以有或者没有对于我们没有多少影响,所以我们截取后面经常发生变化的几位。

4、str_split(substr(uniqid(), 7, 13), 1):我们将刚刚生成的字符串进行分割放到数组里面,str_split()第二个参数是每个数组元素的长度。

5、array_map('ord', str_split(substr(uniqid(), 7, 13), 1))):其中array_map()函数作用为:函数返回用户自定义函数作用后的数组,意思就是ord是函数ord(),而后面第二个参数是ord()函数的参数。可以这么理解ord(str_split(substr(uniqid(), 7, 13), 1)))。然后ord()是干啥的,ord()函数php内置函数:返回字符串的首个字符的 ASCII 值,意思就是把第二个参数生成的数组每个元素全部转换为数字,因为刚刚我们截取的字符串中含有字母,不适合订单号。

6、implode():很简单了,把刚刚那个转换成数字的数字在拼接成为一个数字。

7、由于刚刚生成的随机数可能会长短不一(原因就是,每个字符转换为ASCII值可能不一样,有些是2位,有些可能是一位),所以我们同意截取0-8

8、然后加上刚刚的日期数字,现在就凑成了一个等长的高大上的订单号了~

PHP生成唯一订单号的方法汇总

echo date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); 订单号常见的几种方式:1.利用数据库主键值产生一个自增长的订单...
  • ahjxhy2010
  • ahjxhy2010
  • 2016-01-22 11:24:56
  • 2220

php 生成唯一订单号4种方法

php生成唯一订单号的方法第一种$danhao = date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);第二种$danhao ...
  • qq_15766181
  • qq_15766181
  • 2017-07-29 17:00:52
  • 4128

php生产唯一订单号

function build_order_no(){         return date('Ymd').substr(implode(NULL, array_map('ord', str_spl...
  • ynw1990
  • ynw1990
  • 2016-09-18 02:48:11
  • 955

生成10位绝不重复订单号

/** * 生成10位绝不重复订单号 */ function order_number(){ static $ORDERSN=array(); ...
  • helin916012530
  • helin916012530
  • 2014-12-16 16:01:58
  • 5372

php 生成唯一id /唯一标识符/唯一订单号

/**  * php 生成唯一id  * http://blog.csdn.net/hzqghost/article/details/18914681  */ function guid($facto...
  • u014103733
  • u014103733
  • 2017-01-15 21:22:59
  • 3013

生成唯一订单号 BY uuid

public static String getSerialIdByUUId() { int machineId = 1;//最大支持1-9个集群机器部署 int hashCodeV = UUID...
  • linkkb
  • linkkb
  • 2017-10-11 18:32:39
  • 229

php 生成唯一订单号,文件锁

从网上找到一篇生成订单号的文章,但并发测试后发现会有重复的订单号生成,所以尝试加入文件锁,阻塞请求,来生成唯一订单号。 自己经过ab工具并发1000个请求,不会生成重复的订单号。 ...
  • wmsjlihuan
  • wmsjlihuan
  • 2016-05-30 12:58:08
  • 1018

高并发生成唯一订单号

最近开发一套会员系统,涉及到订单号生成,在高并发条前提下,如何生成唯一的订单号值得斟酌,我这里提供一种较为可行的方案: public static String getOrderIdByUUId()...
  • sinat_24527911
  • sinat_24527911
  • 2017-11-21 11:09:51
  • 554

高并发下怎样生成唯一的订单号

方案一: 如果没有并发,订单号只在一个线程内产生,那么由于程序是顺序执行的,不同订单的生成时间戳正常不同,因此用时间戳+随机数(或自增数)就可以区分各个订单。 如果存在并发,且订单号是由一个进程中的多...
  • A123638
  • A123638
  • 2017-02-16 08:40:52
  • 5202

全局唯一订单号生成方法(参考snowflake)

全局唯一订单号生成方法(参考snowflake)Snowflake is a network service for generating unique ID numbers at high scal...
  • u011236357
  • u011236357
  • 2016-07-22 17:40:48
  • 10562
收藏助手
不良信息举报
您举报文章:PHP生成唯一订单号
举报原因:
原因补充:

(最多只允许输入30个字)