在PHP中使用UUID擴展的函數


環境:
CentOS Linux release 7.7.1908 (Core)
PHP 7.3.11
UUID Extention 1.0.4

感覺上PHP對UUID的支持似乎不是很上心,PECL中的UUID擴展僅僅是對libuuid的打包,並沒有像其他語言那樣直接提供完整的UUID實現。由於libuuid僅僅提供了版本1和版本4的UUID,所以……,開心一點,這兩個就夠用了。


uuid_create( [int $uuid_type = UUID_TYPE_DEFAULT] ) : string

 $uuid_type 

  如下常量之一:
    UUID_TYPE_DEFAULT    //0
    UUID_TYPE_TIME       //1
    UUID_TYPE_DCE        //4
    UUID_TYPE_NAME       //1
    UUID_TYPE_RANDOM     //4
  libuuid提供了UUID版本1和版本4的實現,也只定義了 UUID_TYPE_DCE_TIME 和 UUID_TYPE_DCE_RANDOM 兩個常量。PHP的UUID擴展中,常量是通過映射libuuid的常量定義的。所以,雖然擴展中根據UUID標准定義了4個常量名,但對於當前版本的libuuid,也只能映射到兩個常量。 UUID_TYPE_TIME 映射為libuuid的常量 UUID_TYPE_DCE_TIME ,對應UUID版本1的實現; UUID_TYPE_RANDOM 映射為libuuid的常量 UUID_TYPE_DCE_RANDOM ,對應uuid版本4的實現。而 UUID_TYPE_DCE 和 UUID_TYPE_NAME 兩個常量,雖然從常量名上很容易看出是對應着UUID的版本2和版本3、5,但目前也只能映射為libuuid的常量 UUID_TYPE_DCE_RANDOM 和 UUID_TYPE_DCE_TIME ,可以使用但不具有實際意義。
  常量 UUID_TYPE_DEFAULT 為默認值,表示了libuuid的默認選擇。默認情況下,如果系統存在高質量的隨機數(比如/dev/urandom或/dev/random可用),則提供版本4的UUID,否則提供版本1的UUID。一般認為版本1的UUID發生重復的概率更小,近乎可以保證真正的唯一性,但考慮到泄露MAC帶來的安全憂慮,大多數時候還是傾向於采用版本4的UUID。
return
  如果參數有效(0、1或4),返回UUID字符串。
  如果參數不能識別,拋出警告信息並返回默認的UUID字符串。


uuid_is_valid( string $uuid ) : bool

 $uuid 

  待測試的UUID字符串。
return
  返回true或false。$uuid對大小寫不敏感。


uuid_compare(string $uuid1, string $uuid2) : int

 $uuid1 ,  $uuid2 

  待比較的UUID字符串。
returen
  如果 $uuid1 或 $uuid2 不是有效的UUID字符串,返回bool值 false 。
  如果 $uuid1 和 $uui2 不相同: $uuid1 $uuid2 ,則返回一個正整數; $uuid1 $uuid2 ,則返回一個負整數。
  如果 $uuid1 = $uuid2 ,返回整型值0。


uuid_is_null(string $uuid) : bool

 $uuid 

  待測試的UUID字符串。
return
  如果 $uuid 不是有效的UUID字符串,返回 false 。
  如果 $uuid 不是NULL UUID字符串,返回 false 。
  如果 $uuid 是NULL UUID字符串,返回 true 。
NULL UUID
  '00000000-0000-0000-0000-000000000000'這個各位均為0的UUID字符串被稱為NULL UUID(或NIL UUID?)。


uuid_type(string $uuid) : int

 $uuid 

  待測試的uuid字符串。
return
  如果 $uuid 不是有效的UUID字符串,返回bool值 false 。
  如果 $uuid 是NULL UUID,返回整型值-1。
  如果 $uuid 是有效的UUID字符串,返回1,2,3,4或5,對應UUID的版本。


uuid_variant(string $uuid) : int

 $uuid 

  待測試的UUID字符串。
return
  如果 $uuid 不是有效的UUID字符串,返回bool類型值 false 。
  如果 $uuid 是NULL UUID,返回整型值-1。
  如果 $uuid 是有效的UUID字符串,返回整型值0,1,2或3。
  根據libuuid定義的常量名,很容易分辨返回值的含義:
    UUID_VARIANT_NCS          //0 
    UUID_VARIANT_DCE          //1 
    UUID_VARIANT_MICROSOFT    //2 
    UUID_VARIANT_OTHER        //3 


uuid_time(string $uuid) : int

 $uuid 

  待解析的UUID字符串。
return
  如果 $uuid 不是有效的UUID字符串,如果 $uuid 不是rfc4122定義的變體(uuid_variant()返回值為1,在libuuid中預定義的常量為 UUID_VARIANT_DCE ),如果 $uuid 不是版本1的UUID(基於時間的UUID),則返回bool值 false 。
  如果 $uuid 是根據rfc4122定義的版本1構造的UUID,返回一個整型值。這個值就是構造UUID字符串的時候使用的UNIX時間戳。


uuid_mac(string $uuid) : string

 $uuid 

  待解析的uuid字符串。
return
  如果 $uuid 不是有效的UUID字符串,如果 $uuid 不是rfc4122定義的變體(uuid_variant()返回值為1,在libuuid中預定義的常量為 UUID_VARIANT_DCE ),如果 $uuid 不是版本1的UUID(基於時間的UUID),則返回bool值 false 。
  如果構造 $uuid 的時候使用的不是有效的MAC地址,則返回bool值 false 。
  如果 $uuid 是根據rfc4122定義的版本1構造的uuid,並且構造 $uuid 時使用的是有效的MAC地址,則返回這個MAC地址,表示為一個12位的16進制字符串。


uuid_parse(string $uuid) : string

 $uuid 

  待打包的UUID字符串。
return
  如果 $uuid 不是有效的UUID字符串,返回bool值 false 。
  如果 $uuid 是有效的UUID字符串,則去除“-”后打包成一個16位長的高位在前二進制字符串並返回。類似PHP中函數pack('L*')的效果。


uuid_unparse(string $uuid) : string

  函數uuid_parse()的反向過程。如果參數數據有效,則返回一個UUID字符串,否則返回bool值 false 。

 

OK,就這些。希望有幫助。

參考:
https://tools.ietf.org/html/rfc4122
https://sourceforge.net/p/libuuid/code/ci/master/tree/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM