我正在尋找一種方法來將字符串轉換爲唯一的ID。字符串數字發生器
想法邀請了一個算法,每個字符串發送到它的唯一編號。
我試圖使用哈希碼,但後來意識到兩個字符串可以有相同的哈希碼。
如何爲每個字符串生成唯一的代碼作爲輸入,並且兩個相同的字符串應始終生成相同的ID。
我正在尋找一種方法來將字符串轉換爲唯一的ID。字符串數字發生器
想法邀請了一個算法,每個字符串發送到它的唯一編號。
我試圖使用哈希碼,但後來意識到兩個字符串可以有相同的哈希碼。
如何爲每個字符串生成唯一的代碼作爲輸入,並且兩個相同的字符串應始終生成相同的ID。
只需追加或預先準備一個GUID:
string foo = "MyString";
//Simply throw it on the end
string uniqueString = foo + Guid.NewGuid();
//Prepend with underscore
string uniqueString = String.Format("{0}_{1}", foo, Guid.NewGuid());
//Append with underscore
string uniqueString = String.Format("{0}_{1}", Guid.NewGuid(), foo);
編輯(新要求)
您還沒有提供足夠的信息讓我發佈一個偉大的回答這個問題。例如,環境(網絡,winforms等)將是有益的。
爲你指出正確的方向...
如果返回需要的唯一的字符串是相同的,當你在一個字符串傳遞第二次,你可以保持生成的字符串和檢查的歷史它每次都要求發電。
說實話,有很多方法對皮膚這隻貓...
我需要確保當我通過下一次相同的字符串時生成相同的GUID ... – GutterStink 2013-03-15 16:06:25
@GutterStink,該要求肯定會改變的事情,但這仍然是一種可行的方法。請記住,在發佈您的問題之前真正考慮您的要求非常重要,因此您不需要回答問題的人回答。 – 2013-03-15 16:12:58
我對此表示歉意。下次我會記住這一點。 – GutterStink 2013-03-15 16:32:55
,你可以在你的「唯一ID」字?如果是的話,這應該工作;-)
public string MakeUnique(string s)
{
return s;
}
所有ID將是唯一的所提供的值。相同的字符串將產生完全相同的ID。這就是你想要的嗎?
如果這是你想要的整數結果,如何將每個字符轉換成int ...
public int MakeUnique(string s)
{
string result = "";
foreach(var c in s)
{
result += ((int)c).ToString();
}
return Int.Parse(result);
}
警告:這將打破,如果字符串是too big
這裏沒有snark;) – Josh 2013-03-15 16:11:20
一字符串可能相當長,由16位值的字符組成。可能的字符串數量很大(遠遠超過整數或Guid的範圍)。所以你不能有一個函數「只是」將字符串翻譯成一些保證唯一的代碼,沒有一些幫助。
您可以使用數據庫表:查找表中的字符串。如果它不在那裏,插入它,生成一個新的(順序的)唯一的ID。如果它在那裏,請使用該ID。可能的字符串數量很大,您遇到的字符串數量可能不是。
如果原始字符串是敏感的,類似Gravatar,你可以用加密MD5 encryption
正如您所說的,和@Austin Salonen字符串評論,他們不是100%的唯一,但風險低:
@ReacherGilt:是的,它是「單向加密」。我會發佈一個詳細的鏈接,但你的工作已經完成。你應該嘗試閱讀你自己的鏈接,然後用它們來試圖證明某人有錯。我知道這通常不是你所說的加密,但仍然是 – musefan 2013-03-18 08:44:04
@ReacherGilt你剛剛引用了「MD5不是你可能想到的加密」和「MD5是一種單向加密的形式」。這是對MD5的一種加密形式。 – Curt 2013-03-18 15:23:49
@ReacherGilt:堅持你的鏈接......「加密是用算法轉換信息。」 (這是MD5所做的)。並且爲了鞏固這一點,用MD5算法加密的數據也可以被解密 - 儘管我強調了這種不切實際的情況,但它可能是 – musefan 2013-03-18 15:37:36
GUID怎麼樣? – frenchie 2013-03-15 16:03:07
我需要相同的字符串來每次生成相同的ID。我不認爲guid適合這裏。 – GutterStink 2013-03-15 16:05:14
@GutterStink - 你已經回答了你自己的問題。無論是或者你要求的是不可能的事情。散列將始終爲兩個相同的字符串生成相同的代碼。如果您希望兩個字符串以不同的方式發送以生成唯一的ID,但也讓它們每次都不會生成相同的ID,而無需額外的元數據。 – Josh 2013-03-15 16:09:40