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

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

C# 随机字符串

在开发过程中,我们有时需要生成随机字符串来实现一些功能。这篇文章将介绍如何在 C# 中生成随机字符串。

方法一:使用随机数
public static string GetRandomString(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;
}

这个方法使用 Random 类实现,可以生成任意长度的随机字符串。在这个方法中,我们定义了包含所有可用字符的字符串 chars,通过 Random 类生成一个随机数,然后选择一个 chars 字符串的随机索引,以此来构建字符串。

方法二:使用 Guid
public static string GetRandomString()
{
    var guid = Guid.NewGuid();
    return Convert.ToBase64String(guid.ToByteArray())
        .Replace("/", "")
        .Replace("+", "");
}

另一种生成随机字符串的方式是使用 Guid 类,它可以生成唯一的标识符。通过将 Guid 对象的 ToByteArray 方法返回的 byte 数组转换成 Base64 字符串,然后过滤掉 /+ 这两个字符,得到最终的随机字符串。

方法三:使用 RandomNumberGenerator
public static string GetRandomString(int length)
{
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var rng = new RNGCryptoServiceProvider();
    var result = new char[length];
    var buffer = new byte[sizeof(uint)];

    for (var i = 0; i < length; i++)
    {
        rng.GetBytes(buffer);
        var index = BitConverter.ToUInt32(buffer, 0) % chars.Length;
        result[i] = chars[(int)index];
    }

    return new string(result);
}

最后一个方法使用 RNGCryptoServiceProvider 类实现。它是一个强大的随机数生成器,官方推荐使用它来生成随机数。在这个方法中,我们使用 RNGCryptoServiceProvider 类生成随机数,将其转换为一个 uint 类型的索引,并使用 chars 字符串中的相应字符来构建结果字符串。

以上就是在 C# 中生成随机字符串的三种方法,可以根据实际需求选择合适的方法。