php產生像qq號碼這種的唯一數字id?

來源:互聯網
上載者:User
是不是需要使用rand產生一個隨機數,然後去資料庫查詢是否有這個數呢?感覺這樣的話有點費時間,有沒有其他方法呢?

回複內容:

是不是需要使用rand產生一個隨機數,然後去資料庫查詢是否有這個數呢?感覺這樣的話有點費時間,有沒有其他方法呢?

有兩種方法可以解決。
1. 如果你只用php而不用資料庫的話,那時間戳記+隨機數是最好的方法,且不重複;
2. 如果需要使用資料庫,即你還需要給這個id關聯一些其他的資料。那就給MySQL資料庫中的表的id一個AUTO_INCREMENT(自增)屬性,每次插入一條資料時,id自動+1,然後使用mysql_insert_id()LAST_INSERT_ID()返回這個自增後的id。

1.隨機範圍大的話,隨機數很難重複的
2.OK,也考慮重複的情況,那給資料庫表這個隨機數欄位加索引,時間複雜度為O(LogN)

時間戳記是唯一的,時間戳記加一個固定的值最後得到的值也是唯一的。最好不要去資料庫比對,那樣太浪費時間了。

設定一個取號範圍,然後全部放入資料庫。
每發出一個id就在資料庫裡面將這個號標記為「已使用」。
發號的時候隨機一個沒被標記成「已使用」的id,然後返回那個id。

時間戳記 + 隨機數,就能搞定了

最簡單的:用時間戳記取uniqid

這個問題已經有現成的解決方案了,使用php uuid擴充就能完美解決這個問題,這個擴充能產生唯一的完全數位簽章。。如果你不使用composer請參考https://github.com/lootils/uuid,如果你的項目是基於composer搭建的,那麼請參考https://github.com/ramsey/uuid

時間戳記 + 隨機數

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.