PHP使用日期生成唯一订单号

Ken*_*ang 8 php format time date

我想按照以下12种数字格式生成唯一标识符:

YYYYMMDDXXXX
Run Code Online (Sandbox Code Playgroud)

例:

201403052318
Run Code Online (Sandbox Code Playgroud)

哪里:

YYYYMMDD是当前日期值,其他XXXX是随机生成的值.

$today = date("Ymd");
$rand = sprintf("%04d", rand(0,9999));
$unique = $today . $rand;
Run Code Online (Sandbox Code Playgroud)

每日所需的唯一卷大约是100.我应该使用什么方法来防止可能重复的rand值或使所有id最大的唯一?也许可以使用当前时间函数来压缩最后4个字符中的这些数字?

EDITED:连接到MySQL数据库的唯一值作为表的主要索引.它是与数据库中任何存储信息无关的初始值.

Sha*_*ran 12

你不能依赖rand(),有可能你会产生一个副本(非常罕见的rand(0,9999)生成重复,但这将在某些时候).

因此rand(),只需创建一个增量值(比如从1开始)并附加到生成日期.

下次当你重新生成一个新的id时,抓住那个增量值(比如你把它存储在某处......必须是1对吗?)状态,增加它并将它附加到你的新日期.

不是一个理想的解决方案..(评论家欢迎)

您可以使用的uniqid加上sha-1time,做一个substr()对前4个字符在他们身上.

<?php
$today = date("Ymd");
$rand = strtoupper(substr(uniqid(sha1(time())),0,4));
echo $unique = $today . $rand;
Run Code Online (Sandbox Code Playgroud)

OUTPUT :

201403094B3F
Run Code Online (Sandbox Code Playgroud)


Bai*_*aig 7

我需要做同样的事情,那将保持时间,也保持ID唯一一个解决方案,我结束了使用的解决方案PHP 功能, time()这样

$reference_number = 'BFF-' . time(); 您可以BFF将更改为对业务逻辑更有意义的内容.

我的唯一引用ID看起来像是BFF-1393327176可以从Unix转换为实时,这将给你,Tue, 25 Feb 2014 11:19:36

我希望这有帮助