使用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遍历数组的方法分享
Mar 22 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 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
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
jQuery实现朋友圈查看图片
2020/09/11 jQuery
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
python3.6的venv模块使用详解
2018/08/01 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python类中self参数用法详解
2020/02/13 Python
python中return不返回值的问题解析
2020/07/22 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
南京某公司笔试题
2013/01/27 面试题
我们的节日春节活动方案
2014/08/22 职场文书
护士求职自荐信
2015/03/25 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
python中取整数的几种方法
2021/11/07 Python
php去除deprecated的实例方法
2021/11/17 PHP
python多次执行绘制条形图
2022/04/20 Python
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis