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 Smarty生成EXCEL文档的代码
Aug 23 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 PHP
php正则表达式使用方法整理集合
Jan 31 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
laravel学习教程之关联模型
2016/07/30 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
vue-cli常用设置总结
2018/02/24 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python学习教程之常用的内置函数大全
2017/07/14 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
pytorch masked_fill报错的解决
2020/02/18 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
拓展训练激励口号
2014/06/17 职场文书
大学生团员个人总结
2015/02/14 职场文书
党员个人自我评价
2015/03/03 职场文书
国博复兴之路观后感
2015/06/02 职场文书
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android