我想生成以下 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-1
和 time
并执行 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/