有没有办法创建短的GUID短的唯一代码?

我想创建一个简短的GUID。 有没有办法创建短的GUID短的唯一代码? 我想创建一个票证跟踪号码。

GUID的长度为128位(16字节),因此如果要创建短GUID,则必须更改GUID的编码。

例如,您可以使用base64或ASCII85。

///  /// Creates a GUID which is guaranteed not to equal the empty GUID ///  /// A string public static string CreateGuid() { Guid guid = Guid.Empty; while (Guid.Empty == guid) { guid = Guid.NewGuid(); } // Uses base64 encoding the guid.(Or ASCII85 encoded) // But not recommend using Hex, as it is less efficient. return Convert.ToBase64String(guid.ToByteArray()); } 

Jeff Atwood在他的博客上有一篇文章如何在不丢失信息的情况下将GUID缩短为20个字符:
编码恐怖:装备我们的ASCII装甲

一年内独一无二,明显’随机’

 string UniqueID() { var t = DateTime.UtcNow; long dgit = t.Millisecond * 1000000000L + t.DayOfYear * 1000000L + t.Hour * 10000L + t.Minute * 100L + t.Second; return Convert.ToBase64String(BitConverter.GetBytes(dgit).Take(5).ToArray()).TrimEnd('='); } 

这是一个可定制的字符集

 string UniqueID(string CharList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") { var t = DateTime.UtcNow; char[] charArray = CharList.ToCharArray(); var result = new Stack(); var length = charArray.Length; long dgit = 1000000000000L + t.Millisecond * 1000000000L + t.DayOfYear * 1000000L + t.Hour * 10000L + t.Minute * 100L + t.Second; while (dgit != 0) { result.Push(charArray[dgit % length]); dgit /= length; } return new string(result.ToArray()); } 

真的取决于你的用法。

例如,如果以小于每秒1的速度生成它们,则可以增加32位int(128位GUID的1/4)。 这将以每秒1次的速度持续超过68年。

如果你计算出你的用法,那么计算出你可以逃脱的最小尺寸应该非常简单。 它还取决于您是否希望能够在任何地方生成它们,或者它们是否由单个服务器或软件生成。

尝试使用Base 36 ,获取唯一编号,您只需使用自动编号,并将其另存为Base36。 但是为了让它们随机,你需要别的东西。

我要做的是,将票号哈希或加密为票证跟踪代码。 喜欢,

  code = Base36(MD5(ticketID+"my secrete")); 

如果您希望跟踪代码是唯一的,那么我将使用一些密钥进行加密。