使用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 相关文章推荐
开发大型PHP项目的方法
Oct 09 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
php实现水仙花数的4个示例分享
Apr 08 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
PHP数组实例详解
Jun 26 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 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
php加密解密实用类分享
2014/01/07 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
Jquery cookie操作代码
2010/03/14 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
AngularJS语法详解
2015/01/23 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
JavaScript字符串对象
2017/01/14 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
C#面试题
2016/05/06 面试题
前厅收银主管岗位职责
2014/02/04 职场文书
买房协议书
2014/04/11 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书