PHP生成不重复标识符的方法


Posted in PHP onNovember 21, 2014

本文实例讲述了PHP生成不重复标识符的方法。分享给大家供大家参考。具体实现方法如下:

生成唯一不重复的标识我们主要是根据当前的一个时间time然后再转换在md5值,这样几乎是可以保证标签的唯一性,下面整理了一些关于PHP生成不重复标识符程序代码,感兴趣的朋友可以来看一下

PHP倒是自带了生成唯一id的函数:uniqid() ,它是基于当前时间微秒数的,用法如下:

echo uniqid(); //13位的字符串

echo uniqid("php_"); //当然你可以加上前缀

echo uniqid("php_", TRUE); //如果第二个参数more_entropy为true则生成23位字符串

但是它生成的标识有可能不是唯一的,所以很多人会:
<?php

    //这是第一种简单的方法,当然用sha1()函数也可以。

    echo md5(uniqid());

    //第二种,利用时间戳的方法

    echo md5(time() . mt_rand(1,1000000));

?>

例子:
<?

//生成唯一标识符

//sha1()函数, "安全散列算法(SHA1)"

function create_unique() {

    $data = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']

     .time() . rand();

    return sha1($data);

    //return md5(time().$data);

    //return $data;

}

?>

例子如下:
<?php

$newhash = create_unique();

echo $newhash; 

?>

我看到很多人使用 md5() 函数,即使它并不完全意味着这个目的:
// generate unique string

echo md5(time() . mt_rand(1,1000000));

There is actually a PHP function named uniqid() that is meant to be used for this.

// generate unique string

echo uniqid();

/* prints

4bd67c947233e

*/

// generate another unique string

echo uniqid();

/* prints

4bd67c9472340

*/

你可能会注意到,尽管字符串是唯一的,前几个字符却是类似的,这是因为生成的字符串与服务器时间相关。

但实际上也存在友好的一方面,由于每个新生成的 ID 会按字母顺序排列,这样排序就变得很简单。

为了减少重复的概率,你可以传递一个前缀,或第二个参数来增加:

// with prefix

echo uniqid('foo_');

/* prints

foo_4bd67d6cd8b8f

*/

// with more entropy

echo uniqid('',true);

/* prints

4bd67d6cd8b926.12135106

*/

// both

echo uniqid('bar_',true);

/* prints

bar_4bd67da367b650.43684647

*/

这个函数将产生比 md5() 更短的字符串,节省一些空间。

php生成全球唯一标识符(GUID)的方法

GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
世界上的任何两台计算机都不会生成重复的 GUID 值。
需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。

<?php

//php生成GUID

function getGuid() {

 $charid = strtoupper(md5(uniqid(mt_rand(), true))); 

 

 $hyphen = chr(45);// "-" 

 $uuid = substr($charid, 0, 8).$hyphen 

 .substr($charid, 8, 4).$hyphen 

 .substr($charid,12, 4).$hyphen 

 .substr($charid,16, 4).$hyphen 

 .substr($charid,20,12);

 return $uuid; 

}

?>

希望本文所述对大家的php程序设计有所帮助。
PHP 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 PHP
php中HTTP_REFERER函数用法实例
Nov 21 #PHP
php中call_user_func函数使用注意事项
Nov 21 #PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 #PHP
php常用数学函数汇总
Nov 21 #PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 #PHP
php防止恶意刷新与刷票的方法
Nov 21 #PHP
php采用curl实现伪造IP来源的方法
Nov 21 #PHP
You might like
当海贼王变成JOJO风
2020/03/02 日漫
php访问查询mysql数据的三种方法
2006/10/09 PHP
PHP编码规范-php coding standard
2007/03/16 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
JS中数据结构之栈
2019/01/01 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
JS实现滑动插件
2020/01/15 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python实现下载整个ftp目录的方法
2017/01/17 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
Java程序员面试90题
2013/10/19 面试题
毕业生找工作的自我评价
2013/10/18 职场文书
公司承诺函范文
2015/01/21 职场文书
2015年化验室工作总结
2015/04/23 职场文书
村官2015年度工作总结
2015/10/14 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang