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 危险函数解释 分析
Apr 22 PHP
PHP 定界符 使用技巧
Jun 14 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP连接操作access数据库实例
Mar 30 PHP
PHP实现过滤各种HTML标签
May 17 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 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代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
Python常见数据结构详解
2014/07/24 Python
详解Django中的form库的使用
2015/07/18 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
八大排序算法的Python实现
2021/01/28 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
Python使用wxPython实现计算器
2018/01/30 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
20行python代码实现人脸识别
2019/05/05 Python
python装饰器常见使用方法分析
2019/06/26 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
男方父母证婚词
2014/01/12 职场文书
小学毕业感言300字
2014/02/19 职场文书
开业典礼主持词
2014/03/21 职场文书
对祖国的寄语大全
2014/04/11 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS
volatile保证可见性及重排序方法
2022/08/05 Java/Android