我在为字符串生成GUID时遇到问题 - 例如:
Guid g = New Guid("Mehar");
如何计算GUID "Mehar"?我得到一个例外.
Nac*_*mpi 98
相当古老的这个线程,但这就是我们解决这个问题的方法:
由于来自.NET框架的Guid是任意16字节或128位,您可以通过将任何散列函数应用于生成16字节散列的字符串并随后将结果传递给Guid构造函数来从任意字符串计算Guid.
我们决定使用MD5哈希函数,示例代码可能如下所示:
string input = "asdfasdf";
using (MD5 md5 = MD5.Create())
{
    byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(input));
    Guid result = new Guid(hash);
}
请注意,这个Guid一代本身有一些缺陷,因为它取决于哈希函数的质量!如果您的哈希函数为您使用的大量字符串生成相等的哈希值,则会影响您的软件行为.
以下是产生128位摘要的最流行的哈希函数列表:
请注意,也可以使用其他散列函数来生成更大的摘要,并简单地截断它们.因此,使用更新的散列函数可能是明智的.列出一些:
今天(2013年8月)160bit SHA1哈希可以被认为是一个不错的选择.
您正在寻找的可能是生成版本3或版本5 UUID,它们是基于名称的UUID.(建议使用版本5).我认为.NET框架并不支持它.请参见http://en.wikipedia.org/wiki/Universally_Unique_Identifier
我做了一些谷歌搜索,看看我是否能在Win32 API中找到一些东西,但没有任何结果.但是,我确信.NET框架在某处隐藏了一些实现,因为据我所知,在.NET中生成COM对象时,如果没有提供显式GUID,那么.NET框架会生成一个名称基于UUID创建一个定义良好的ClassID和InterfaceID,即每次重新编译时都不会改变的UUID(如VB6).但这可能是隐藏的,所以我猜你需要自己实现算法.幸运的是,.NET提供了MD5和SHA1算法,所以我认为实现版本3和版本5 UUID应该太难了.
我认为您对 Guid 的实际含义存在误解。没有诸如“Mehar”之类的字符串的 Guid 表示形式。
存在重载的原因new Guid(String s)是,您可以从典型的字符串表示形式创建 guid,例如“00000000-0000-0000-0000-000000000000”。
有关 Guid 实际含义的更多信息,请参阅 wiki 文章。
http://en.wikipedia.org/wiki/Globally_Unique_Identifier