背景:
我正在创建一个服务预订网站。每个订单都需要有一个唯一的订单号。我选择了 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/