使用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 30 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
php实现单链表的实例代码
Mar 22 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
PHP中字符与字节的区别及字符串与字节转换示例
Oct 15 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
PHP模拟http请求的方法详解
Nov 09 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操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
Jquery性能优化详解
2014/05/15 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
八年级语文教学反思
2014/02/11 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
小学生暑假安全公约
2015/07/14 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
《静夜思》教学反思
2016/02/17 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby