PHP生成UUID

xiaohai 2018-09-01 16:25:34 3369人围观 标签: 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的方式比较多,上面只是列举了我现在用到了两种方式,比较推荐第二种方式,只是稍显的有些麻烦,但是功能确实很强大,可以省去自己写很多验证方法。