php GUID生成函数和类


Posted in PHP onMarch 10, 2014

一、GUID简介
GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。
在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。
二、GUID的优点
1.GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
2.世界上的任何两台计算机都不会生成重复的 GUID 值。
3.需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
4.GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
三、GUID生成函数

function create_guid() {
    $charid = strtoupper(md5(uniqid(mt_rand(), true)));
    $hyphen = chr(45);// "-"
    $uuid = chr(123)// "{"
    .substr($charid, 0, 8).$hyphen
    .substr($charid, 8, 4).$hyphen
    .substr($charid,12, 4).$hyphen
    .substr($charid,16, 4).$hyphen
    .substr($charid,20,12)
    .chr(125);// "}"
    return $uuid;
}

三、GUID生成类
PHP获得GUID类:guid_class.php
<?php    
class System    
{    
    function currentTimeMillis()    
    {    
        list($usec, $sec) = explode(" ",microtime());    
        return $sec.substr($usec, 2, 3);    
    }    
}    
class NetAddress    
{    
    var $Name = 'localhost';    
    var $IP = '127.0.0.1';    
    function getLocalHost() // static    
    {    
        $address = new NetAddress();    
        $address->Name = $_ENV["COMPUTERNAME"];    
        $address->IP = $_SERVER["SERVER_ADDR"];    
        return $address;    
    }    
    function toString()    
    {    
        return strtolower($this->Name.'/'.$this->IP);    
    }    
}    
class Random    
{    
    function nextLong()    
    {    
        $tmp = rand(0,1)?'-':'';    
        return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999);    
    }    
}    
// 三段    
// 一段是微秒 一段是地址 一段是随机数    
class Guid    
{    
    var $valueBeforeMD5;    
    var $valueAfterMD5;    
    function Guid()    
    {    
        $this->getGuid();    
    }    
    //    
    function getGuid()    
    {    
        $address = NetAddress::getLocalHost();    
        $this->valueBeforeMD5 = $address->toString().':'.System::currentTimeMillis().':'.Random::nextLong();    
        $this->valueAfterMD5 = md5($this->valueBeforeMD5);    
    }    
    function newGuid()    
    {    
        $Guid = new Guid();    
        return $Guid;    
    }    
    function toString()    
    {    
        $raw = strtoupper($this->valueAfterMD5);    
        return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);    
    }    
}

GUID类使用方法:

require_once("guid.class.php");    
$Guid = new Guid();    
print $Guid->toString();
PHP 相关文章推荐
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
PHP中soap的用法实例
Oct 24 PHP
javascript some()函数用法详解
Nov 13 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
8个必备的PHP功能开发
Oct 02 PHP
php删除数组中重复元素的方法
Dec 22 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
PHP创建单例后台进程的方法示例
May 23 PHP
php项目中类的自动加载实例讲解
Sep 12 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 #PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 #PHP
php实现文件编码批量转换
Mar 10 #PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 #PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 #PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 #PHP
php function用法如何递归及return和echo区别
Mar 07 #PHP
You might like
php中的三元运算符使用说明
2011/07/03 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
详谈javascript精度问题与调整
2017/07/08 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
python实现用户名密码校验
2020/03/18 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
医药代表个人的求职信分享
2013/12/08 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
单位综合评价意见
2015/06/05 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python