[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的表现形式
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的主要内容,如果未能解决你的问题,请参考以下文章