我正在創建服務預訂網站。每個訂單都需要有一個唯一的訂單號。我選擇了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
}
但是我不確定這是否足夠生產。
爲什麼不只是使用自動增量?如果你想混淆你讓它開始在一個隨機數 – NDM
我們也不知道。我們完全不知道您的生產需求/需求。加上,爲什麼str_shuffle? md5哈希值總是基本上是「隨機的」。縮短它會減少密鑰空間並增加碰撞的可能性,並且洗牌並不能幫助避免碰撞。 –
有道理@Marc B,謝謝澄清。我假設如果我們生成了足夠的訂單,那麼在使用MD5時有一個主鍵匹配的機會,儘管機會很小。 –