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
apache rewrite_module模块使用教程
Jan 10 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
php之Memcache学习笔记
Jun 17 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
php比较相似字符串的方法
Jun 05 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
PHP微信开发之有道翻译
Jun 23 PHP
PHP7常量数组用法分析
Sep 26 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 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面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
php跨域调用json的例子
2013/11/13 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
Python paramiko模块的使用示例
2018/04/11 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
Python截图并保存的具体实例
2021/01/14 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
个人安全生产责任书
2014/07/28 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
python之基数排序的实现
2021/07/26 Python
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang