PHP生成不重复的订单号

简介: uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。当时前面的7位是不会经常变动的(应该是秒数,一秒一次) 所以我们使用substr()函数,截取字符串,从第8位到13位,接着这里会有一个问题,得到的是数字+字母的随机数,如果你需要的订单号可以包含字母,这里不需要转换也可以。

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




方法一


比较常见的一种简单方法 使用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;
}
目录
相关文章
|
11月前
|
API PHP
php获取随机订单号(封装函数)
作为一个开发人员,生成订单时常常需要获取一段随机码来表示订单号,并且订单号一般包含的特定的时间日期等信息,临时现写一个比较浪费时间,这里有一个封装好的生成随机订单号的函数,需要时直接调用即可。
103 0
|
PHP
PHP 生成订单号
PHP 生成订单号
67 0
|
应用服务中间件 PHP
PHP 生成唯一订单号函数
在开发购物功能,涉及到支付比如 微信、支付宝,当下单时需要生成一条唯一的订单,需要用到唯一的订单号管理。
2922 0
|
10月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
95 0
|
10月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
122 0
|
10月前
|
关系型数据库 MySQL Unix
PHP MySql 安装与连接
PHP MySql 安装与连接
176 0
|
18天前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
26 1
|
2月前
|
关系型数据库 MySQL PHP
|
1月前
|
Ubuntu 关系型数据库 MySQL
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
23 0
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
|
27天前
|
前端开发 关系型数据库 MySQL
使用 PHP 和 MySQL 实现留言板功能
使用 PHP 和 MySQL 实现留言板功能
39 0