我听说 LINQ 是新的黑色,所以这是我尝试使用 LINQ:
private static Random random = new Random();
public static string RandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
(注意:使用Random
类会使其不适用于任何与安全性相关的内容 ,例如创建密码或令牌。如果需要强大的随机数生成器,请使用RNGCryptoServiceProvider
类。)
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var stringChars = new char[8];
var random = new Random();
for (int i = 0; i < stringChars.Length; i++)
{
stringChars[i] = chars[random.Next(chars.Length)];
}
var finalString = new String(stringChars);
不像 Linq 解决方案那么优雅。
(注意:使用Random
类会使其不适用于任何与安全性相关的内容 ,例如创建密码或令牌。如果需要强大的随机数生成器,请使用RNGCryptoServiceProvider
类。)
这个实现(通过谷歌找到)看起来很健康。
与提供的一些替代方案不同,这个方案是加密声音 。
using System.Security.Cryptography;
using System.Text;
namespace UniqueKey
{
public class KeyGenerator
{
public static string GetUniqueKey(int size)
{
char[] chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
byte[] data = new byte[size];
using (RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
crypto.GetBytes(data);
}
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{
result.Append(chars[b % (chars.Length)]);
}
return result.ToString();
}
}
}
从这里的替代品讨论中挑选出一个