php - 如何使用 PHP 生成正确的订单号?

标签 php mysql sql hash

背景:

我正在创建一个服务预订网站。每个订单都需要有一个唯一的订单号。我选择了 16 位数字,因为这是以前的软件使用的数字。

问题

我不确定将数据放入订单号是否有任何好处,或者它是否应该只是一个纯粹的随机字符串。

如果它只是一个随机字符串,那么它的唯一目的就是充当 ID。如果是这样的话,那为什么不直接使用增量ID呢?除此之外,为了混淆我们向最终用户生成的订单数量,我想不出一个好的理由。

如果将数据放入字符串中是个好主意,那么我应该包含什么样的数据?可能是订单日期,但除此之外我不知道。

我目前正在生成一个像这样的纯随机 16 位字符串。

public function generateOrderNumber()
{
    $time = time(); // Time (CET) to hash
    $token = md5($time); // Hash stored in variable
    return str_shuffle(substr($token, 0, 16)); // Hash shortened to 5 chars and randomised
}

但是我不确定这是否足以用于生产。

最佳答案

如果您需要全局唯一,例如跨间隔同步的多个数据库,那么我会使用标准 128 位 GUID,它可以被压缩为 16 个 8 位字节以保持向后兼容性。 PHP 有 com_create_guid 来生成 GUID。

关于php - 如何使用 PHP 生成正确的订单号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598692/

相关文章:

mysql - #1054 order 子句中的未知列

php - Zend 和 Doctrine 的日期格式

sql - 两个事件之间的时间

java - 日期sql查询,java

mysql - 实现mysql交集

php - sms api 无法在本地计算机中工作,但如果放置在托管服务器中则可以工作

php - 我的删除程序在 php 中不起作用

php - 将用户密码加密/散列到数据库中

php - MYSQL:查询两个表并将第二个表的结果连接到数组

php - 更新数据库中的产品库存