像YouTube一样的GUID

是否有可能像YouTube(N7Et6c9nL9w)一样产生短的GUID?

如何做呢? 我想在networking应用程序中使用它。

7 Solutions collect form web for “像YouTube一样的GUID”

你可以使用Base64:

string base64Guid = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); 

这会生成一个string,例如E1HKfn68Pkms5zsZsvKONw== 。 由于GUID总是128位,所以可以省略==你知道总是会出现在最后,这会给你一个22个字符的string。 尽pipe这不像YouTube那么简短。

9个字符不是Guid。 考虑到这一点,你可以使用int的hex表示,它给你一个8个字符的string。

更新1:不知道为什么上面得到了downvote,但任何人想知道:

你可以使用一个你可能已经拥有的ID。 也可以使用.GetHashCode针对不同的简单types,在那里你有一个不同的int。 你也可以不同的领域。 如果你想进入,你甚至可以使用一个随机数字 – 嘿,如果你坚持积极的话,你就有超过2000.000.000+以上的可能值;)

正如其他人所说,YouTube的VideoId在技​​术上并不是一个GUID,因为它本身并不是独一无二的。

根据Wikipedia :

唯一密钥的总数是2 128或3.4×10 38 。 这个数字是如此之大以至于随机产生相同数字的概率是可以忽略不计的。

YouTube的VideoId的唯一性由其生成器algorithm维护。

您可以编写自己的algorithm,也可以使用某种随机string生成器,并利用SQL中的UNIQUE CONSTRAINT约束来强化其唯一性。

首先,在你的数据库中创build一个UNIQUE CONSTRAINT

 ALTER TABLE MyTable ADD CONSTRAINT UniqueUrlId UNIQUE (UrlId); 

然后,例如,生成一个随机string(来自philipproplesch的答案 ):

 string shortUrl = System.Web.Security.Membership.GeneratePassword(11, 0); 

如果生成的UrlId足够随机且足够长,那么当SQL遇到重复的UrlId时,您应该很less遇到引发的exception。 在这样的事件中,您可以轻松地处理您的Web应用程序中的exception。

就像接受的答案中提到的那样,如果您在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); 

从技术上讲,这不是一个Guid。 Youtube有一个简单的随机string生成器,你可以使用允许的字符和随机数生成器的数组在几分钟内甩掉。

这可能不是最好的解决scheme,但你可以这样做:

 string shortUrl = System.Web.Security.Membership.GeneratePassword(11, 0); 

这个ID可能不是全球唯一的。 GUID应该是全局唯一的,因为它们包括不应该出现在别处的元素(生成ID的机器的MAC地址,生成ID的时间等)

如果你需要的是一个在你的应用程序中唯一的ID,可以使用一个数字喷泉 – 也许把这个数值编码为一个hex数字。 每次你需要一个身份证,从数字喷泉抓。

如果你有多个服务器分配ID,你可以获得一个数字范围(几十或几千,取决于你分配ID的速度),这应该做的工作。 一个8位hex数字会给你40亿个ID – 但是你的第一个ID将会缩短很多。

  • 在由Servlet转发的JSP中获取请求URL
  • 如何编码URL参数?
  • 绝对url省略协议(scheme),以保留当前页面的一个
  • 获取UIWebView的当前url
  • 如何parsing一个URL到JavaScript中的主机名和path?
  • 简单的方法来parsingC ++跨平台的url?
  • 在包含SVG标记元素的页面上使用基本标记无法呈现标记
  • 我怎样才能从我的应用程序在Android的Web浏览器中打开一个URL?
  • 传递数组作为url参数
  • url和加号
  • urlencode与rawurlencode?