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版(5)
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
php查看session内容的函数
Aug 27 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
php中的登陆login
2007/01/18 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
node中的session的具体使用
2018/09/14 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
python冒泡排序简单实现方法
2015/07/09 Python
深入解读Python解析XML的几种方式
2016/02/16 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
python搜索包的路径的实现方法
2019/07/19 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
经典c++面试题五
2014/12/17 面试题
公司中层管理培训心得体会
2016/01/11 职场文书
python基础之类方法和静态方法
2021/10/24 Python
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript