7 C# Random 生成随机数字和字母.doc_第1页
7 C# Random 生成随机数字和字母.doc_第2页
7 C# Random 生成随机数字和字母.doc_第3页
7 C# Random 生成随机数字和字母.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C# .NET Random 生成随机数字和字母1:随机数生成器类 Random 是 .NET 的伪随机数生成器,要生成各种类型的随机数,必须先得到它的实例对象,然后再生成随机数2:种子随机数的生成是从种子值开始。 如果反复使用同一个种子,就会生成相同的数字系列,产生不同序列的一种方法是使种子值与时间相关3:对象实例默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值参数化构造函数可提供一个 Int32 类型的数字为起始值4:生成方案方案1:只实例化一个对象,多次方法调用?Random rnd = new Random();int i1 = rnd.Next(10);int i2 = rnd.Next(10);/ 简单,方便,常用,生成的数字分布均匀,每个数字返回的可能性均相等。/ 一般是实例为静态对象,以减少实例化的次数,避免产生相同的种子值,如下:?private static RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();方案2:每次方法调用都用一个新的实例(无参)?Random rnd1 = new Random();int i1 = rnd2.Next(10);Random rnd2 = new Random();int i2 = rnd2.Next(10);/ 两个随机数十有八九相同/ 默认种子值是从系统时钟派生而来的,具有有限的分辨率。/ 因此,通过调用默认构造函数而频繁创建的不同对象将具有相同的默认种子值,因而会产生几组相同的随机数。解决方案:阻塞当前线程一小段时间?Random rnd1 = new Random();System.Threading.Thread.Sleep(500);Random rnd2 = new Random();或者:应用一个算法来区分每个调用的种子值。例如,下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象(在 1 和大约 28 个对象之间)生成不同的种子值。?int count = 4;Random rnds = new Randomcount;for (int i = 0; i i);5:通用数字和字母随机生成方案数组方式:略字符串方式:不灵活,但比较简便,用于验证码已足够?string str = 0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ;public string GetMix(Random rnd)/ 返回数字/ return rnd.Next(10).ToString();/ 返回小写字母/ return str.Substring(10+rnd.Next(26),1);/ 返回大写字母/ return str.Substring(36+rnd.Next(26),1);/ 返回大小写字母混合/ return str.Substring(10+rnd.Next(52),1);/ 返回小写字母和数字混合/ return str.Substring(0 + rnd.Next(36), 1);/ 返回大写字母和数字混合/ return str.Substring(0 + rnd.Next(36), 1).ToUpper();/ 返回大小写字母和数字混合return str.Substring(0 + rnd.Next(61), 1);6:用随机数填充指定字节的数组?Random rnd = new Random();/ 数组长度自定义 byte bs = new byte9999;/ 字节数组的每个元素均设置为一个大于等于零而小于或等于 MaxValue 的随机数。MaxValue=255,可取上界值 rnd.NextBytes(bs);7:生成大于等于 0.0 小于 1.0 的双精度浮点数?Random rnd = new Random();/ 大于等于 0.0 并且小于 1.0 的双精度浮点数。 double d = rnd.NextDouble();/ 格式化为 5 位小数,当然还有更多种格式化 string s = string.Format(0:F5, d);8:生成随机整数?Random rnd = new Random();/ 大于等于零且小于 MaxValue 的 32 位带符号整数。MaxValue=2,147,483,647,不可取上界值 int i1 = rnd.Next();/ 大于等于零且小于 maxValue 的 32 位带符号整数,不可取上界值 int i2 = rnd.Next(10);/ 一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,不可取上界值,可以取负值 int i3 = rnd.Next(-10, 100);9:生成随机大写字母?public string GetUpperCase(Random rnd)/ A-Z ASCII值 65-90 int i = rnd.Next(65, 91);char c = (char)i;return c.ToString();10:生成随机小写字母?public string GetLowerCase(Random rnd)/ a-z ASCII值 97-122 int i = rnd.Next(97, 123);char c = (char)i;return c.ToString();11:生成随机大小写字母混合?public string GetLetter(Random rnd)/ A-Z ASCII值 65-90/ a-z ASCII值 97-122int i = rnd.Next(65, 123);char c = (char)i;if (char.IsLetter(c)return c.ToString();else/ 递归调用,直到随机到字母return GetLetter(rnd);12:生成随机大小写字母和数字混合?public string GetChar(Random rnd)/ 0-9/ A-Z ASCII值 65-90/ a-z ASCII值 97-122int i = rnd.Next(0, 123);if (i 10)/ 返回数字return i.ToString();char c = (char)i;/ 返回小写字母加数字/ return char.IsLower(c) ? c.ToString() :

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论