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 验证图片生成函数
May 21 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
PHP文件上传小程序 适合初学者学习!
May 23 PHP
基于php伪静态的实现方法解析
Jul 31 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创建对象的六种方式实例总结
2019/06/27 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
python中map()函数的使用方法示例
2017/09/29 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python gdal安装与简单使用
2019/08/01 Python
Python如何实现爬取B站视频
2020/05/20 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
八年级英语教学反思
2014/01/09 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
个人整改措施书面材料
2014/10/24 职场文书
人事局接收函
2015/01/31 职场文书
冰峪沟导游词
2015/02/09 职场文书
飞越疯人院观后感
2015/06/09 职场文书
盲山观后感
2015/06/11 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫