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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
基于PHP+MySQL的聊天室设计
Oct 09 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
php调用google接口生成二维码示例
Apr 28 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
Yii2如何批量添加数据
May 17 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 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常用字符串处理函数实例分析
2014/11/22 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
vue mounted组件的使用
2018/06/18 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python中异常报错处理方法汇总
2016/11/20 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
优秀民警事迹材料
2014/01/29 职场文书
投标承诺书范本
2014/03/27 职场文书
公司请假条格式
2014/04/11 职场文书
伊索寓言教学反思
2014/05/01 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
教师师德承诺书2016
2016/03/25 职场文书
开网店计划分析
2019/07/30 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
Hive日期格式转换方法总结
2022/06/25 数据库