当前位置:asp编程网>技术教程>Asp教程>  正文

GUID的介绍以及各种语言生成guid的方法

2012-06-04 14:34:34   来源:博客园    作者:佚名   浏览量:2731   收藏

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;
  }



关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网