亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、生成唯一uuid

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

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

再通過分隔符進行分割后得到uuid

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

但是生成的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;
}
 
//結果:37f14a07-cb18-2e54-4e40-da1e2fa0456d

二、生成唯一uid

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

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

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

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

但是事情無絕對,如果真的因為隨機碰撞導致的uid相同該如何

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

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

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

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

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

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

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

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

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

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

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

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

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

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

補充

php中生成標準uuid的方法

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

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

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

關于 UUID這個標準使用最普遍的是微軟的GUID(Globals Unique Identifiers)。

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

而標準的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();
?>

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

相關文章

  • php生成word并下載代碼實例

    php生成word并下載代碼實例

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

    Yii2中的場景(scenario)和驗證規(guī)則(rule)詳解

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

    Laravel框架表單驗證操作實例分析

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

    UTF-8正則表達式如何匹配漢字

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

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

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

    對laravel in 查詢的使用方法詳解

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

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

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

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

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

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

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

    PHP 獲取視頻時長的實例代碼

    本文通過實例代碼給大家介紹了php獲取視頻時長的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-07-07

最新評論