使用PHP uniqid函数生成唯一ID


Posted in PHP onNovember 18, 2015

生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。由于生成唯一ID与微秒时间关联,因此ID的唯一性非常可靠。

生成的唯一ID默认返回的字符串有 13 个字符串长,如果不定义唯一ID的前缀,最多可返回23个字符串长,如果再结合md5()函数,生成的唯一ID可靠性将更高,这种生成的ID比随机性的ID 最大优点在于可实现排序,特别是一些需要存储在数据库中的值。

一,函数原型

string uniqid ( [string prefix [, bool more_entropy]] )

可定义唯一ID的前缀与长度

二,版本兼容

PHP 3, PHP 4, PHP 5

三,函数基础用法与实例

1,生成一个唯一ID

<?php 
echo uniqid(); 
?>

2,结合md5()函数生成一个唯一ID

<?php 
echo md5(uniqid()); 
?>

输出:dfbc5c8c6438de075da28b3c8a413fd0

3,生成多个唯一ID,由于是以微秒计

<?php 
echo uniqid(); 
echo uniqid(); 
echo uniqid(); 
?>

输出:

4bfd0e375396b
4bfd0e3753981
4bfd0e3753983

由生成的结果来看,唯一ID之间具有可排序性的。
使用uniqid()函数生成唯一ID既能用于生成临时性ID也能用于生成永久性唯一ID(存储数据库)。

ps:php 生成唯一id的几种解决方法

下面小编给大家整理了三种解决办法,具体内容如下:

1、md5(time() . mt_rand(1,1000000));

这种方法有一定的概率会出现重复

2、php内置函数uniqid()

uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.

w3school参考手册有一句话:"由于基于系统时间,通过该函数生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数"。

下面方法返回结果类似:5DDB650F-4389-F4A9-A100-501EF1348872

function uuid() {
  if (function_exists ( 'com_create_guid' )) {
    return com_create_guid ();
  } else {
    mt_srand ( ( double ) microtime () * 10000 ); //optional for php 4.2.0 and up.随便数播种,4.2.0以后不需要了。
    $charid = strtoupper ( md5 ( uniqid ( rand (), true ) ) ); //根据当前时间(微秒计)生成唯一id.
    $hyphen = chr ( 45 ); // "-"
    $uuid = '' . //chr(123)// "{"
substr ( $charid, 0, 8 ) . $hyphen . substr ( $charid, 8, 4 ) . $hyphen . substr ( $charid, 12, 4 ) . $hyphen . substr ( $charid, 16, 4 ) . $hyphen . substr ( $charid, 20, 12 );
    //.chr(125);// "}"
    return $uuid;
  }
}

com_create_guid()是php自带的生成唯一id方法,php5之后貌似已经没有了。

3、官方uniqid()参考手册有用户提供的方法,结果类似:{E2DFFFB3-571E-6CFC-4B5C-9FEDAAF2EFD7}

public function create_guid($namespace = '') {  
  static $guid = '';
  $uid = uniqid("", true);
  $data = $namespace;
  $data .= $_SERVER['REQUEST_TIME'];
  $data .= $_SERVER['HTTP_USER_AGENT'];
  $data .= $_SERVER['LOCAL_ADDR'];
  $data .= $_SERVER['LOCAL_PORT'];
  $data .= $_SERVER['REMOTE_ADDR'];
  $data .= $_SERVER['REMOTE_PORT'];
  $hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
  $guid = '{' . 
      substr($hash, 0, 8) .
      '-' .
      substr($hash, 8, 4) .
      '-' .
      substr($hash, 12, 4) .
      '-' .
      substr($hash, 16, 4) .
      '-' .
      substr($hash, 20, 12) .
      '}';
  return $guid;
 }
PHP 相关文章推荐
多重?l件?合查?(一)
Oct 09 PHP
php 分页原理详解
Aug 21 PHP
php array_walk() 数组函数
Jul 12 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
php的4种常见运行方式
Mar 20 PHP
PHP实现过滤各种HTML标签
May 17 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
Yii2如何批量添加数据
May 17 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
YII框架页面缓存操作示例
Apr 29 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 PHP
使用PHP实现生成HTML静态页面
Nov 18 #PHP
php+ajax无刷新上传图片实例代码
Nov 17 #PHP
php计算年龄精准到年月日
Nov 17 #PHP
php实现简单的上传进度条
Nov 17 #PHP
PHP安装threads多线程扩展基础教程
Nov 17 #PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 #PHP
教大家制作简单的php日历
Nov 17 #PHP
You might like
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
PHP echo()函数讲解
2019/02/15 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
python中enumerate的用法实例解析
2014/08/18 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
python @property的用法及含义全面解析
2018/02/01 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
机械专业毕业生推荐信范文
2013/11/25 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
司机工作自我鉴定
2014/09/19 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书
部队个人年终总结
2015/03/02 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
七年级数学教学反思
2016/02/17 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python