首页 > 其他分享 >获取随机数工具类

获取随机数工具类

时间:2023-11-09 20:46:48浏览次数:41  
标签:min int max Random DateTime 获取 随机数 工具

1.通过Random获取随机数   由System.Random中提供,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。 实现思路: Random r1 = new Random(); int a1=r1.Next(1, 100);  2.使用Guid生成随机数   生成速度快,适合大量生成   实现思路:   int g= Guid.NewGuid().GetHashCode() % 100;   3.使用RNGCryptoServiceProvider生成随机数   RNGCryptoServiceProvider是使用由密码编译服务供应者 (CSP) 提供的实作 (implementation),实作密码编译随机数生成器 (RNG)。它能产生较Random类比「有限性数学算法」还乱的随机数。 但使用起来比较麻烦,且比较耗时,不建议使用   实现思路:   System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();   byte[] bb = new byte[4];   rng.GetBytes(bb);   int param = BitConverter.ToInt32(bb,0) % 100 ;  4.使用DateTime.Now.Ticks生成随机数   DateTime.Now.Ticks的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。   实现思路:   int a =(int) (DateTime.Now.Ticks % 100);  具体工具类,能直接进行使用   

   /// <summary>
    /// 生成随机数-工具类
    /// </summary>
    public class RandomHelper
    {
        /// <summary>
        /// 通过random.next 获取随机数
        /// </summary>
        /// <param name="min">最小值</param>
        /// <param name="max">最大值</param>
        /// <returns>获取随机数</returns>
        public static int GetNormalRandom(int min,int max)
        {
            if (min >= max || min < 0)
                return min;
            int randomParam = new Random().Next(min,max);
            return randomParam;
        }

        /// <summary>
        /// 通过DateTime.Now.Ticks 获取随机数
        /// </summary>
        /// <param name="min">最小值</param>
        /// <param name="max">最大值</param>
        /// <returns>获取随机数</returns>
        public static int GetDateRandom(int min,int max)
        {
            if (min >= max || min < 0  )
                return min;
            int gapValue = max - min;
            int randomParam=(int)(DateTime.Now.Ticks % gapValue);
            return randomParam+min;
        }

        /// <summary>
        /// 通过Guid 生成随机数
        /// </summary>
        /// <param name="min">最小值</param>
        /// <param name="max">最大值</param>
        /// <returns>获取随机数</returns>
        public static int GetGuidRandom(int min ,int max)
        {
            if (min >= max || min < 0)
                return min;
            int gapValue = max - min;
            int randomParam = (int)(Guid.NewGuid().GetHashCode() % gapValue);
            return randomParam + min;
        }

        /// <summary>
        /// 通过RNGCryptoServiceProvider 生成随机数
        /// </summary>
        /// <param name="min">最小值</param>
        /// <param name="max">最大值</param>
        /// <returns>获取随机数</returns>
        public static int GetRNGCryptoRandom(int min, int max)
        {
            if (min >= max || min < 0)
                return min;
            int gapValue = max - min;

            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            byte[] bb = new byte[4];
            rng.GetBytes(bb);
            int randomParam = BitConverter.ToInt32(bb, 0) % gapValue;
            return randomParam + min;
        }
    }
针对Random和DateTime.Now.Ticks在高并发的情况下会产生相同的随机数, 如:使用Random

 

问题:多次使用Random产生随机数,产生了同样的随机数 解决方案: (1)使用同一个Random实例 (2)使用Thread().sleep 使用DateTime.Now.Ticks 1.在程序运行时间太快时也会存在获取的多个随机数数值相同的情况,如下 问题:多次获取DateTime.Now.Ticks用于产生随机数,产生了同样的随机数 原因:因为DateTime.Now.Ticks 表示的即为一个时间间隔数,连续几行程序执行比较快的时候,就大体可以看作同一时间,获取的值也相同。 解决方案: 1.使用Thread.sleep()解决

 

标签:min,int,max,Random,DateTime,获取,随机数,工具
From: https://www.cnblogs.com/leon1128/p/17822753.html

相关文章

  • Leangoo领歌免费敏捷工具中如何看到关于自己的所有任务?
    ​个人工作台个人工作台是个人最新待办工作的展示区域,它展示了个人所有的待办任务,最新访问的项目和工作动态,当一个人在多个项目和看板上工作时,它可以帮助个人快速看到个人在各个项目的工作,快速进入任务看板处理任务。 ​www.leangoo.com​......
  • 如何获取一周的开始日期时间?
    内容来自DOChttps://q.houxu6.top/?s=如何获取一周的开始日期时间?在C#中,只知道当前时间,如何找到一周的开始(包括星期日和星期一)?类似于:DateTime.Now.StartWeek(Monday);使用扩展方法:publicstaticclassDateTimeExtensions{publicstaticDateTimeStartOfWeek......
  • 封装java导出Excel工具类使用
     基于POI的导入导出工具类使用背景快速引入基本excel导入成对象合并excel导入成为对象导出复杂excel表格最后 背景自己封装了一个excel工具类,方便以后使用和部分可能有相同需求的朋友使用,现在做一个简单的记录快速引入第一步导包,maven包仅包含poi依赖,导入时注......
  • 封装java导出Excel工具类使用(二)
    目录背景快速引入基本excel导入成对象和合并excel导入成为对象导出基本excel表格注:本次更新的列表1对多样式同样适用于导出异形表中的列表最后背景自己封装了一个excel工具类,方便以后使用和部分可能有相同需求的朋友使用,现在做一个简单的记录快速引入第一步导包,maven包仅包含......
  • 09_LCD1602调试工具
    LCD1602调试工具编写代码LCD1602.c#include<REGX52.H>//引脚配置:sbitLCD_RS=P2^6;sbitLCD_RW=P2^5;sbitLCD_EN=P2^7;#defineLCD_DataPortP0//函数定义:/***@briefLCD1602延时函数,12MHz调用可延时1ms*@param无*@retval无*/voidLCD_Delay(vo......
  • 进击的AI工具集:全能AI阅读软件Walles AI
    释放AI工具的力量:WallesAI全能AI阅读工具在信息爆炸的时代,快速而准确地阅读大量内容,对于每个人都是一种常态挑战。这些海量信息资讯和知识的涌入,可能导致信息过载,手忙脚乱,且分神费力。好消息是,我们已经进入了AIGC时代,随着ChatGPT等AI大模型的爆发,AI工具,尤其是AI阅读工具为我们提......
  • 获取21-30条记录
    sqlserver版                                       select*fromVersionMenuorderbyid           --获取21-30条记录                  --1:          selectTo......
  • btmon获取hci数据流程
    btmon获取hci数据流程背景最近在看蓝牙相关的驱动代码,追到hci接收数据处理函数hci_rx_work()(net/bluetooth/hci_core.c),瞄到下面一段代码:C...while((skb=skb_dequeue(&hdev->rx_q))){/*Sendcopytomonitor*/hci_send_to_monitor(hdev,skb);.........
  • MySql工具类
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Collections;usingMySql.Data.MySqlClient;namespaceskylark.SqlTool{publicclassMySqlDBHelper{publicstaticstring......
  • 好消息,支付宝【支付交易投诉】工具升级,可以直接处理投诉了。。。
    大家好,我是小悟兄弟们,阅读本文之前,建议先阅读【好消息,终于可以获取到支付宝【支付交易投诉】的信息了。。。】。为了使工具更好用,也为帮助商家更好地处理消费者投诉,提升用户满意度,提高处理效率,满足用户需求,一直在研究完善功能。于是对工具进行了升级,可以直接查看详情、提交退款、处......