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简单的会话类代码
Aug 08 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
必须收藏的php实用代码片段
Feb 02 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
js打造数组转json函数
2015/01/14 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
JS实现图片预览的两种方式
2017/06/27 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
速记Python布尔值
2017/11/09 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
python3实现微型的web服务器
2019/09/03 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python中and和or如何使用
2020/05/28 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
合作经营协议书
2014/04/17 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
美丽心灵观后感
2015/06/01 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
mysql sock 文件解析及作用讲解
2022/07/15 MySQL