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 变量未定义等错误的解决方法
Jan 12 PHP
PHP的拦截器实例分析
Nov 03 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
为你总结一些php系统类函数
Oct 21 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
Mar 15 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 PHP
php模拟post提交请求调用接口示例解析
Aug 07 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 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
我的论坛源代码(一)
2006/10/09 PHP
php zend 相对路径问题
2009/01/12 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
简单了解django缓存方式及配置
2019/07/19 Python
python cumsum函数的具体使用
2019/07/29 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
2014道德模范事迹材料
2014/02/16 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
地球一小时倡议书
2014/04/15 职场文书
难忘的一课教学反思
2014/04/30 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
使用tensorflow 实现反向传播求导
2021/05/26 Python
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android