使用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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
Yii框架上传图片用法总结
Mar 28 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
开启PHP的伪静态模式
2015/12/31 PHP
php测试kafka项目示例
2020/02/06 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
JavaScript中常见陷阱小结
2010/04/27 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python str字符串转uuid实例
2020/03/03 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
环境工程大学生自荐信
2013/10/21 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
网上书店创业计划书
2014/01/12 职场文书
离婚协议书范文
2015/01/26 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript