using System; using System.Collections.Generic; namespace Hncore.Infrastructure.Common { public class RandomHelper { #region 私有属性 /// /// 随机数最小值 /// private static int MiniNum => int.MinValue; /// /// 随机数最大值 /// private static int MaxNum => int.MaxValue; /// /// 随机数长度 /// private static int RandomLength => 4; /// /// 随机数来源 /// private static string RandomString => "0123456789ABCDEFGHIJKMLNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz"; /// /// 系统默认生成随机数长度 /// private const int RandomLengthPresent = 6; /// /// 系统默认随机数来源 /// private const string RandomStringPresent = "0123456789ABCDEFGHIJKMLNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz"; private static readonly Random Random = new Random(DateTime.Now.Millisecond); #endregion #region 产生随机字符 /// /// 产生随机字符 /// /// 产生随机数长度,默认为-1 /// 随机数来源 /// public static string GetRandomString(int randomLength = -1, string randomString = "") { int randomLengthTemp;//随机数长度 if (randomLength > 0) randomLengthTemp = randomLength; else if (RandomLength > 0) randomLengthTemp = RandomLength; else randomLengthTemp = RandomLengthPresent; string randomStringTemp;//随机数来源 if (!string.IsNullOrEmpty(randomString)) randomStringTemp = randomString; else if (!string.IsNullOrEmpty(RandomString)) randomStringTemp = RandomString; else randomStringTemp = RandomStringPresent; string returnValue = string.Empty; for (int i = 0; i < randomLengthTemp; i++) { int r = Random.Next(0, randomStringTemp.Length - 1); returnValue += randomStringTemp[r]; } return returnValue; } #endregion #region 产生随机数 /// /// 产生随机数 /// /// 最小随机数 /// 最大随机数 /// public static int GetRandom(int minNum = -1, int maxNum = -1) { int minNumTemp = minNum == -1 ? MiniNum : minNum;//最小随机数 int maxNumTemp = maxNum == -1 ? MaxNum : maxNum;//最大随机数 return Random.Next(minNumTemp, maxNumTemp); } #endregion #region 生成一个0.0到1.0的随机小数 /// /// 生成一个0.0到1.0的随机小数 /// public double GetRandomDouble() { return Random.NextDouble(); } #endregion #region 对一个数组进行随机排序 /// /// 对一个数组进行随机排序 /// /// 数组的类型 /// 需要随机排序的数组 public void GetRandomArray(T[] arr) { //对数组进行随机排序的算法:随机选择两个位置,将两个位置上的值交换 //交换的次数,这里使用数组的长度作为交换次数 int count = arr.Length; //开始交换 for (int i = 0; i < count; i++) { //生成两个随机数位置 int randomNum1 = GetRandom(0, arr.Length); int randomNum2 = GetRandom(0, arr.Length); //定义临时变量 //交换两个随机数位置的值 var temp = arr[randomNum1]; arr[randomNum1] = arr[randomNum2]; arr[randomNum2] = temp; } } public static string Uuid(int len) { len = len > 32 ? 32 : len; var str = Guid.NewGuid().ToString("N"); var list = new List(); while (true) { var index = GetRandom(0, 32); list.Add(str[index].ToString()); if (list.Count >= len) break; } return string.Join("", list); } #endregion } }