我认为这篇文章解决了你的问题,也告诉了解决方案。
http://madskristensen.net/post/Generate-unique-strings-and-numbers-in-C.aspx
它取自上面的链接。
每当我们需要生成唯一密钥时都会使用 System.Guid,但它很长。在很多情况下这不是问题,但在它是 URL 的一部分的 Web 场景中,我们需要使用它的字符串表示形式,它有 36 个字符长。它使 URL 混乱,基本上是丑陋的。
在不丢失 GUID 的一些唯一性的情况下不可能缩短它,但是如果我们可以接受 16 个字符的字符串,我们可以取得很大的进步。
我们可以更改标准 GUID 字符串表示:
21726045-e8f7-4b09-abd8-4bcc926e9e28
变成一个较短的字符串:
3c4ebc5f5f2c4edc
以下方法创建较短的字符串,它实际上非常独特。1000 万次迭代不会产生重复。它使用 GUID 的唯一性来创建字符串。
private string GenerateId()
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
如果你想要数字而不是字符串,你可以这样做,但你需要最多 19 个字符。以下方法将 GUID 转换为 Int64。
private long GenerateId()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0);
}
标准 GUID 仍然是确保唯一性的最佳方式,即使它不是 100% 唯一的。