GUID的介绍和各种语言(asp,c#,php)生成guid的方法

GUID概念
  GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。   在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。

GUID格式
  GUID 的格式为"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

GUID特点
  ★GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。 ★世界上的任何两台计算机都不会生成重复的 GUID 值。 ★需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。 ★GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。

GUID争议
  由于GUID值产生的潜在弊端已经引起了保密性提倡者的关注。1999年3月,美国联邦商务委员会接到要求,对微软的GUID值使用进行调查。争议主要涉及Office 97和Office 2000文档对GUID值的使用。Office文档,如Word文件或Excel电子数据表,所使用的GUID值对用户是不可见的。但有很多报道宣称,文档的作者是可以通过GUID值的跟踪查到的,即使作者已经采用特殊方法,他们还是可以被追踪到。 为了回应上述问题,微软已经发布了一个Office 97修补版SR2,它禁止了GUID功能的使用,并且还可以将现存文档的GUID去除。
   潜在的对Intel处理器序列号滥用的问题与上述GUID值的问题本质是一样的。

生成GUID的ASP程序
 Dim objTypeLib
 Set objTypeLib = Server.CreateObject("Scriptlet.TypeLib")
 GUID = Left(CStr(objTypeLib.Guid),38)
 Set objTypeLib = Nothing
生成GUID的VB程序
  Option Explicit
  Private Type GUID
  Data1 As Long
  Data2 As Long
  Data3 As Long
  Data4(8) As Byte
  End Type
  Private Declare Function CoCreateGuid Lib "ole32.dll" (pguid As GUID) As Long  
   Private Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As Any, ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long
  Private Function GUIDGen() As String '生成GUID
      Dim uGUID As GUID
      Dim sGUID As String
      Dim bGUID() As Byte
      Dim lLen As Long
      Dim RetVal As Long
      lLen = 40
      bGUID = String(lLen, 0)
      CoCreateGuid uGUID '把结构转换为一个可显示的字符串
      RetVal = StringFromGUID2(uGUID, VarPtr(bGUID(0)), lLen)
      sGUID = bGUID
      If (Asc(Mid$(sGUID, RetVal, 1)) = 0) Then RetVal = RetVal - 1
       GUIDGen = Left$(sGUID, RetVal)
      End
 Function

生成GUID的C++程序
  #include <objbase.h>
  #include <stdio.h>
  //--生成GUID
  const char* newGUID()
  {
  static char buf[64] = {0};
  GUID guid;
  if (S_OK == ::CoCreateGuid(&guid))
    {
   _snprintf(buf, sizeof(buf), "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
    }
  return (const char*)buf;
  }
  int main(int argc, char* argv[])
  {
  //--COM
  CoInitialize(NULL);
  printf(newGUID());
  printf("\n");
  //--COM
  CoUninitialize();
  return 0;
  }

 

生成GUID的C#程序
  using System;
  namespace GUID测试
  {
   class Program
   {
    static void Main(string[] args)
    {
     Console.WriteLine(System.Guid.NewGuid());
     Console.ReadKey();
    }
   }
  }

生成GUID的PHP程序
类名: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);   
    }   
}   
?>
使用方法:
<?php   
require_once("guid.class.php");   
$Guid = new Guid();   
print $Guid->toString();   
?>   

本博客所有文章如无特别注明均为原创。作者:sysdee复制或转载请以超链接形式注明转自 成功志
原文地址《GUID的介绍和各种语言(asp,c#,php)生成guid的方法
分享到:更多

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)