使用PHP多个函数生成一个订单号格式如下:
$num=Date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
-
date("Ymd")
:拼接一个年月日组成的数字。2.
uniqid():
此函数获取一个带前缀、基于当前时间微秒数的唯一ID。 -
substr(uniqid(), 7, 13)
:由于uniqid()
函数生成的结果前面7位很久才会发生变化,所以有或者没有对于我们没有多少影响,所以我们截取后面经常发生变化的几位。 -
str_split(substr(uniqid(), 7, 13),1)
:我们将刚刚生成的字符串进行分割放到数组里面,str_split()
第二个参数是每个数组元素的长度。 -
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值,意思就是把第二个参数生成的数组每个元素全部转换为数字,因为刚刚我们截取的字符串中含有字母,不适合订单号。 -
implode()
:很简单了,把刚刚那个转换成数字的数字在拼接成为一个数字。 -
由于刚刚生成的随机数可能会长短不一(原因就是,每个字符转换为ASCII值可能不一样,有些是2位,有些可能是一位),所以我们同意截取0-8
-
然后加上刚刚的日期数字,现在就凑成了一个等长的高大上的订单号了~