使用场景:商城、微信支付等生成订单号需求
方法一
比较常见的一种简单方法 使用date()函数,获取当前日期的数字,再配合rand()函数,生成几位随机数。便是一个简单的12位订单号了
<?php
function getOrderNum(){
$date = date('Ymd');
$rand = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
return $date.$rand;
}
echo getOrderNum();
方法二
<?php
function getOrderNum(){
$date = date('Ymd');
$rand = substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))),0,12);
return $date.$rand;
}
echo getOrderNum();
uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。当时前面的7位是不会经常变动的(应该是秒数,一秒一次) 所以我们使用substr()函数,截取字符串,从第8位到13位,接着这里会有一个问题,得到的是数字+字母的随机数,如果你需要的订单号可以包含字母,这里不需要转换也可以。 这里为了纯数字的订单号,所以要继续进行处理。 使用str_split($string, 1)函数,将字符串,以一个字符的长度分割成变量。也就是一个字符一个变量。 array_map()函数是将数组遍历执行一次函数,这里使用的是ord函数,返回字符所在的ASCII码,是一个数字。 所有的字符都已经转成了数字,但是长度会波动(因为有写ASCII码可能是1.可能是81) 所以我们还要使用一个字符截取函数,implode(),截取012位的字符。合适范围(512),最大12 这里是完全随机的字符。而且是基于时间微秒来生成的,重复的可能性非常非常低,之所以加上时间日期,是为了看起来更加统一。 20180131559751565757 20180131985210250485
2018-2-1更新
方法三
function getOrderNum(){
$yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
$orderSn = $yCode[intval(date('Y')) - 2017] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 6) . sprintf('%02d', rand(0, 99));
return $orderSn;
}
扫描二维码,分享此文章