c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
//这样产生0 ~ 100的强随机数(含100)
int max = 100;
int rnd = int.MinValue;
decimal _base = (decimal)long.MaxValue;
byte[] rndSeries = new byte[8];
System.Security.Cryptography.RNGCryptoServiceProvider rng
= new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(rndSeries);
//不含100需去掉+1
rnd = (int)(Math.Abs(BitConverter.ToInt64(rndSeries, 0)) / _base * (max+1));
//这个rnd就是你要的随机数,
//但是要注意别扔到循环里去,实例化RNG对象可是很消耗资源的
原文地址:http://www.2cto.com/kf/201007/52493.html
/// <summary>
/// 生成随机数
/// </summary>
/// <param name="minVal">最小值(包含)</param>
/// <param name="maxVal">最大值(不包含)</param>
/// <returns></returns>
public static int GetRandom(int minVal, int maxVal)
{
//这样产生0 ~ 100的强随机数(不含100)
int m = maxVal - minVal;
int rnd = int.MinValue;
decimal _base = (decimal)long.MaxValue;
byte[] rndSeries = new byte[8];
System.Security.Cryptography.RNGCryptoServiceProvider rng
= new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(rndSeries);
long l = BitConverter.ToInt64(rndSeries, 0);
rnd = (int)(Math.Abs(l) / _base * m);
return minVal + rnd;
}
使用:
int randomi = 0;
randomi = GetRandom(100000, 999999);
最新文章
- 在centos7(EL7.3 即 kernel-3.10.0-514.X )上安装BCM4312无线网卡驱动要注意的问题
- SQL Azure (15) SQL Azure 新的规格
- wkhtmltopdf 安装使用笔记(CentOS6)
- go语言 类型:整型
- OpenStack 的防火墙规则流程
- Visual Studio 调试技巧
- OC-设计模式KVC+KVO定义及使用
- Java [Leetcode 206]Reverse Linked List
- jquery多级手风琴插件–accordion.js
- codeforces 416B. Appleman and Tree 树形dp
- 决策树J48算法
- (2017浙江省赛E)Seven Segment Display
- linux下的外网木马前期要的工具
- tkinter简介(一)
- MySQL查看表占用空间大小
- CodeForces - 1102A
- Linux yum源
- CENTOS7常用的基础命令集合(一)
- MSI-X 之有别于MSI
- Android cannot be cast to android.app.Fragment