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 协议》,转载必须注明作者和本文链接
👍👍