PHP 生成带日期的唯一订单号

标签 php date time format

我想生成以下 12 位数字格式的唯一标识符:

YYYYMMDDXXXX

例子:

201403052318

地点:

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

$today = date("Ymd");
$rand = sprintf("%04d", rand(0,9999));
$unique = $today . $rand;

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

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

最佳答案

您不能依赖 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;

输出:

201403094B3F

关于PHP 生成带日期的唯一订单号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22279146/

相关文章:

php - 如何在 php 中传递 $.getjson 数据,最好使用 laravel 的 @foreach

objective-c - 从引用 NSDate 获取下一周的 NSDate?

ruby-on-rails - 如何处理 ruby​​ on rails 表单中的日期对象?

java 。 GregorianCalendar 以月为单位的日期差异无法正常工作

linux - 为什么 sys+user > real 在 "time command"中?

iphone - NSDateFormatter 问题

javascript - 我如何转动这个每日图像代码来按天但在固定时间而不是午夜更改图像

php - 从电话号码输入字段中提取号码 (PHP)

php - 如果在 Yii 中选中复选框,则弹出一个窗口

javascript - 使用 javascript 单击后更改按钮的文本