协慌网

登录 贡献 社区

如何生成随机字母数字字符串?

如何在 C#中生成随机的 8 个字符的字母数字字符串?

答案

我听说 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();
        }
    }
}

这里的替代品讨论中挑选出一个