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 存取 MySQL 数据库的一个例子
Oct 09 PHP
PHP 面向对象 final类与final方法
May 05 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
PHP常用正则表达式集锦
Aug 17 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
php提示Failed to write session data错误的解决方法
Dec 17 PHP
PHP如何使用Memcached
Apr 05 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
php5.x禁用eval的操作方法
Oct 19 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
基于Python解密仿射密码
2019/10/21 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Python如何将装饰器定义为类
2020/07/30 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
团队口号大全
2014/06/06 职场文书
建筑工地宣传标语
2014/06/18 职场文书
党校毕业心得体会
2014/09/13 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
紧急通知
2015/04/17 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
社区党建工作总结2015
2015/05/13 职场文书
2019年大学推荐信
2019/06/24 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书