php 生成唯一id的几种解决方法


Posted in PHP onMarch 08, 2013

网上查了下,有很多的方法

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 冒泡排序算法的实现代码
Aug 08 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
PHP 图片处理
Sep 16 PHP
PHP Directory 函数的详解
Mar 07 #PHP
PHP重定向的3种方式
Mar 07 #PHP
file_get_contents获取不到网页内容的解决方法
Mar 07 #PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 #PHP
php设置编码格式的方法
Mar 05 #PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 #PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 #PHP
You might like
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
jQuery登陆判断简单实现代码
2013/04/21 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
python安装pywin32clipboard的操作方法
2019/01/24 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
理工学院学生自我鉴定
2014/02/23 职场文书
公司应聘自荐书
2014/06/14 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
Python获取字典中某个key的value
2022/04/13 Python