• c# 常用操作保留


    RanDom如何提高生成随机数的随机性

    一个在线考试系统的项目,需要从题库中随机抽取试题,但是如果直接 Random ran=new Randon(),ran.Next(nummin,nummax);的方法,

    在系统执行过快的情况下,造成只取到了一系列连续的题目,其他的题目均没有取到,用下面提高随机数种子的方法搞定

    用C#的Random函数连续的生成随机数,会发现结果往往都是一个值。原因就是Random函数需要一个种子,人为指定的方式是Random(i),如果没有明确指定种子的话,系统会自动用当前系统时间作为种子。如果程序执行过快就会造成,种子一样的情况,这时候产生的随机数就是同一个值。解决方案如下:
    Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种子,一般都是用UnCheck((Int)DateTime.Now.Ticks)做为参数种子,因此如果计算机运行速度很快,如果触发Randm函数间隔时间很短,就有可能造成产生一样的随机数,因为伪随机的数字,在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。
    Random快速连续产生相同随机数的解决方案:
    1、延时的办法。
    可以采用for循环的办法,也可以采用Thread.Sleep(100);
    2、提高随机数不重复概率的种子生成方法:
    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 );
    }
    Random random = new Random( GetRandomSeed( ) );
    
    
    引用:http://blog.sina.com.cn/s/blog_67f16f3d0100xsdd.html
    RanDom提高种子随机率

    c#不同进制之间的相互转换

    //十进制转二进制 
    Console.WriteLine(Convert.ToString(69, 2)); 
    //十进制转八进制 
    Console.WriteLine(Convert.ToString(69, 8)); 
    //十进制转十六进制 
    Console.WriteLine(Convert.ToString(69, 16)); 
    //二进制转十进制 
    Console.WriteLine(Convert.ToInt32(”100111101″, 2)); 
    //八进制转十进制 
    Console.WriteLine(Convert.ToInt32(”76″, 8)); 
    //C# 16进制转换10进制 
    Console.WriteLine(Convert.ToInt32(”FF”, 16)); 
    
    进制转换
    View Code

    MD5 加密

     /// <summary>
            ///32位 md5加密
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string GetMD5_32(string str)
            {
                byte[] arrHashInput;
                byte[] arrHashOutput;
                //MD5CryptoServiceProvider objMD5  = new MD5CryptoServiceProvider();
                MD5 objMD5 = new MD5CryptoServiceProvider();
                arrHashInput = C2B(str);
                arrHashOutput = objMD5.ComputeHash(arrHashInput);
                return BitConverter.ToString(arrHashOutput);
            }
            protected static byte[] C2B(string str)
            {
                char[] arrChar;
                arrChar = str.ToCharArray();
                byte[] arrByte = new byte[arrChar.Length];
                for (int i = 0; i < arrChar.Length; i++)
                {
                    arrByte[i] = Convert.ToByte(arrChar[i]);
                }
                return arrByte;
            }
    32位 MD5加密
    /// <summary>
            /// 16位 MD5加密
            /// </summary>
            /// <param name="sInputString"></param>
            /// <returns></returns>
            public static string GetMD5_16(string sInputString)
            {
                byte[] data = Encoding.UTF8.GetBytes(sInputString);
                DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                string sKey = GenerateKey();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateEncryptor();
                byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                return BitConverter.ToString(result);
            }
    
            // 创建Key
            public static string GenerateKey()
            {
                DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
                return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
            }
            // 加密字符串
            public static string EncryptString(string sInputString, string sKey)
            {
                byte[] data = Encoding.UTF8.GetBytes(sInputString);
                DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateEncryptor();
                byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                return BitConverter.ToString(result);
            }
            // 解密字符串
            public static string DecryptString(string sInputString, string sKey)
            {
                string[] sInput = sInputString.Split("-".ToCharArray());
                byte[] data = new byte[sInput.Length];
                for (int i = 0; i < sInput.Length; i++)
                {
                    data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
                }
                DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateDecryptor();
                byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                return Encoding.UTF8.GetString(result);
            }
    16位 MD5加密

    防止F5窗口刷新

    public bool IsRefurbish { get { return this.Request.Headers["Accept"] == "*/*"; } }

  • 相关阅读:
    Python heapq 模块的实现
    使用Python在2M内存中排序一百万个32位整数
    heapq
    将不确定变成确定~Uri文本文件不用浏览器自动打开,而是下载到本地
    说说设计模式~组合模式(Composite)
    JS~字符串长度判断,超出进行自动截取(支持中文)
    DDD~基础设施层~续
    谈谈设计模式~原型模式(Prototype)
    Study note for Continuous Probability Distributions
    Spring——AOP配置时的jar包异常
  • 原文地址:https://www.cnblogs.com/eye-like/p/4323518.html
Copyright © 2020-2023  润新知