[PHP] - UUID

Posted 江梦丽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PHP] - UUID相关的知识,希望对你有一定的参考价值。

UUID介绍:

(原文链接:https://blog.csdn.net/bravejiezai/article/details/51725049

英文:Universally Unique Identifier。翻译为:全局唯一标识符

本身是由一组32位数的16进制数字所构成,故UUID理论上的总数为1632=2128,约等于3.4 x 1038。

 

UUID的表现形式

UUID需要事先制定规则,它的标准型式包含32个16进制数字,以连字号分为五段,表现形式为8-4-4-4-12的32个字符,如下所示:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

其中M与N都有特殊含义,M表示UUID版本,目前只有五个版本,即只会出现1,2,3,4,5,数字 N的一至三个最高有效位表示 UUID 变体,目前只会出现8,9,a,b四种情况。

 

UUID的版本:

UUID具有多个版本,每个版本的算法不同,应用范围也不同。

UUID Version 1:基于时间的UUID

基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。

UUID Version 2:DCE安全的UUID

分布式计算环境(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。

UUID Version 3:基于名字的UUID(MD5)

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID

根据随机数,或者伪随机数生成UUID。

UUID Version 5:基于名字的UUID(SHA1)

和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

php中 V1与V4生成 uuid 的性能比较

(原文链接:https://learnku.com/php/t/39262

对于V1:使用pecl最快,因为利用内核特性获得增量数据。

对于V4:使用Polyfill最快,因为php使用了sys_getrandom()获取随机数。

 

PHP安装扩展Pecl生成UUID

(原文链接:https://www.cnblogs.com/us80/articles/2635285.html

 

Pecl扩展的实现包Symfony Polyfill

前提:安装composer

 开始安装:

composer require symfony/polyfill-uuid

 实践:

<?php

namespace app\\index\\controller;

use Symfony\\Polyfill\\Uuid\\Uuid;

class Test
{
    public function test()
    {
        $uuid = new Uuid();
        $res  = $uuid->uuid_create(UUID_TYPE_RANDOM);
        halt($res); // 3a5d03ff-e171-412e-a52f-b67d4286ce05
    }
}

题外:

php的函数uniqid() 可以尽力生成一个唯一ID

以上是关于[PHP] - UUID的主要内容,如果未能解决你的问题,请参考以下文章

插入php后获取生成的uuid

超级有用的9个PHP代码片段

陷入(php)foreach mysqli

PHP必用代码片段

PHP代码-psysh调试代码片段工具

超实用的php代码片段