使用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 相关文章推荐
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
php基础知识:类与对象(1)
Dec 13 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
php字符串截取函数用法分析
Nov 25 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
php中上传文件的的解决方案
Sep 25 PHP
PHP chr()函数讲解
Feb 11 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
php session 预定义数组
2009/03/16 PHP
php缓冲输出实例分析
2015/01/05 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python线程创建和终止实例代码
2018/01/20 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
终止合同协议书
2014/04/17 职场文书
高三毕业评语
2014/12/31 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
刑事申诉状范文
2015/05/20 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
go xorm框架的使用
2021/05/22 Golang
简单介绍Python的第三方库yaml
2021/06/18 Python
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android