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中动态显示签名和ip原理
Mar 28 PHP
PHP 变量类型的强制转换
Oct 23 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
smarty中常用方法实例总结
Aug 07 PHP
提高php编程效率技巧
Aug 13 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
详解PHP用mb_string处理windows中文字符
May 26 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 session常见问题集锦及解决办法总结
2007/03/18 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
python字典get()方法用法分析
2015/04/17 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python写一个md5解密器示例
2018/02/23 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
python 实现图片批量压缩的示例
2020/12/18 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
甲方资料员岗位职责
2013/12/13 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
护理学专业求职信
2014/06/29 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
廉洁自律证明
2015/06/24 职场文书