using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LifePayment.Domain.Shared; public static class GlobalRandom { // 字符集 private static readonly string LowerCase = "abcdefghijklmnopqrstuvwxyz"; private static readonly string UpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static readonly string Digits = "0123456789"; private static readonly string Symbols = "~`!@#$%^&*\\|()_-+=\\、{}\\[\\]'\"<>?.,:;/"; /// /// 获取指定位数的随机数 /// /// /// public static string GetRandomNum(int length) { var ranInt = 0; var minAMax = GetMinAndMaxNumByLength(length); ranInt = Random.Shared.Next(minAMax.Min, minAMax.Max + 1); return ranInt.ToString().PadLeft(length, '0'); } /// /// 获取指定位数的十进制数的最大值和最小值 /// /// /// /// /// public static (int Min, int Max) GetMinAndMaxNumByLength(int length, bool minIsOne = true) { if (length <= 0) throw new ArgumentException("length必须大于等于0"); if (length == 0) return (0, 0); var min = minIsOne ? 1 : (int)Math.Pow(10, length - 1); var max = (int)Math.Pow(10, length) - 1; return (min, max); } /// /// 根据指定长度和字符池获取指定长度的随机字符串 /// /// /// /// public static string GetRandomStrFromCharPool(int length, char[] charPool) { string result = null; if (length > 0 && charPool.IsNotNullOrEmpty()) { Shuffle(charPool); for (int i = 0; i < length; i++) { result += charPool[Random.Shared.Next(0, charPool.Length)]; } } return result; } /// /// 获取随机密码 /// /// /// /// public static string GetRandomPassword(int minLenth = 6, int maxLenth = 6) { // 生成一个合法的字符串长度 int length = minLenth == maxLenth ? minLenth : Random.Shared.Next(minLenth, maxLenth + 1); // 6 到 16 的随机长度 // 至少包含一个字母、数字和符号 var sb = new StringBuilder(); sb.Append(LowerCase[Random.Shared.Next(LowerCase.Length)]); // 加一个小写字母 sb.Append(UpperCase[Random.Shared.Next(UpperCase.Length)]); // 加一个大写字母 sb.Append(Digits[Random.Shared.Next(Digits.Length)]); // 加一个数字 //sb.Append(Symbols[Random.Shared.Next(Symbols.Length)]); // 加一个符号 // 填充其余字符 var allChars = LowerCase + UpperCase + Digits; for (int i = sb.Length; i < length; i++) { sb.Append(allChars[Random.Shared.Next(allChars.Length)]); } // 打乱字符顺序,以确保字符种类不被集中在前面 return new string(sb.ToString().OrderBy(c => Random.Shared.Next()).ToArray()); } /// /// 随机洗牌 /// /// /// public static void Shuffle(T[] array) { Random rng = new Random(); int n = array.Length; for (int i = n - 1; i > 0; i--) { int j = rng.Next(i + 1); (array[i], array[j]) = (array[j], array[i]); // 交换元素 } } }