美文网首页
Yii 生成uuid的几种方法

Yii 生成uuid的几种方法

作者: 观心_ | 来源:发表于2019-01-07 17:05 被阅读0次

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。(来自百度百科)

1. 利用mysql uuid()函数

$row= Yii::$app->db->createCommand("select uuid() as uuid")->queryOne();
echo $row['uuid'];

执行结果(5次)

b8cc7eca-125e-11e9-8b0d-080027b68021
b8cc873d-125e-11e9-8b0d-080027b68021
b8cc8e51-125e-11e9-8b0d-080027b68021
b8cc94a4-125e-11e9-8b0d-080027b68021
b8cc9ace-125e-11e9-8b0d-080027b68021

2. 使用Faker\Provider\Uuid;这个类库(伪uuid)

use Faker\Provider\Uuid;

echo Uuid::uuid();

执行结果(5次)

866b6cd0-4f64-3427-8f69-36fd46f7f497
148aac48-73f8-3522-b2c2-15b04942b016
668a65aa-fffb-361b-875c-6a7ec7eebfcb
a9331537-48b2-3387-9879-649f20988982
3d6bb628-1eff-34cb-882f-72a519373975

这个类的源码

public static function uuid()
    {
        // fix for compatibility with 32bit architecture; seed range restricted to 62bit
        $seed = mt_rand(0, 2147483647) . '#' . mt_rand(0, 2147483647);

        // Hash the seed and convert to a byte array
        $val = md5($seed, true);
        $byte = array_values(unpack('C16', $val));

        // extract fields from byte array
        $tLo = ($byte[0] << 24) | ($byte[1] << 16) | ($byte[2] << 8) | $byte[3];
        $tMi = ($byte[4] << 8) | $byte[5];
        $tHi = ($byte[6] << 8) | $byte[7];
        $csLo = $byte[9];
        $csHi = $byte[8] & 0x3f | (1 << 7);

        // correct byte order for big edian architecture
        if (pack('L', 0x6162797A) == pack('N', 0x6162797A)) {
            $tLo = (($tLo & 0x000000ff) << 24) | (($tLo & 0x0000ff00) << 8)
                | (($tLo & 0x00ff0000) >> 8) | (($tLo & 0xff000000) >> 24);
            $tMi = (($tMi & 0x00ff) << 8) | (($tMi & 0xff00) >> 8);
            $tHi = (($tHi & 0x00ff) << 8) | (($tHi & 0xff00) >> 8);
        }

        // apply version number
        $tHi &= 0x0fff;
        $tHi |= (3 << 12);

        // cast to string
        $uuid = sprintf(
            '%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',
            $tLo,
            $tMi,
            $tHi,
            $csHi,
            $csLo,
            $byte[10],
            $byte[11],
            $byte[12],
            $byte[13],
            $byte[14],
            $byte[15]
        );

        return $uuid;
    }

相关文章

  • Yii 生成uuid的几种方法

    UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的...

  • 生成 UUID 的几种方式

    UUID工具包 1. maven依赖 2. 使用示例

  • 2021-09-22 JAVA基本语法

    1.UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。UUID...

  • 生成全局唯一id的几种方式

    生成全局唯一id的几种方式: 1、uuid生成全球唯一id,生成方式简单粗暴,本地生成,没有网络开销,效率高;缺点...

  • js常用函数

    1.uuid UUIDGenerator 生成 UUID。 使用cryptoAPI 生成 UUID, 符合RFC4...

  • js 生产uuid

    /* 生成uuid */ function uuid() { var s = []; ...

  • UUID生成工具方法

    生成的是一个32位不重复的字符串

  • golang字符串的一般操作

    生成MD5字符串 生成UUID 方法一、自己写 方法二、 方法三、 方法四、 若使用的是linux系统,可以直接使...

  • php代码块

    货号单 0000001的生成方法 通过goole Api以经纬度获取城市名 生成uuid方法 使用PHP内置函数实...

  • UUID——初识

    在线生成UUID:http://www.uuid.online/ 一、什么是UUID? UUID是Universa...

网友评论

      本文标题:Yii 生成uuid的几种方法

      本文链接:https://www.haomeiwen.com/subject/cxaurqtx.html