2014-09-10 80 views
1

我必須追加一個唯一的代碼作爲querystring,爲每個生成的url。 所以,我選擇的選項是縮短guid(在這裏找到)。縮寫guid的唯一性

public static string CreateGuid() 
     {   

      Guid guid = Guid.NewGuid(); 
      return Convert.ToBase64String(guid.ToByteArray()); 
     } 

這將是唯一的一個GUID,因爲我有幾個網址生成,這個GUID將被保存在數據庫中。

+0

可能重複的[guid to base64,for URL](http://stackoverflow.com/questions/1032376/guid-to-base64-for-url) – Fredou 2014-09-10 15:49:58

回答

1

如果你在url中使用這個,你應該注意。雖然字符串會更短,這將潛在地具有URL中的非法字符,所以你可能需要運行它過去

HttpUtility.UrlEncode()

是安全的。當然,一旦你這樣做,它會再次變得更長。

編輯:

您的評論使得它看起來像你想要某種數學的,所以這裏有雲:

讓我們假設你有24個字母數字字符的時候,和外殼沒有關係。這意味着每個角色可以是0-9 + a-z或36種可能性。這使得它有24^36種不同的可能的字符串。請參閱本網站,那麼:

http://davidjohnstone.net/pages/hash-collision-probability

它可以讓你在可能的值,你將需要運行代碼的次數插頭。 24^36相當於2^100(我在一些谷歌搜索後到達這個數字,可能是不正確的)。在上面的鏈接中插入100到「散列中的位數」字段意味着如果你運行你的代碼1000000次,你仍然只有3.944300×10^19的衝突機率,或者相同的值出現兩次。這是微乎其微的,但如果你正在寫的東西將被使用的次數超過這個次數,你可能會遇到問題。

+0

我正在考慮刪除任何非字母數字或將其替換爲任何字母。唯一值得關注的是,我是否還會有獨特的短指導 – Qwerty 2014-09-10 15:11:40

+0

非常感謝welegan – Qwerty 2014-09-11 07:32:49

2

是的,guid的默認字符串表示形式是base16。通過重新設置與base64相同的值,你會得到一個更短(但可能更醜)的字符串。

+0

謝謝.......... ... – Qwerty 2014-09-10 14:54:38