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(2)――PHP类型
Feb 15 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
探讨如何把session存入数据库
Jun 07 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
PHP异常处理浅析
May 12 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 PHP
零基础php编程好学吗
Oct 11 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 PHP
PHP RabbitMQ消息列队
May 11 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
ftp类(myftp.php)
2006/10/09 PHP
PHP常用技巧汇总
2016/03/04 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
JavaScript动态加载样式表的方法
2015/03/21 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
什么是GWT的Module
2013/01/20 面试题
毕业生物理教师求职信
2013/10/17 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
车间班组长的职责
2013/12/13 职场文书
新员工入职感言
2014/02/01 职场文书
光盘行动倡议书
2014/02/02 职场文书
疾病防治方案
2014/05/31 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL