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

争议

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

C++程序示例

  1. #include <objbase.h>  
  2. #include <stdio.h>  
  3. //--生成GUID  
  4. const char* newGUID()  
  5. {  
  6. static char buf[64] = {0};  
  7. GUID guid;  
  8. if (S_OK == ::CoCreateGuid(&guid))  
  9. {  
  10. _snprintf(buf, sizeof(buf)  
  11. "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"  
  12. , guid.Data1  
  13. , guid.Data2  
  14. , guid.Data3  
  15. , guid.Data4[0], guid.Data4[1]  
  16. , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]  
  17. , guid.Data4[6], guid.Data4[7]  
  18. );  
  19. }  
  20. return (const char*)buf;  
  21. }  
  22. int main(int argc, char* argv[])  
  23. {  
  24. //--COM  
  25. CoInitialize(NULL);  
  26. printf(newGUID());  
  27. printf("\n");  
  28. //--COM  
  29. CoUninitialize();  
  30. return 0;  
  31. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值