PHP生成UUID
简介UUID含义是 通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。 我们如何使用PHP来生成UUID呢?
关于UUID的起源和作用这里我就不再赘述了,不知道的可以执行百度。这里我们需要知道标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12)。
我为什么会使用UUID呢?为了给上传的图片进行命名。可能会有人会说这不是给自己找麻烦嘛,命名可以使用时间戳再加上些随机数不是更快更好?这里希望大家不要反驳我,我也就是为了使用UUID这个功能。那么PHP生成UUID的方式有很多种,下面我主要列举两种:
第一种:直接使用PHP代码进行生成
function create_uuid($prefix = ""){ //可以指定前缀
$str = md5(uniqid(mt_rand(), true));
$uuid = substr($str,0,8) . '-';
$uuid .= substr($str,8,4) . '-';
$uuid .= substr($str,12,4) . '-';
$uuid .= substr($str,16,4) . '-';
$uuid .= substr($str,20,12);
return $prefix . $uuid;
}
echo create_uuid();
这种也是我最开始使用功能UUID的方式,使用相当方便,直接放在代码中进行使用。我这里使用功能TP框架,所以放在公共函数库里面可以直接进行调用。但是这个功能太过于单一,在网上百度了下,PHP提供了一个UUID的扩展,地址:https://pecl.php.net/package/uuid,感兴趣的童鞋可以跟我一样去动手安装下。下面我们就说说该扩展,也希望后期的项目可以直接使用该方式来创建UUID。
第二种、使用PHP的UUID扩展
首先它作为PHP的扩展,默认情况下该扩展是没有安装的。就需要大家进行安装,下面的安装方式不能适用于所有人,我使用的是Homestead,所以安装的方式直接是:
sudo apt-get install php7.2-uuid
安装完成后,重启下服务
sudo service php7.2-fpm restart
使用phpinfo()就可以看到uuid的扩展已经安装完成。
如果我们要生成一个UUID,调用的方式也很简单:
<?php
echo uuid_create();
#结果为【刷新一次变动一次,所不要与我的结果进行对比】:2599e248-0459-4522-850f-f875913ef807
使用是不是很方便,其实该扩展还提供了其他的一些函数。下面列举下:
- uuid_compare:对比UUID
- uuid_create:生成UUID,可以指定类型,如UUID_TYPE_RANDOM、UUID_TYPE_TIME
- uuid_is_null:验证UUID是否为空,空UUID就是00000000-0000-0000-0000-000000000000
- uuid_is_valid:验证是否是UUID
- uuid_mac:-(这个还没有搞清楚)
- uuid_parse:将数字的UUID以两位的形式转换成字母的形式
- uuid_time:验证UUID是否是以时间来生成的
- uuid_type:验证UUID的类型
- uuid_unparse:作用与uuid_parse刚好相反
- uuid_variant:-(这个也不太清楚)
以上的使用方式可以参考UUID的文档。一些函数的说明我这里也不太准确和详细,后期再进行补充。
总结:生成UUID的方式比较多,上面只是列举了我现在用到了两种方式,比较推荐第二种方式,只是稍显的有些麻烦,但是功能确实很强大,可以省去自己写很多验证方法。