while 中處理訂單,如何產生不重複的數字?

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
但現在產生的是要給人看的
想問一下更好的方式???

萧十郎
浏览 437回答 3
3回答

偶然的你

1: uuid2:使用更小的微秒 // 生成一万个 for ($i = 0; $i < 10000; ++ $ do { $time = str_replace('.', '', microtime(true)); // 这样子重复的概率已经比较小了,如果还怕重复,只能手动筛选了 $key = $time . str_pad(1, 9999, STR_PAD_LEFT); // 可以装进数组判断,但注意内存 if (不存在) { // 存起来 break; } // 不存在 继续循环 } while(true); }

慕码人8056858

我觉得你这个用date('Ymd').uniqid().rand(10000,99999)够了

守着一只汪

订单编号可以拼上用户标识(user_id)和用户订单数。
打开App,查看更多内容
随时随地看视频慕课网APP