使用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 相关文章推荐
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
PHP魔术方法的使用示例
Jun 23 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
浅析Yii2缓存的使用
May 10 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
微信自定义分享php代码分析
Nov 24 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
php实现根据身份证获取精准年龄
Feb 26 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php利用事务处理转账问题
2015/04/22 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
会计主管岗位职责
2014/01/03 职场文书
五年级科学教学反思
2014/02/05 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
如何理解python接口自动化之logging日志模块
2021/06/15 Python
分享几种python 变量合并方法
2022/03/20 Python