在我的網站中,我需要創建一個管理員用戶用來將其發送給一組用戶的唯一URL。每當管理員創建新表單時,都會創建唯一的URL。我知道我可以使用guid來表示唯一的URL,但我正在尋找更短的內容(希望大約有4個字符,因爲它更易於記憶)。我怎麼會產生ASP.NET專屬的網址,應該是這樣的:在ASP.NET中創建唯一的URL
http://mydomain.com/ABCD
我瞭解一些URL縮短服務網站(例如bit.ly)做這樣的事情在很短的唯一的URL。有沒有我可以使用的算法?
在我的網站中,我需要創建一個管理員用戶用來將其發送給一組用戶的唯一URL。每當管理員創建新表單時,都會創建唯一的URL。我知道我可以使用guid來表示唯一的URL,但我正在尋找更短的內容(希望大約有4個字符,因爲它更易於記憶)。我怎麼會產生ASP.NET專屬的網址,應該是這樣的:在ASP.NET中創建唯一的URL
http://mydomain.com/ABCD
我瞭解一些URL縮短服務網站(例如bit.ly)做這樣的事情在很短的唯一的URL。有沒有我可以使用的算法?
檢查這些鏈接。希望你能找到他們有所幫助:
Using the Google URL Shortener API with ASP.NET MVC 3 and C#
ASP.NET的Shortener不好,它使用隨機數字。 – 2011-06-01 19:31:37
只要寫一個算法來選擇一個GUID一定數目的字符(如第4個或8個字符,每一個連字符最多4個或8個字符)。
一定要檢查其針對數據庫以確保它尚未被使用,並且是否重新生成它。作爲一種保障措施,可能會超時(如果它試圖產生10個並且它們全部被使用,放棄),但不太可能使用任何可能的組合。
如何像
public static string GetRandomString (int length)
{
string charPool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
StringBuilder sb = new StringBuilder();
Random rnd = new Random();
while ((length--) > 0)
sb.Append(charPool[(int)(rnd.NextDouble() * charPool.Length)]);
return sb.ToString();
}
,並呼籲
GetRandomString(4);
`rnd.Next(charPool.Length)`對隨機調用會更好。但是這種方法存在問題,因爲它有可能會不止一次地產生相同的隨機字符串,從而導致衝突。 – 2011-02-17 05:04:12
如果長度> 5,在較短的長度之前,會在產生大約46k輸出後產生衝突。 – CodesInChaos 2014-04-15 08:21:43
相信bit.ly執行散列,然後編碼的base64的結果。你可以做同樣的事情,雖然它會超過4個字符。一定要添加處理散列衝突的代碼。當第一個散列正在使用時,您可以追加1,2,3等。
另一種方法是在數據庫中創建一個新表。每次你需要一個新的URL時,在這個表格中添加一行。你可以使用PK作爲URL值。這將只使用四個字符爲您提供多達10,000個唯一值。 Base64編碼甚至更多。
是否有任何理由不能在SQL中使用標識列,如果您希望它們的編號始終爲4個字符,您可以在「1000」處開始種子。對此沒有隨意性,但聽起來這不是問題。 – Zachary 2011-02-17 04:44:26