UUID

UUID介绍:

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

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

本身是由一组32位数的16进制数字所构成,故UUID理论上的总数为16^32^=2^128^,约等于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 的性能比较

(原文链接:翻译:PHP 生成 uuid 的几种方法以及性能比较

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

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

PHP安装扩展Pecl生成UUID

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

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!