前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP生成不重复的订单号

PHP生成不重复的订单号

作者头像
宣言言言
发布2019-12-15 21:46:41
2.8K0
发布2019-12-15 21:46:41
举报
文章被收录于专栏:宣言(Siam)博客

使用场景:商城、微信支付等生成订单号需求

方法一

比较常见的一种简单方法

使用date()函数,获取当前日期的数字,再配合rand()函数,生成几位随机数。便是一个简单的12位订单号了

代码语言:javascript
复制
<?php
function getOrderNum(){
    $date = date('Ymd');
    $rand = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
    return $date.$rand;
}
echo getOrderNum();

方法二

代码语言:javascript
复制
<?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(),截取0~12位的字符。合适范围(5~12),最大12

这里是完全随机的字符。而且是基于时间微秒来生成的,重复的可能性非常非常低,之所以加上时间日期,是为了看起来更加统一。

20180131559751565757

20180131985210250485

方法三

代码语言:javascript
复制
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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档