隨機產生困難是在於如何避免碰撞,有人說用md5,GUID這些機制啊,當然可以,但是做為帳號,看著有亂,而且生成位數也過長。
本方法只需要解決1秒內的並發碰撞就可以,因為固定頭部採用的是unixtime時間,精確到秒,超過1秒,這個頭部的時間肯定變化了。同時本方法也可以使用者隨機訂單編號的產生。
測試條件是用循環創建1萬個隨機帳號(毫秒級),0碰撞,10萬個大約有0-3個碰撞。應該沒有一家網路公司會在瞬間同時創建這麼多帳號,所以足夠應付數十億PV這麼大的規模了。
// 自動產生隨機用戶名
// 測試,循環創建1萬個隨機帳號,0碰撞,10萬大約0-3個碰撞,足夠應付未來數十億級PV
private function genUserNumber() { $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $username = ""; for ( $i = 0; $i < 6; $i++ ) { $username .= $chars[mt_rand(0, strlen($chars))]; } return strtoupper(base_convert(time() - 1420070400, 10, 36)).$username; }