2011-09-22 93 views
1

我有一种情况,我需要在'实体'之间创建某种唯一性,但它不是GUID,并且它不保存在数据库中(它是保存,但是,只是不是由数据库)。在数据库外部生成一个非guid唯一键

密钥的基本用途仅仅是冗余检查。它不必像真正的“主键”那样具有可扩展性,但是用我能想到的最简单的术语来说,这就是它的工作原理。

[receiver]List<possibilities>

possibilities独立存在的,但许多将具有相同的值(不可能预测的。这是由设计)

经常地,接收机possibilities列表将必须被清空,然后再填充(这是一个业务需求)。

关键基本上用于添加一个非常轻量级的冗余检查。换句话说,有时候可能会重复相同的可能性,有时它只会出现在接收者列表中。

我基本上想要使用一些非常简单的东西。一个字符串就足够了。我只是想弄清楚一个适度的算法来完成这个。我想过使用GetHashCode()方法,但我不确定这是多么可靠。我能想一些想法吗?

+0

你的实体的形状是什么?你可以显示字段或描述它吗?应该通常重写GetHashCode,并且在那里你可以创建一些东西,它会根据属性值为每个实体返回一个唯一的结果类型。无论如何不是最好的散列。 –

回答

0

如果您可以乍一看使用GetHashCode(),那么也可以使用MD5散列,以获得较少的冲突概率。将得到的MD5可以通过编码其底座64被存储为24 charachter串,让看到这个例子:

public static class MD5Gen 
    { 
     static MD5 hash = MD5.Create(); 
     public static string Encode(string toEncode) 
     { 
      return Convert.ToBase64String(
      hash.ComputeHash(Encoding.UTF8.GetBytes(toEncode))); 
     } 
    } 

与此你在MD5哈希以字符串格式编码源字符串太。您只需根据字符串编写“可能性”类。

0

试试这个产生Guid。

的VBScript函数生成一个UUID/GUID

如果您使用的是Windows,你可以使用下面的简单的VBScript来生成UUID。只需将代码保存到名为createguid.vbs的文件中,然后在命令提示符下运行cscript createguid.vbs。

Set TypeLib = CreateObject("Scriptlet.TypeLib") 
NewGUID = TypeLib.Guid 
WScript.Echo(left(NewGUID, len(NewGUID)-2)) 
Set TypeLib = Nothing 

创建UUID /通过Windows命令行

If you have the Microsoft SDK installed on your system, you can use the utility uuidgen.exe, which is located in the "C:\Program Files\Microsoft SDK\Bin" directory 

GUID或尝试同样的更多信息。

Link

我要说去为Windows命令行,因为它是更可靠。