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 无限极分类
Mar 27 PHP
Cakephp 执行主要流程
Mar 24 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
PHP之短标签开启设置
Jun 17 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
php版本的cron定时任务执行器使用实例
Aug 19 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
为你总结一些php系统类函数
Oct 21 PHP
php数组分页实现方法
Apr 30 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 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 数据库树的遍历方法
2009/02/06 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python自动下载图片的方法示例
2020/03/25 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
浪费资源的建议书
2014/03/12 职场文书
家长意见书
2015/06/04 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis