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字符串截取问题
Nov 28 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
php对数组排序代码分享
Feb 24 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
解决Laravel 不能创建 migration 的问题
Oct 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扩展介绍与开发教程
2010/08/19 PHP
php设置编码格式的方法
2013/03/05 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
JavaScript中this函数使用实例解析
2020/02/21 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
python 简单的多线程链接实现代码
2016/08/28 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Python读写文件基础知识点
2019/06/10 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
师范生自荐信范文
2013/10/06 职场文书
物业保安员岗位职责
2014/03/14 职场文书
师德师风建设方案
2014/05/08 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏