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 相关文章推荐
9个PHP开发常用功能函数小结
Jul 15 PHP
php数字转汉字代码(算法)
Oct 08 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP、Java des加密解密实例
Apr 27 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 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网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
php 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
Python实现备份文件实例
2014/09/16 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python 日期排序的实例代码
2019/07/11 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
聊聊python中的异常嵌套
2020/09/01 Python
小学生秋游活动方案
2014/02/23 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript