如何使用c#始终生成17个字符的唯一字母数字数据。
答案 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?