📜  生成随机字符串 - C# (1)

📅  最后修改于: 2023-12-03 15:40:52.198000             🧑  作者: Mango

生成随机字符串 - C#

在开发过程中,有时需要生成随机字符串用于密码、验证码等场景。在 C# 中,可以使用 Random 类或 Guid 类来生成随机字符串。

1. 使用 Random 类
public static string GenerateRandomString(int length)
{
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var random = new Random();
    var result = new string(Enumerable.Repeat(chars, length)
        .Select(s => s[random.Next(s.Length)]).ToArray());
    return result;
}

以上函数会生成一个由大写字母、小写字母和数字随机组成的、指定长度的字符串。

  • const string chars: 字符集,包含所有可能的字符。
  • var random = new Random(): 创建随机数生成器。
  • Enumerable.Repeat(chars, length): 将字符集重复 length 次。
  • s => s[random.Next(s.Length)]: 从字符集中随机取一个字符。
  • new string(...): 将字符集转换为字符串。
  • return result: 返回生成的结果。

注意:由于 Random 类算法的限制,生成的随机数并不严格随机,可能会产生重复的字符。如果需要生成高质量的随机数,建议使用 System.Security.Cryptography 命名空间中的函数。

2. 使用 Guid 类
public static string GenerateRandomString(int length)
{
    var bytes = new byte[length];
    using var random = new RNGCryptoServiceProvider();
    random.GetBytes(bytes);
    return Convert.ToBase64String(bytes);
}

以上函数会生成一个长度为指定值的随机字符串。

  • new byte[length]:创建一个空的字节数组。
  • using var random = new RNGCryptoServiceProvider():创建随机数生成器。
  • random.GetBytes(bytes):用随机数填充字节数组。
  • Convert.ToBase64String(bytes):将字节数组转换为 Base64 编码字符串。
  • return: 返回生成的结果。

注意:由于 Base64 编码存在额外的字符(+/=),生成的结果并不是纯字母数字串。如果需要生成纯字母数字串,可以将 Convert.ToBase64String() 替换为 BitConverter.ToString()

参考资料