如何生成唯一的字母数字?

如何使用c#始终生成17个字符的唯一字母数字数据。

生成新的Guid,并用模62分割17次。你得到的每个数字都是上面描述的char数组中的索引(“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890”)。 通过使用Guid,您可以保证您的价值与Guid一样独特。

如果您担心丢失唯一位,您可以使用MD5散列GUID,如下所示:

Guid guidValue = Guid.NewGuid(); MD5 md5 = MD5.Create(); Guid hashed = new Guid(md5.ComputeHash(guidValue.ToByteArray())); 

更新 Guid格式

根据该文档( RFC 4122 )并与C#生成的GUID进行比较,它们是随机类型。

此类型具有以下模式: xxxxxxxx-xxxx-4xxx-Vxxx-xxxxxxxxxxxx ,其中

  • x是随机数和
  • V是位布局为10y的数字,其中yy是两个随机位。

所以,这里我们有128个随机位。因此,就唯一性而言,Guid只是一个大的随机数,您可以自由使用任何其他能够生成88位随机数的随机数生成算法(例如RNGCryptoServiceProvider )。

当然,用于生成Guids的方法可能会在未来版本的框架中发生变化,但目前Guid.NewGuid()在代码方面看起来像廉价的随机数生成器。

你可以尝试… http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx

GetRandomFileName方法返回加密强大的随机字符串,可用作文件夹名称或文件名。

或者无论你想要什么。

你可以有硬编码的字符集 –

 char[] chars = new char[62]; chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890".ToCharArray(); 

然后使用0到62之间的随机数,每次都可以获得随机字符并附加到字符串中。

但是,您无法保证在某个时间段内,您也不会获得重复的字母数字字符串。

作为替代方案,如果可能,为什么不使用GUID ?