至高吴上(Alfa.wu)

一个人,一生,能坚持做好一件事情是多么的牛XX啊!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

编辑本段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的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的Java程序

  import java.util.UUID;

 

  public class guid {

 

  /**

 

  * @param args

 

  */

 

  public static void main(String[] args) {

 

  // TODO Auto-generated method stub

 

  UUID uuid = UUID.randomUUID();

 

  System.out.println(".{"+uuid.toString()+"}");

 

  }

 

  }

 
摘自网上,用于备查
posted on 2012-11-12 00:48  Alfa  阅读(1490)  评论(0编辑  收藏  举报