回答
您可以使用Base64編碼:
string base64Guid = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
這產生像E1HKfn68Pkms5zsZsvKONw==
的字符串。由於GUID始終爲128位,所以可以省略==
,您知道它總是出現在最後,並且會給出22個字符的字符串。儘管這不像YouTube那麼簡短。
技術上它不是Guid。 Youtube有一個簡單的隨機字符串生成器,您可以使用允許的字符和隨機數生成器的數組在幾分鐘內啓動。
此ID可能不是全球唯一的。 GUID應該是全球唯一的,因爲它們包括不應在別處發生的元素(產生ID的機器的MAC地址,ID生成的時間等)。
如果您需要的是一個唯一的ID您的應用程序使用數字噴泉 - 可能將該值編碼爲十六進制數字。每當你需要一個身份證,從數字噴泉抓住它。
如果您有多個服務器分配ID,您可以獲取一系列數字(數十或數千個,取決於您分配ID的速度),並且應該完成這項工作。一個8位數的十六進制數字會給你40億個ID - 但你的第一個ID將會縮短很多。
9個字符不是Guid。鑑於此,您可以使用int的十六進制表示形式,它將爲您提供8個char字符串。
更新1:說不上爲什麼上面有一個downvote,但任何人都知道:
您可以使用您可能已經有一個id。你也可以使用.GetHashCode對不同的簡單類型,並且你有一個不同的int。你也可以異或不同的領域。如果你願意,你甚至可以使用一個隨機數字 - 嘿,如果你堅持正數,你的可能值遠高於2.000.000.000+以上;)
我也想知道...在任何情況下,我只是發佈了一個更新給出了給出額外的理由做相反 - upvote :) – eglasius 2009-09-22 09:04:25
這可能不是最好的解決方案,但你可以做這樣的事情:
string shortUrl = System.Web.Security.Membership.GeneratePassword(11, 0);
這種方法的唯一問題是,第二個參數實際上是非最小數量的非 - 字母和非數字字符。當我嘗試使用'0'時,我得到了幾個這樣的符號...... – Azimuth 2017-03-31 14:08:44
正如其他人所說,YouTube的VideoId
從技術上來說不是GUID,因爲它不是固有的獨特。
作爲每Wikipedia:
唯一鍵的總數爲2 或3.4×10 38 。這個數字大於 ,那麼相同數字隨機產生兩次的概率可以忽略不計。
唯一性YouTube的VideoId
由其生成器算法維護。
您可以編寫自己的算法,也可以使用某種隨機字符串生成器,並利用SQL中的UNIQUE CONSTRAINT
約束來強制其唯一性。
首先,在數據庫中創建一個UNIQUE CONSTRAINT
:
ALTER TABLE MyTable
ADD CONSTRAINT UniqueUrlId
UNIQUE (UrlId);
然後,例如,生成一個隨機字符串(從philipproplesch的answer):
string shortUrl = System.Web.Security.Membership.GeneratePassword(11, 0);
如果產生UrlId
足夠隨機的,足夠長的時間,當SQL遇到重複的UrlId
時,您應該很少遇到引發的異常。在這種情況下,您可以輕鬆處理您的網絡應用程序中的異常情況。
「GeneratePassword」方法唯一的問題是第二個參數實際上是最小數量的非字母和非數字字符。當我嘗試用'0'時,我得到了幾個這樣的符號... – Azimuth 2017-03-31 14:09:10
就像在接受的答案中提到的那樣,如果您在URL中使用GUID,則會出現問題。下面是一個更完整的答案:
public string ToShortString(Guid guid)
{
var base64Guid = Convert.ToBase64String(guid.ToByteArray());
// Replace URL unfriendly characters with better ones
base64Guid = base64Guid.Replace('+', '-').Replace('/', '_');
// Remove the trailing ==
return base64Guid.Substring(0, base64Guid.Length - 2);
}
public Guid FromShortString(string str)
{
str = str.Replace('_', '/').Replace('-', '+');
var byteArray = Convert.FromBase64String(str + "==");
return new Guid(byteArray);
}
用法:
var guid = Guid.NewGuid();
var shortStr = ToShortString(guid);
// shortStr will look something like 2LP8GcHr-EC4D__QTizUWw
var guid2 = FromShortString(shortStr);
Assert.AreEqual(guid, guid2);
- 1. node.js中的Guid類
- 2. fluentmigrator Guid MySQL類型
- 3. VB6到vb.net - 的GUID和類
- 4. 來自GUID的訪問類
- 5. 使用Asp.net MVC確定類似於YouTube的視圖計數
- 6. Windows Phone 7是否有類似於iPhone的YouTube播放器?
- 7. 如何構建一個類似於YouTube功能的新玩家?
- 8. 如何製作與YouTube網頁類似的網頁?
- 9. Android:如何創建類似YouTube的VR控件?
- 10. 類似於YouTube播放器的視頻播放器建議
- 11. youtube複製列表類似的水平列表jQuery,CSS或Javascript
- 12. iOS YouTube和類似Safari的電影播放器
- 13. 可排序的相似與YouTube主頁
- 14. oembed服務類似於oohembed(YouTube使用JSONP)
- 15. Youtube Api率(類似不喜歡)發佈請求不起作用
- 16. 什麼是GUID類型?
- 17. 未知項目類型GUID
- 18. 似乎無法將CSS注入YouTube?
- 19. NHibernate生成的GUID - 字段類型
- 20. 何時更改類型庫上的GUID
- 21. 打字稿中的GUID類型?
- 22. 創建一個類似於新的YouTube應用程序的菜單
- 23. base64相互轉換似乎JavaScript的GUID不工作
- 24. 通用轉換功能似乎不使用的GUID
- 25. 類似的
- 26. 如何添加一個Youtube相似的超鏈接到非Youtube的視頻
- 27. 操作 '==' 與操作數類型「的Guid '的Guid' 使用DynamicExpression.ParseLambda <T, bool>
- 28. 的Youtube類工作不
- 29. 如何在Javascript中製作一個類似YouTube的下拉部分?
- 30. 如何在網站上顯示類似YouTube的視頻播放器?
該方法具有,將所生成的值可以包含在斜線(/)符號,其可以,當unproperly處理,是不方便的缺點在Url的 – 2011-05-25 21:10:34
雖然我很喜歡這個解決方案,但我同意Jhonny D.不僅可以出現'/',還可以'+'這將完全破壞你的網址。 *嘆息* – c0d3p03t 2015-03-13 21:40:50
只需使用URL安全字符替換'/'和'+',如' - '和'_'。然後,當再次閱讀導引頭時,在解碼之前將其替換回來。 – 2016-05-13 15:38:07