最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、生成唯一uuid

看到某些人會用uuid去代替用戶的uid

從代碼中可以看出,通過unique生成一個以毫秒級時間戳為前綴的字符后md5加密

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

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

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

而一般的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ù)值型的

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

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

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

但是事情無絕對,如果真的因為隨機(jī)碰撞導(dǎo)致的uid相同該如何

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

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

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

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

雖然說上面的兩種方式并非不可取

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

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

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

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

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

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

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

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

這樣增長起來,就會是100000,100003,100006,100009,100012....

補(bǔ)充

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

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

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

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

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

在ColdFusion中可以用CreateUUID()函數(shù)很簡單的生成UUID,其格式為:xxxxxxxx-xxxx-xxxx- xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 范圍內(nèi)的一個十六進(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • php筆記之:數(shù)據(jù)類型與常量的使用分析

    php筆記之:數(shù)據(jù)類型與常量的使用分析

    本篇文章是對php中數(shù)據(jù)類型與常量的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • php的declare命令及用法詳解

    php的declare命令及用法詳解

    declare是用來設(shè)定一段代碼的執(zhí)行指令,declare結(jié)構(gòu)用于全局范圍,影響到其后的所有代碼,今天小編給大家普及php的declare命令及用法知識,感興趣的朋友一起看看吧
    2021-06-06
  • Laravel5.1 框架模型創(chuàng)建與使用方法實例分析

    Laravel5.1 框架模型創(chuàng)建與使用方法實例分析

    這篇文章主要介紹了Laravel5.1 框架模型創(chuàng)建與使用方法,結(jié)合實例形式分析了laravel5.1框架模型的原理、創(chuàng)建、更新、獲取等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • php獲取訪問者IP地址匯總

    php獲取訪問者IP地址匯總

    在很我的時候我們需要得到用戶的真實IP地址,例如,日志記錄,地理定位,將用戶信息,網(wǎng)站數(shù)據(jù)分析等,其實獲取IP地址很簡單$_SERVER[\'REMOTE_ADDR\']就可以了。下面我們就來給大家匯總一下常用的幾種獲取IP地址的方法。
    2015-04-04
  • php結(jié)合正則批量抓取網(wǎng)頁中郵箱地址

    php結(jié)合正則批量抓取網(wǎng)頁中郵箱地址

    目前在做一個項目,需要提取一個小型網(wǎng)站的所有郵箱地址,度娘了一下,方法還挺多,這里給大家總結(jié)幾個比較實用的,分享給大家。
    2015-05-05
  • 在IIS7.0下面配置PHP 5.3.2運(yùn)行環(huán)境的方法

    在IIS7.0下面配置PHP 5.3.2運(yùn)行環(huán)境的方法

    最近心血來潮,想學(xué)習(xí)一下php,既然想學(xué)習(xí)了就得需要搭環(huán)境。在網(wǎng)上找來找去都是說IIS5.0或者6.0的配置。真是看得云里霧里的,這樣直接影響了我的判斷力?,F(xiàn)特意寫下來在IIS7.0下面如何進(jìn)行配置PHP。
    2010-04-04
  • Zend Framework生成驗證碼并實現(xiàn)驗證碼驗證功能(附demo源碼下載)

    Zend Framework生成驗證碼并實現(xiàn)驗證碼驗證功能(附demo源碼下載)

    這篇文章主要介紹了Zend Framework生成驗證碼并實現(xiàn)驗證碼驗證功能,較為詳細(xì)的分析講述了Zend Framework實現(xiàn)操作驗證碼操作的具體步驟與相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-03-03
  • php實現(xiàn)的漂亮分頁方法

    php實現(xiàn)的漂亮分頁方法

    這篇文章主要介紹了php實現(xiàn)的漂亮分頁方法,代碼很簡單,需要的朋友可以參考下
    2014-04-04
  • 簡單實現(xiàn)PHP留言板功能

    簡單實現(xiàn)PHP留言板功能

    這篇文章主要教大家如何簡單實現(xiàn)PHP留言板功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • phpfans留言版用到的數(shù)據(jù)操作類和分頁類

    phpfans留言版用到的數(shù)據(jù)操作類和分頁類

    phpfans留言版用到的數(shù)據(jù)操作類和分頁類...
    2007-01-01

最新評論

怀安县| 山东| 门源| 都昌县| 永善县| 岚皋县| 庆安县| 松江区| 吕梁市| 清徐县| 武川县| 安塞县| 英超| 湘西| 股票| 尖扎县| 巴马| 班玛县| 洛阳市| 敖汉旗| 扶风县| 民乐县| 长汀县| 方正县| 衡南县| 太和县| 平远县| 新余市| 锦屏县| 都兰县| 怀远县| 丰顺县| 班戈县| 衢州市| 郯城县| 曲沃县| 乌拉特前旗| 内丘县| 平乡县| 龙胜| 扬州市|