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 批量更新网页内容实现代码
Jan 05 PHP
php array_map()数组函数使用说明
Jul 12 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
php进行md5加密简单实例方法
Sep 19 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
详解javascript函数的参数
2015/11/10 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
《去年的树》教学反思
2014/04/11 职场文书
秋天的雨教学反思
2014/04/27 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
你会写请假条吗?
2019/06/26 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技