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开发大型项目的一点经验
Oct 09 PHP
在PHP中读取和写入WORD文档的代码
Apr 09 PHP
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
PHP数据库操作二:memcache用法分析
Aug 16 PHP
php二维码生成以及下载实现
Sep 28 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
php实现session共享的实例方法
Sep 19 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 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
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
vue中axios请求的封装实例代码
2019/03/23 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
python实现两张图片的像素融合
2019/02/23 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
大学生就业自荐信
2013/10/26 职场文书
出生证明格式
2015/06/15 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS