使用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 if 想到的些问题
Mar 22 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
php学习笔记之面向对象
Nov 08 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
php如何获取文件的扩展名
Oct 28 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
php去除数组中为0的元素的实例分析
Nov 17 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技巧与注意事项分析
2011/02/03 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
php判断表是否存在的方法
2015/06/18 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
PHP读取Excel类文件
2017/05/15 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python实现井字棋小游戏
2020/03/04 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
自荐信范文
2013/12/10 职场文书
请假条的格式
2014/04/11 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
廉洁校园实施方案
2014/05/25 职场文书
服装店员工管理制度
2015/08/07 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python