2013-03-15 62 views
1

我正在尋找一種方法來將字符串轉換爲唯一的ID。字符串數字發生器

想法邀請了一個算法,每個字符串發送到它的唯一編號。

我試圖使用哈希碼,但後來意識到兩個字符串可以有相同的哈希碼。

如何爲每個字符串生成唯一的代碼作爲輸入,並且兩個相同的字符串應始終生成相同的ID。

+1

GUID怎麼樣? – frenchie 2013-03-15 16:03:07

+0

我需要相同的字符串來每次生成相同的ID。我不認爲guid適合這裏。 – GutterStink 2013-03-15 16:05:14

+1

@GutterStink - 你已經回答了你自己的問題。無論是或者你要求的是不可能的事情。散列將始終爲兩個相同的字符串生成相同的代碼。如果您希望兩個字符串以不同的方式發送以生成唯一的ID,但也讓它們每次都不會生成相同的ID,而無需額外的元數據。 – Josh 2013-03-15 16:09:40

回答

2

只需追加或預先準備一個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等)將是有益的。

爲你指出正確的方向...

如果返回需要的唯一的字符串是相同的,當你在一個字符串傳遞第二次,你可以保持生成的字符串和檢查的歷史它每次都要求發電。

說實話,有很多方法對皮膚這隻貓...

+0

我需要確保當我通過下一次相同的字符串時生成相同的GUID ... – GutterStink 2013-03-15 16:06:25

+1

@GutterStink,該要求肯定會改變的事情,但這仍然是一種可行的方法。請記住,在發佈您的問題之前真正考慮您的要求非常重要,因此您不需要回答問題的人回答。 – 2013-03-15 16:12:58

+0

我對此表示歉意。下次我會記住這一點。 – GutterStink 2013-03-15 16:32:55

3

,你可以在你的「唯一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

+2

這裏沒有snark;) – Josh 2013-03-15 16:11:20

0

一字符串可能相當長,由16位值的字符組成。可能的字符串數量很大(遠遠超過整數或Guid的範圍)。所以你不能有一個函數「只是」將字符串翻譯成一些保證唯一的代碼,沒有一些幫助。

您可以使用數據庫表:查找表中的字符串。如果它不在那裏,插入它,生成一個新的(順序的)唯一的ID。如果它在那裏,請使用該ID。可能的字符串數量很大,您遇到的字符串數量可能不是。

1

如果原始字符串是敏感的,類似Gravatar,你可以用加密MD5 encryption

正如您所說的,和@Austin Salonen字符串評論,他們不是100%的唯一,但風險低:

How are hash functions like MD5 unique?

+1

@ReacherGilt:是的,它是「單向加密」。我會發佈一個詳細的鏈接,但你的工作已經完成。你應該嘗試閱讀你自己的鏈接,然後用它們來試圖證明某人有錯。我知道這通常不是你所說的加密,但仍然是 – musefan 2013-03-18 08:44:04

+0

@ReacherGilt你剛剛引用了「MD5不是你可能想到的加密」和「MD5是一種單向加密的形式」。這是對MD5的一種加密形式。 – Curt 2013-03-18 15:23:49

+0

@ReacherGilt:堅持你的鏈接......「加密是用算法轉換信息。」 (這是MD5所做的)。並且爲了鞏固這一點,用MD5算法加密的數據也可以被解密 - 儘管我強調了這種不切實際的情況,但它可能是 – musefan 2013-03-18 15:37:36