PHP订单号的生成


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

在网上找了一番,发现这位同学的想法挺不错的,redtamo,具体的请稳步过去看看,我作简要概述,该方法用上了英文字母、年月日、Unix 时间戳和微秒数、随机数,重复的可能性大大降低,还是很不错的。使用字母很有代表性,一个字母对应一个年份,总共16位,不多也不少,呵呵。

<pre class="prettyprint lang-php"><?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));
?></pre>

生成效果:

<pre class="prettyprint lang-php">A422694333616096</pre>

唉,不过很可惜,最后项目并没有使用这种方法,说是没必要搞这么复杂, - -!
话说,不想争执,不用也没关系,我就写个笔记,以后备用。

已有 5 位潜水的同学浮出水面了 »

  1. Byends
    Byends 2011-04-23 09:20 回复

    测试评论提交速度。

  2. 枫叶红秋雨
    枫叶红秋雨 2011-04-24 19:07 回复

    这个留用。

  3. AdimLee
    AdimLee 2011-05-30 16:18 回复

    生成的订单号确实有点太长了,可考虑多加几个字母,比如用字母代替产品分类什么的,这样订单还能起到一定的指引作用

  4. stoat
    stoat 2011-06-14 11:26 回复

    嗯,确实不错,收藏了!

  5. 冰剑
    冰剑 2013-12-17 16:47 回复

    马克

添加新评论 »