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

如何在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 maxSize)
        {
            char[] chars = new char[62];
            chars =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
            byte[] data = new byte[1];
            using (RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
            {
                crypto.GetNonZeroBytes(data);
                data = new byte[maxSize];
                crypto.GetNonZeroBytes(data);
            }
            StringBuilder result = new StringBuilder(maxSize);
            foreach (byte b in data)
            {
                result.Append(chars[b % (chars.Length)]);
            }
            return result.ToString();
        }
    }
}

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

链接地址: http://www.djcxy.com/p/17717.html

上一篇: How can I generate random alphanumeric strings in C#?

下一篇: Random String Generator Returning Same String