while ($row = mysqli_fetch_array($aa)){
$public_order_id = date('Ymd', time()).rand(1,999999);
因為在一瞬間會產生不止一筆
我目前很白痴的做法是用 rand.....
但是1,999999 還是有機率重複,因為是用 while 產生訂單!
所以搞不好第一筆是產生222,第二十筆也會有 222 的機率!
因為使用 time() 沒有用,時間會完全一模一樣,速度太快了
除非產生的訂單超過20筆,時間搓個位數可能才會+1
而且還要跟數據庫比對,如果有重複則回到上一步驟重新產生?
我有一個ID是給程式看的,所以用 AUTO_INCREMENT
但現在產生的是要給人看的
想問一下更好的方式???
如果不是multi thread,重覆的問題不大會發生,用time()可以使用到毫秒,如果還擔心執行太慢重覆,可以配合uspleep:
function getOrderID(){
$t = microtime(true);
$micro = sprintf("%06d", ($t - floor($t)) * 1000000);
uspleep(10000);
}
參考來源:
http://www.w3school.com.cn/php/func_misc_usleep.asp
https://stackoverflow.com/questions/3656713/how-to-get-current-time-in-milliseconds-in-php
有人提到UUID…差點忘了有這東西:
https://adon988.logdown.com/posts/2788007-php-create-uuid-and-guid