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命令行,因爲它是更可靠。