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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
PHP 中执行系统外部命令
Oct 09 PHP
PHP的开合式多级菜单程序
Oct 09 PHP
计数器详细设计
Oct 09 PHP
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
php类中private属性继承问题分析
Nov 01 PHP
php常用hash加密函数
Nov 22 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
php使用正则表达式获取字符串中的URL
Dec 29 PHP
php语言注释,单行注释和多行注释
Jan 21 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
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
php 静态变量的初始化
2009/11/15 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
Python实现多进程的四种方式
2019/02/22 Python
Python datetime模块使用方法小结
2020/06/18 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
教师年度考核自我鉴定
2014/01/19 职场文书
精彩的广告词
2014/03/19 职场文书
高一新生军训方案
2014/05/12 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
幼儿园教师求职信
2015/03/20 职场文书
排球赛新闻稿
2015/07/17 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers