使用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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
php简单封装了一些常用JS操作
Feb 25 PHP
php 分页原理详解
Aug 21 PHP
PHP中设置时区方法小结
Jun 03 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php5与php7的区别点总结
Oct 11 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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获取当前url路径的函数以及服务器变量
2013/06/29 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
python中PIL安装简单教程
2016/04/21 Python
Python 专题四 文件基础知识
2017/03/20 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
Python是什么 Python的用处
2020/05/26 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
外贸销售员求职的自我评价
2013/11/23 职场文书
珠宝店促销方案
2014/03/21 职场文书
环保倡议书400字
2014/05/15 职场文书
机电系毕业生求职信
2014/07/11 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
Python基础之pandas数据合并
2021/04/27 Python
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技