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 COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 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中ob_flush和flush的区别
2014/11/27 PHP
phalcon框架使用指南
2016/02/23 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
用javascript实现画板的代码
2007/09/05 Javascript
通过修改referer下载文件的方法
2008/05/11 Javascript
javascript 写类方式之一
2009/07/05 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
Python Paramiko模块的安装与使用详解
2016/11/18 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python3 使用traceback定位异常实例
2020/03/09 Python
Python实现EM算法实例代码
2020/10/04 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
《囚绿记》教学反思
2014/03/01 职场文书
卫生系统先进事迹
2014/05/13 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
世界地球日活动总结
2015/02/09 职场文书
2015年导购员工作总结
2015/04/25 职场文书
辩护词范文大全
2015/05/21 职场文书
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android