The GUID generator GuidGen.exe provided by VC can only generate random GUID. This tool can generate GUID base on a
string such as class name. This means one class name maps to one GUID.
RFC 4122 described the algorithm for creating a Name-Based UUID.
The requirements for these types of UUIDs are as follows:
- The UUIDs generated at different times from the same name in the same namespace MUST be equal.
- The UUIDs generated from two different names in the same namespace should be different (with very high probability).
- The UUIDs generated from the same name in two different namespaces should be different with (very high probability).
- If two UUIDs that were generated from names are equal, then they were generated from the same name in the same namespace (with very high probability).
The algorithm for generating a UUID from a name and a namespace are as follows:
- Allocate a UUID to use as a "name space ID" for all UUIDs generated from names in that namespace; see Appendix C for some pre-defined values.
- Choose either MD5  or SHA-1  as the hash algorithm; If backward compatibility is not an issue, SHA-1 is preferred.
Using the Code
I used the sample implementation code from the RFC 4122 document and I fixed the code to let it use
openssl implementation of SHA1.
It uses SHA1 to generate UUID:
uuid_create_sha1_from_name(&id, NameSpace_DNS, ss, length);
You can change it to use MD5 easily:
uuid_create_md5_from_name(&id, NameSpace_DNS, ss, length);
To build the source code, you need to download openssl from http://openssl.org, and build it as its guide.
Or you can just use the demo tool, it requires .NET Framework runtime.
- 27th July, 2006: Initial post