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 adodb分页实现代码
Mar 19 PHP
PHP 字符串 小常识
Jun 05 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
php实现文章评论系统
Feb 18 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导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP多维数组排序array详解
2017/11/21 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
Python探索之ModelForm代码详解
2017/10/26 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
Python3标准库总结
2019/02/19 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
python 写一个水果忍者游戏
2021/01/13 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
实习自我鉴定
2013/12/15 职场文书
出国留学介绍信
2014/01/13 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
通知格式
2015/04/27 职场文书
基石观后感
2015/06/12 职场文书
世界名著读书笔记
2015/06/25 职场文书
入团申请书格式
2019/06/20 职场文书