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]); // 交换元素
}
}
}