使用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 相关文章推荐
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
php实现base64图片上传方式实例代码
Feb 22 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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计算整个目录大小的方法
2015/06/01 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
自荐书范文
2013/12/08 职场文书
质量承诺书范文
2014/03/27 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
实训报告范文大全
2014/11/04 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
微信小程序调用python模型
2022/04/21 Python