欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php生成唯一uid的解決方法詳解

 更新時(shí)間:2021年11月23日 15:30:58   作者:autofelix  
在用戶系統(tǒng)中,生成唯一uid,是很多初級(jí)程序員頭痛的事情,因?yàn)槟悴⒉荒鼙WC完全的唯一性,如果要保證唯一性,必須要查一次數(shù)據(jù)庫(kù)。本文將介紹php生成唯一uid的思路,希望能對(duì)大家有所幫助

一、生成唯一uuid

看到某些人會(huì)用uuid去代替用戶的uid

從代碼中可以看出,通過(guò)unique生成一個(gè)以毫秒級(jí)時(shí)間戳為前綴的字符后md5加密

再通過(guò)分隔符進(jìn)行分割后得到uuid

這種方式雖然極大程度的避免了uid的重復(fù)

但是生成的uid太長(zhǎng),足足36個(gè)字符,而且是混雜英文和數(shù)字符號(hào)的,可讀性很差

而一般的uid中都是純數(shù)值組成的

<?php
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;
}
 
//結(jié)果:37f14a07-cb18-2e54-4e40-da1e2fa0456d

二、生成唯一uid

由于一般正常的uid都是純數(shù)值型的

而要保證唯一性,必然要跟時(shí)間戳有關(guān)系,因此有了以下代碼

為了盡可能的在同一秒中注冊(cè)人數(shù)的uid不同,將時(shí)間戳進(jìn)行打亂隨機(jī)排序,也不失為一個(gè)好辦法

但是這種缺點(diǎn)就是,uid長(zhǎng)度是固定的,無(wú)法進(jìn)行改變,雖然呢,打亂字符是一個(gè)很好的解決重復(fù)的方式

但是事情無(wú)絕對(duì),如果真的因?yàn)殡S機(jī)碰撞導(dǎo)致的uid相同該如何

為了更保險(xiǎn)起見(jiàn),必然還是要走一次數(shù)據(jù)庫(kù)的查詢

大大增加了數(shù)據(jù)庫(kù)的I/O壓力

<?php
function generateUid()
{
    return call_user_func('str_shuffle', time());
}
 
//結(jié)果:4067524162

三、生成唯一uid的正確方法

雖然說(shuō)上面的兩種方式并非不可取

但是在大型公司必然不可取,一種是uid的格式必然純數(shù)值,所以u(píng)uid方式可以排除

另外由于對(duì)數(shù)據(jù)庫(kù)的壓力起見(jiàn),必然也不會(huì)采用第二種方式

而最經(jīng)常采用的方式應(yīng)該是使用數(shù)據(jù)庫(kù)的主鍵索引,因?yàn)橹麈I索引必然唯一

這里很多人會(huì)疑惑,主鍵索引不是會(huì)從1開(kāi)始嗎,這uid會(huì)有1位數(shù)的?

小了,格局小了,你可以設(shè)置主鍵索引的offset,讓他從100000開(kāi)始,不就可以解決這個(gè)問(wèn)題了嗎

這時(shí)候有人又問(wèn),那主鍵索引增加不是有規(guī)律的嗎,比如插一條,會(huì)自增1

這時(shí)候就可以設(shè)置主鍵索引的增長(zhǎng)步長(zhǎng),讓他插入一條的步長(zhǎng)不為1即可

而為了讓uid看起來(lái)更加沒(méi)有關(guān)聯(lián)性,你可以設(shè)置步長(zhǎng)為基數(shù),比如3

這樣增長(zhǎng)起來(lái),就會(huì)是100000,100003,100006,100009,100012....

補(bǔ)充

php中生成標(biāo)準(zhǔn)uuid的方法

UUID是指在一臺(tái)機(jī)器上生成的數(shù)字,它保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的。

通常平臺(tái) 會(huì)提供生成UUID的API。UUID按照開(kāi)放軟件基金會(huì)(OSF)制定的標(biāo)準(zhǔn)計(jì)算,用到了以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片ID碼和許多可能的數(shù)字。

由以 下幾部分的組合:當(dāng)前日期和時(shí)間(UUID的第一個(gè)部分與時(shí)間有關(guān),如果你在生成一個(gè)UUID之后,過(guò)幾秒又生成一個(gè)UUID,則第一個(gè)部分不同,其余相 同),時(shí)鐘序列,全局唯一的IEEE機(jī)器識(shí)別號(hào)(如果有網(wǎng)卡,從網(wǎng)卡獲得,沒(méi)有網(wǎng)卡以其他方式獲得),UUID的唯一缺陷在于生成的結(jié)果串會(huì)比較長(zhǎng)。

關(guān)于 UUID這個(gè)標(biāo)準(zhǔn)使用最普遍的是微軟的GUID(Globals Unique Identifiers)。

在ColdFusion中可以用CreateUUID()函數(shù)很簡(jiǎn)單的生成UUID,其格式為:xxxxxxxx-xxxx-xxxx- xxxxxxxxxxxxxxxx(8-4-4-16),其中每個(gè) x 是 0-9 或 a-f 范圍內(nèi)的一個(gè)十六進(jìn)制的數(shù)字。

而標(biāo)準(zhǔn)的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

<?php

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();
?>

到此這篇關(guān)于php生成唯一uid的解決方法詳解的文章就介紹到這了,更多相關(guān)php內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • php生成word并下載代碼實(shí)例

    php生成word并下載代碼實(shí)例

    這篇文章主要介紹了php生成word并下載代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Yii2中的場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)詳解

    Yii2中的場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)詳解

    Yii2的rule用于對(duì)模型屬性進(jìn)行驗(yàn)證,scenario用戶定義不同場(chǎng)景下需要驗(yàn)證的模型,下面這篇文章主要給大家介紹了關(guān)于Yii2中場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-01-01
  • Laravel框架表單驗(yàn)證操作實(shí)例分析

    Laravel框架表單驗(yàn)證操作實(shí)例分析

    這篇文章主要介紹了Laravel框架表單驗(yàn)證操作,結(jié)合實(shí)例形式分析了Laravel框架表單驗(yàn)證相關(guān)的表單數(shù)據(jù)提交、驗(yàn)證、錯(cuò)誤信息提示等相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • UTF-8正則表達(dá)式如何匹配漢字

    UTF-8正則表達(dá)式如何匹配漢字

    這篇文章主要介紹了UTF-8正則表達(dá)式如何匹配漢字,有需要的小伙伴可以來(lái)參考下
    2015-08-08
  • PHP性能優(yōu)化準(zhǔn)備篇圖解PEAR安裝

    PHP性能優(yōu)化準(zhǔn)備篇圖解PEAR安裝

    這是PHP性能優(yōu)化系列第一期,如何在Windows環(huán)境下安裝PEAR,并以Benchmark工具類為實(shí)例講解PEAR如何安裝擴(kuò)展類。
    2011-12-12
  • 對(duì)laravel in 查詢的使用方法詳解

    對(duì)laravel in 查詢的使用方法詳解

    今天小編就為大家分享一篇對(duì)laravel in 查詢的使用方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • tp5.1 框架數(shù)據(jù)庫(kù)常見(jiàn)操作詳解【添加、刪除、更新、查詢】

    tp5.1 框架數(shù)據(jù)庫(kù)常見(jiàn)操作詳解【添加、刪除、更新、查詢】

    這篇文章主要介紹了tp5.1 框架數(shù)據(jù)庫(kù)常見(jiàn)操作,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP5.1針對(duì)數(shù)據(jù)庫(kù)的添加、刪除、更新、查詢相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • thinkPHP自定義類實(shí)現(xiàn)方法詳解

    thinkPHP自定義類實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了thinkPHP自定義類實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了thinkPHP自定義模型類的定義與使用技巧,需要的朋友可以參考下
    2016-11-11
  • php遍歷數(shù)組的4種方法總結(jié)

    php遍歷數(shù)組的4種方法總結(jié)

    這篇文章主要介紹了php遍歷數(shù)組的4種方法總結(jié),它分分別是foreach循環(huán)、each函數(shù)、list函數(shù)、for循環(huán),需要的朋友可以參考下
    2014-07-07
  • PHP 獲取視頻時(shí)長(zhǎng)的實(shí)例代碼

    PHP 獲取視頻時(shí)長(zhǎng)的實(shí)例代碼

    本文通過(guò)實(shí)例代碼給大家介紹了php獲取視頻時(shí)長(zhǎng)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07

最新評(píng)論