zoukankan      html  css  js  c++  java
  • 在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/

  • 相关阅读:
    SpringBoot08-缓存
    Spring注解-自动装配(三)
    Spring注解-生命周期与属性赋值(二)
    Spring注解-组件注册(一)
    剖析SpringMVC流程与整合(八)
    SpringMVC视图解析与配置(六)
    SpringMVC的其他功能(七)
    简单了解SpringMVC(五)
    Java动态代理
    Spring事务(四)
  • 原文地址:https://www.cnblogs.com/cndavidwang/p/11939424.html
Copyright © 2011-2022 走看看