简介
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去除。
- #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;
- }