使用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下使用iconv需要注意的问题
Nov 20 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
分享一则PHP定义函数代码
Feb 26 PHP
php生成带logo二维码方法小结
Apr 08 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 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+mysql实现用户注册登陆的方法
2015/01/03 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
Python贪心算法实例小结
2018/04/22 Python
python Django的web开发实例(入门)
2019/07/31 Python
python flask搭建web应用教程
2019/11/19 Python
python操作gitlab API过程解析
2019/12/27 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Python更换pip源方法过程解析
2020/05/19 Python
天游软件面试
2013/11/23 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
电子信息专业自荐书
2014/02/04 职场文书
《石榴》教学反思
2014/03/02 职场文书
办公室副主任职责范本
2014/03/08 职场文书
拓展训练激励口号
2014/06/17 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
辩护词范文大全
2015/05/21 职场文书
单位考核鉴定意见
2015/06/05 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Golang gRPC HTTP协议转换示例
2022/06/16 Golang