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与javascript对多项选择的处理
Oct 09 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
PHPUnit安装及使用示例
Oct 29 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
详解vue 组件
2020/06/11 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python优先队列实现方法示例
2017/09/21 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python虚拟环境迁移方法
2019/01/03 Python
Python对象与引用的介绍
2019/01/24 Python
从0开始的Python学习016异常
2019/04/08 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
应聘医药销售自荐书范文
2014/02/08 职场文书
外贸专业求职信
2014/03/09 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python