生成随机数 C#代码实现
时间: 2024-12-30 10:32:33 浏览: 8
### C# 中生成随机数的代码实现
在 C# 中,可以使用 `System.Random` 类来生成伪随机数。为了提高随机性的质量,可以通过加密安全的方式初始化随机种子。
#### 使用加密安全的方法获取随机种子并生成随机整数
通过调用系统的密码学服务提供程序来创建高质量的随机种子:
```csharp
/// <summary>
/// 获取高安全性随机种子
/// </summary>
/// <returns>返回一个32位有符号整型作为随机种子</returns>
static int GetRandomSeed()
{
byte[] bytes = new byte[4];
using (var rng = new System.Security.Cryptography.RNGCryptoServiceProvider())
{
rng.GetBytes(bytes);
}
return BitConverter.ToInt32(bytes, 0);
}
```
利用上述方法得到的安全种子实例化 `Random` 对象,并据此生成指定范围内的随机数值:
```csharp
/// <summary>
/// 返回介于0到58之间的随机整数(含头不含尾)
/// </summary>
/// <returns></returns>
static int GenerateRandomNumber()
{
var randomGenerator = new Random(GetRandomSeed());
return randomGenerator.Next(0, 59); // 取值区间 [0, 59)
}
```
此方式能够有效减少因时间戳等因素造成的重复模式,适用于对随机性要求较高的场景[^1]。
对于某些应用场景可能还需要生成特定长度或类型的字符串形式的随机数据,则可采用如下函数:
```csharp
#region 产生随机字符
public static string GetRandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
char[] buffer = new char[length];
using (var rng = new System.Security.Cryptography.RNGCryptoServiceProvider())
{
for (int i = 0; i < length; ++i)
{
var randomNumber = new byte[1];
do
{
rng.GetBytes(randomNumber);
buffer[i] = chars[randomNumber[0] % chars.Length];
} while (!char.IsLetterOrDigit(buffer[i]));
}
}
return new string(buffer);
}
#endregion
```
这段代码实现了生成由大小写字母和数字组成的固定长度随机字符串的功能[^2]。
阅读全文