PHP生成一个唯一订单号,年月日这种高大尚的例子

/生成一个订单号
function getOrderNum(){
    $order_number = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
    return $order_number;
}

 

 

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

  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. 然后加上刚刚的日期数字,现在就凑成了一个等长的高大上的订单号了~

 

 

上面的订单号一次生成1W条也会存在重复,下面这个就比较难重复的

 

function getOrderNum() {
    $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
    $orderSn = $yCode[intval(date('Y')) - 2011] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));
    return $orderSn;
}

function get_order_num(){
    $orderSn = substr(date('Y'), -2) . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -4) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));
    return $orderSn;

}

 

生成不重复的订单id

 
  1.  

    public function getOrderId($prefix = 'DD')

  2.  

    {

  3.  

    return $prefix . (strtotime(date('YmdHis', time()))) . substr(microtime(), 2, 6) . sprintf('%03d', rand(0, 999));

  4.  

    }

生成app的用户token

 
  1.  

    public function getToken()

  2.  

    {

  3.  

    //strtoupper转换成全大写的

  4.  

    $charid = strtoupper(md5(uniqid(mt_rand(), true)));

  5.  

    return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);

  6.  

    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值