Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 557|回复: 0

一个C#随机数的问题,解决随机数重复

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-6 10:47:47 | 显示全部楼层 |阅读模式
    默认情况下,.NET的随机数是根据系统时间来生成的,如果电脑速度很快的话,生成的随机数就会一样。
    Random rnd = new Random(); 
    int rndNum = rnd.Next();         //int 取值范围内的随机数 
    int rndNum = rnd.Next(10);       //得0~9的随机数 
    int rndNum = rnd.Next(10,20);    //得10~19的随机数 
    int rndNum = rnd.NextDouble();   //得0~1的随机数  
    若随机种子为系统时间,用循环一次生成多个随机数.
    因为CPU运算速度太快了,所以每次取到的都是同一个时间.即生成的数字都一样了.
    所以要不停地变换种子.
            public string GetRandomCode()
             {
                 char[] chars = {
                                    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S',
                                    'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9'
                                };
                 string code = string.Empty;
                 for (int i = 0; i < 4; i++)
                 {
                     //这里是关键,传入一个seed参数即可保证生成的随机数不同            
                     //Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
                     Random rnd = new Random(GetRandomSeed( ));
                     code += chars[rnd.Next(0, 30)].ToString();
                 }
                 return code;
             }
            /// <summary>
            /// 加密随机数生成器 生成随机种子
            /// </summary>
            /// <returns></returns>
        static int GetRandomSeed()
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);
        }
    获取指定数量的随机组合 洗牌程序 思路
        public static IList<string> CreateChargeCodeNo(string PromotionChargeCodeNo, int Count)
        {
            List<string> lis = new List<string>();
            if (string.IsNullOrEmpty(PromotionChargeCodeNo))
            {
                return lis;
            }
            string ChargeCodeNo = PromotionChargeCodeNo;
            int length = 10 - PromotionChargeCodeNo.Length;
            while (lis.Count < Count)
            {
                int[] numbers = new int[length * 2];
                for (int i = 0; i < length * 2; i++)
                    numbers = i + 1;
                for (int i = 0; i < length * 2; i++)//二倍体洗牌
                {
                    Random rand = new Random(GetRandomSeed());
                    int temp = rand.Next(length * 2);
                    int tempNumber = numbers;
                    numbers = numbers[temp];
                    numbers[temp] = tempNumber;
                }
                string code = "";
                for (int x = 0; code.Length < length; x++)
                {
                    code += numbers[x];
                }
                code = code.Substring(0, length);
                string s = ChargeCodeNo + code;
                if (lis.Contains(s))
                {
                    continue;
                }
                lis.Add(ChargeCodeNo + code);
            }
            return lis;
        }
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 07:29 , Processed in 0.058735 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表