php生成唯一订单号实例代码

发布时间:2020-01-03编辑:脚本学堂
分享下php生成唯一订单号的实现代码,用php生成订单号的方法,有需要的朋友参考下。

例子,php生成唯一订单号的代码。
 

复制代码 代码示例:
<?php
/**
 *
 * uniqid - 官方是这样说的:
 * gets a prefixed unique identifier based on the current time in microseconds.
 */
function build_order_no()
{
    return date('ymd').substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}
 

用uniqid获取一个基于当前的微秒数生成的唯一不重复的字符串(但是他的前7位貌似很久才会发生变动,所以不用考虑可删除),取其第8到13位。但是这个字符串里面有英文字母,咋办?
用ord获取他的ascii码,所以就有了下一步:用str_split把这个字符串分割为数组,用array_map去操作(速度快点)。

然后返回的还是一个数组,ko,在用implode弄成字符串,但是字符长度不定,取前固定的几位,然后前面加上当前的年份和日期,这个方法生成的订单号,全世界不会有多少重复的。
当然,除非你把服务器时间往前调,但是调也不用怕,哥不相信他会在同一微秒内下两次订单,网络数据传输也要点时间的,即便你是在本地。

相关链接:
php 生成订单号二种方法
php生成不重复的随机订单号
php 自动生成订单编号二种方法

php订单号的生成代码

前阵子,公司有个电子商务项目,需要生成订单号。
当时的考虑很简单,取系统时间加上随机数,或者使用 uniqid() 方法。我们都知道,订单号最基本的要求就是唯一,这个条件必须满足。仔细考虑下上述方法,在顾客购买量少的情况下,订单重复的可能性为零,但是在购买高蜂期生成的订单号重复是很有可能发生的。所以上述方法不可靠,有待强化。

在网上找到一个不错的方法,该方法用上了英文字母、年月日、unix 时间戳和微秒数、随机数,重复的可能性大大降低,还是很不错的。
使用字母很有代表性,一个字母对应一个年份,总共16位,不多也不少,呵呵。
 

复制代码 代码示例:
<?php
$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));
?>
 

生成效果:
a422694333616096