比方說時間戳記已經產生了 然後再怎麼處理保證唯一。。
回複討論(解決方案)
time().mt_rand(100000,99999).mt_rand(100000,999999)
沒法保證絕對唯一!
時間戳記 在秒間是唯一的
php 提供的最小時間解析度為 微秒
微秒+???
function uninum(){list($sec, $usec) = explode(' ',microtime());return str_replace('.','',sprintf('%f',$sec + $usec).mt_rand(100000,999999));}echo uninum();
時間戳記 在秒間是唯一的
php 提供的最小時間解析度為 微秒
哈哈 微秒可以有
time()
單擊無法保證唯一
時間+資料庫唯一數字??>唯一數字
用微秒的函數 在連上一個隨機數什麼的 就已經有很好的唯一性了
用時間戳記+隨機
比如時間戳記是445656623323
後面再加上5位隨機數
主要基本能保證不重複,但不能保證絕對不重複,不過要是重複了,機率相當於買大樂透,2元一次,連中十多二十次呢。
如果你覺得5位隨機數不夠,可以增加到20位,30位,如果你的伺服器能撐得住的話,機率相當於明天看到外星人了。
當然,如果你還不放心的話,還有兩個辦法,時間戳記+IP地址組合+兩三位隨機數,這個就絕對不會重複了
另一個辦法就是時間戳記+隨機數,寫進資料庫前對照一下看看有沒有一樣的,如果有,重建隨機數。
用時間戳記+隨機
比如時間戳記是445656623323
後面再加上5位隨機數
主要基本能保證不重複,但不能保證絕對不重複,不過要是重複了,機率相當於買大樂透,2元一次,連中十多二十次呢。
如果你覺得5位隨機數不夠,可以增加到20位,30位,如果你的伺服器能撐得住的話,機率相當於明天看到外星人了。
當然,如果你還不放心的話,還有兩個辦法,時間戳記+IP地址組合+兩三位隨機數,這個就絕對不會重複了
另一個辦法就是時間戳記+隨機數,寫進資料庫前對照一下看看有沒有一樣的,如果有,重建隨機數。
最新版本的 PHP date新增了u,可以顯示毫秒。
其實最安全的唯一數肯定是根據時間來的。
1)microtime(true)
2) uniqid()
3) 根據使用者IP+瀏覽器標示頭+時間戳記
時間戳記+md5(字串)
也可以用mysql表的自增id作為唯一數