php生成唯一uid的解決方法詳解
一、生成唯一uuid
二、生成唯一uid
三、生成唯一uid的正確方法
一、生成唯一uuid
看到某些人會用uuid去代替用戶的uid
從代碼中可以看出,通過unique生成一個以毫秒級時間戳爲前綴的字符後md5加密
再通過分隔符進行分割後得到uuid
這種方式雖然極大程度的避免了uid的重複
但是生成的uid太長,足足36個字符,而且是混雜英文和數字符號的,可讀性很差
而一般的uid中都是純數值組成的
function generateUUid($strtoupper = false){ $charid = call_user_func($strtoupper ? 'strtoupper' : 'strtolower', md5(uniqid(microtime(true), true))); $hyphen = chr(45); $uuid = substr($charid, 0, 8) . $hyphen . substr($charid, 8, 4) . $hyphen . substr($charid, 12, 4) . $hyphen . substr($charid, 16, 4) . $hyphen . substr($charid, 20, 12); return $uuid;} //結果:37f14a07-cb18-2e54-4e40-da1e2fa0456d
二、生成唯一uid
由於一般正常的uid都是純數值型的
而要保證唯一性,必然要跟時間戳有關係,因此有了以下代碼
爲了儘可能的在同一秒中註冊人數的uid不同,將時間戳進行打亂隨機排序,也不失爲一個好辦法
但是這種缺點就是,uid長度是固定的,無法進行改變,雖然呢,打亂字符是一個很好的解決重複的方式
但是事情無絕對,如果真的因爲隨機碰撞導致的uid相同該如何
爲了更保險起見,必然還是要走一次數據庫的查詢
大大增加了數據庫的I/O壓力
function generateUid(){ return call_user_func('str_shuffle', time());} //結果:4067524162
三、生成唯一uid的正確方法
雖然說上面的兩種方式並非不可取
但是在大型公司必然不可取,一種是uid的格式必然純數值,所以uuid方式可以排除
另外由於對數據庫的壓力起見,必然也不會採用第二種方式
而最經常採用的方式應該是使用數據庫的主鍵索引,因爲主鍵索引必然唯一
這裏很多人會疑惑,主鍵索引不是會從1開始嗎,這uid會有1位數的?
小了,格局小了,你可以設置主鍵索引的offset,讓他從100000開始,不就可以解決這個問題了嗎
這時候有人又問,那主鍵索引增加不是有規律的嗎,比如插一條,會自增1
這時候就可以設置主鍵索引的增長步長,讓他插入一條的步長不爲1即可
而爲了讓uid看起來更加沒有關聯性,你可以設置步長爲基數,比如3
這樣增長起來,就會是100000,100003,100006,100009,100012....
補充
php中生成標準uuid的方法
UUID是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
通常平臺 會提供生成UUID的API。UUID按照開放軟件基金會(OSF)制定的標準計算,用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字。
由以 下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相 同),時鐘序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得),UUID的唯一缺陷在於生成的結果串會比較長。
關於 UUID這個標準使用最普遍的是微軟的GUID(Globals Unique Identifiers)。
在ColdFusion中可以用CreateUUID()函數很簡單的生成UUID,其格式爲:xxxxxxxx-xxxx-xxxx- xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 範圍內的一個十六進制的數字。
而標準的UUID格式爲:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
function guid(){ if (function_exists('com_create_guid')){ return com_create_guid(); }else{ mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. $charid = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// "-" $uuid = chr(123)// "{" .substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12) .chr(125);// "}" return $uuid; }}echo guid();?>
到此這篇關於php生成唯一uid的解決方法詳解的文章就介紹到這了。
<link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b2fbfaddf.css" type="text/css" /><link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b38b8bad702ecfe21037ca964.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b24b9b8d20bc1fc2f166cb7.js"></script><script>SyntaxHighlighter.autoloader( 'applescript https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe9eb370e6c96732d53f9d4.js', 'actionscript3 as3 https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe9c874.js', 'bash shell https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90feafa340a.js', 'coldfusion cf https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febf42b064fb0633655e7.js', 'cpp c https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febeb37.js', 'obj-c objc https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe7f92d21.js', 'c# c-sharp csharp https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febc82f037bb5.js', 'css https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febe834.js', 'delphi pascal https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fecfe2b1261ac.js', 'diff patch pas https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fecf22104.js', 'erl erlang https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fede92b0367a2.js', 'groovy https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fefe9280d7fbc.js', 'haxe hx https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe0fa3f07.js', 'java https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe2fa3103.js', 'jfx javafx https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe2fa31034f9d.js', 'js jscript javascript https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe2c8241060b564.js', 'perl pl https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8fe350e.js', 'php https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8f337.js', 'text plain https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8f7260b67.js', 'py python https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8e2330a66ab.js', 'ruby rails ror rb https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffaee251b.js', 'scala https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffbf8260e68.js', 'sql https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffbea2b.js', 'vb vbnet https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffef9.js', 'ps powershell https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8f430077b96783a56e5.js', 'xml xhtml xslt html https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff0f62b.js', 'go golang https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90feff4.js' );</script> <script type="text/javascript"> SyntaxHighlighter.all(); </script>
<link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b2fbfaddf.css" type="text/css" /><link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b38b8bad702ecfe21037ca964.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b24b9b8d20bc1fc2f166cb7.js"></script> <script>SyntaxHighlighter.autoloader( 'applescript https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe9eb370e6c96732d53f9d4.js', 'actionscript3 as3 https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe9c874.js', 'bash shell https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90feafa340a.js', 'coldfusion cf https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febf42b064fb0633655e7.js', 'cpp c https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febeb37.js', 'obj-c objc https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe7f92d21.js', 'c# c-sharp csharp https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febc82f037bb5.js', 'css https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90febe834.js', 'delphi pascal https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fecfe2b1261ac.js', 'diff patch pas https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fecf22104.js', 'erl erlang https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fede92b0367a2.js', 'groovy https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fefe9280d7fbc.js', 'haxe hx https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe0fa3f07.js', 'java https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe2fa3103.js', 'jfx javafx https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe2fa31034f9d.js', 'js jscript javascript https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90fe2c8241060b564.js', 'perl pl https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8fe350e.js', 'php https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8f337.js', 'text plain https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8f7260b67.js', 'py python https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8e2330a66ab.js', 'ruby rails ror rb https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffaee251b.js', 'scala https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffbf8260e68.js', 'sql https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffbea2b.js', 'vb vbnet https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ffef9.js', 'ps powershell https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff8f430077b96783a56e5.js', 'xml xhtml xslt html https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90ff0f62b.js', 'go golang https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c801eb9afce149aab7550/4c8b2ea2aac90feff4.js' );</script> <script type="text/javascript"> SyntaxHighlighter.all(); </script>
-
用一個又一個造句子
造句指懂得並使用字詞,按照一定的句法規則造出字詞通順、意思完整、符合邏輯的句子。依據現代語文學科特徵,可延伸爲寫段、作文的基礎,是學生寫好作文的基本功。造句來源清俞樾《春在堂隨筆》卷八:“其用意,其造句,均以纖巧勝。”夏丏尊葉聖陶《文心雕龍》四:“造句也...
-
有哪些致少先隊員接班人寄語
1、我們少先隊是少年兒童的大家庭;少先隊員是共產主義事業的接班人。2、鮮豔的紅領巾將你我聯繫在一起,在星星火炬旗幟的激勵下,踏上了新的旅途。3、入隊,是一次自我挑戰;入隊,是一次理想遠航。4、此刻,佩戴鮮豔的紅領巾,我們將銘記隊訓;此刻,佩戴鮮豔的紅領巾,我們將遵循...
-
用正菜造句子
造句指懂得並使用字詞,按照一定的句法規則造出字詞通順、意思完整、符合邏輯的句子。依據現代語文學科特徵,可延伸爲寫段、作文的基礎,是學生寫好作文的基本功。造句來源清俞樾《春在堂隨筆》卷八:“其用意,其造句,均以纖巧勝。”夏丏尊葉聖陶《文心雕龍》四:“造句也...
-
處置的意思
1、處置是一個漢語詞語,拼音是chǔzhì,意思是分別事理,使各得其所;處罰。2、近義詞:處理、措置、辦理、管理、解決。3、出自《漢書·薛宣傳》:“宣知惠不能,留彭城數日,案行舍中,處置什器,觀視園菜,終不問惠以吏事。”4、造句:等到塵埃落定後,再來處置他也不遲。...