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

时间:2011-04-06 12:49:04

标签: c# random

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

3 个答案:

答案 0 :(得分:5)

生成新的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()));

更新指导格式

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

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

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

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

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

答案 1 :(得分:4)

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

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

或者你想要的任何东西。

答案 2 :(得分:2)

您可以使用硬编码字符集 -

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

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

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

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