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 相关文章推荐
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
PHP 写文本日志实现代码
May 18 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
PHP 导出Excel示例分享
Aug 18 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 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
php eval函数用法总结
2012/10/31 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python实现的下载网页源码功能示例
2017/06/13 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
python实现简单加密解密机制
2019/03/19 Python
python SocketServer源码深入解读
2019/09/17 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
苹果美国官方商城:Apple美国
2016/08/24 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
中年人生感言
2014/02/04 职场文书
小学一年级学生评语
2014/04/22 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
毕业赠语大全
2015/06/23 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP