目前我和我的朋友正在開發一個網站,爲我們稱之爲「項目」,我們只是有一個基本的自動增加ID中用於導航到項目,如唯一的標識字符串
oururl.com/viewproject?id=1
數據庫
但我們開始思考,如果我們有很多張貼項目這將是一個長URL。所以我們需要以某種方式隨機生成大約6個字符的字母數字字符串。我們希望字符串被複制的機會非常低,當然我們會在分配標識符之前查詢數據庫。感謝anyhelp,意味着很多!
目前我和我的朋友正在開發一個網站,爲我們稱之爲「項目」,我們只是有一個基本的自動增加ID中用於導航到項目,如唯一的標識字符串
oururl.com/viewproject?id=1
數據庫
但我們開始思考,如果我們有很多張貼項目這將是一個長URL。所以我們需要以某種方式隨機生成大約6個字符的字母數字字符串。我們希望字符串被複制的機會非常低,當然我們會在分配標識符之前查詢數據庫。感謝anyhelp,意味着很多!
保持數字ID在你的數據庫的速度。使用將這些數字ID轉換爲字母數字ID的算法。
這樣,你不必擔心重複,並且你的數據庫中仍然有非常快的索引。
看到這個答案:https://stackoverflow.com/a/12479939/362536而這個問題:Tinyurl-style unique code: potential algorithm to prevent collisions
您可以使用此代碼來生成動態的6位數字....
$random = substr(number_format(time() * rand(),0,'',''),0,6);
這裏與代碼發生什麼: 外部分「substr」用於將我們創建的隨機數減少到6個字符。您會注意到代碼段末尾的數字10,可以將其更改爲您想要的任何數字。
「number_format」函數有助於擺脫產生隨機數的科學記數法。在中間,「time()」和「rand()」相乘。 Time()是1970年1月1日以來的秒數,rand()是通過PHP生成的唯一數字。
永遠記住,生成唯一的數字並不是萬無一失的。如果您的應用程序要求每個數字都是唯一的,請在保存之前在數據庫中執行衝突檢查。
這正是你正在尋找的東西:http://kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl/ – Tchoupi