使用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初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
分析php://output和php://stdout的区别
May 06 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 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
第十四节--命名空间
2006/11/16 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php实现小程序支付完整版
2018/10/09 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
jquery键盘事件使用介绍
2011/11/01 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
初中历史教学反思
2016/02/19 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
Pandas-DataFrame知识点汇总
2022/03/16 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android