using Furion.DataValidation; using Furion.FriendlyException; using Mapster.Utils; using System; using System.Collections.Generic; using System.Data.SqlTypes; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// /// 字符串工具 /// public static class StringUtils { /// /// 校验字符串为空 /// /// /// public static bool IsNull([NotNullWhen(false)] this string str) { return string.IsNullOrWhiteSpace(str) || str == "undefined"; } /// /// 校验字段不为空 /// /// /// public static bool IsNotNull([NotNullWhen(true)] this string str) { return !str.IsNull(); } public static Guid? ToGuid(this string str, string requiredMessage = null) { if (str.IsNotNull() && Guid.TryParse(str, out var guid) && guid != Guid.Empty) return guid; if (requiredMessage.IsNotNull()) throw Oops.Oh(EnumErrorCodeType.s400, requiredMessage); return null; } public static int? ToInt(this string str) { if (str.IsNotNull() && int.TryParse(str, out var @int)) return @int; return null; } public static decimal? ToDecimal(this string str) { if (str.IsNotNull() && decimal.TryParse(str, out var @int)) return @int; return null; } public static T? ToEnum(this string str, string requiredMessage = null) where T : struct { if (str.IsNotNull() && Enum.TryParse(str, out var @enum)) return @enum; if (requiredMessage.IsNotNull()) throw Oops.Oh(EnumErrorCodeType.s400, requiredMessage); return null; } /// /// 获取复数英文名 /// /// /// public static string GetPluralizedName(this string singularName) { if (singularName.EndsWith("s") || singularName.EndsWith("x") || singularName.EndsWith("z") || singularName.EndsWith("ch") || singularName.EndsWith("sh")) { return singularName + "es"; } else if (singularName.EndsWith("y") && !"aeiou".Contains(singularName[singularName.Length - 2])) { return singularName.Substring(0, singularName.Length - 1) + "ies"; } else { return singularName + "s"; } } public static bool CheckIsIdentityNumber18(this string identity) { return identity.IsNotNull() && identity.TryValidate(EnumValidationTypes.ValiIdentity).IsValid && identity.Length == 18; } /// /// 获取性别 /// /// /// public static EnumUserGender? GetGender(this string identity) { if (identity.CheckIsIdentityNumber18()) { return identity[16] % 2 == 0 ? EnumUserGender.Female : EnumUserGender.Male; } else { return null; } } /// /// 获取生日 /// /// /// public static DateTime? GetBirthday(this string identity) { if (identity.CheckIsIdentityNumber18()) { return new DateTime( identity.Substring(6, 4).ToInt()!.Value, identity.Substring(10, 2).ToInt()!.Value, identity.Substring(12, 2).ToInt()!.Value); } else { return null; } } /// /// 获取年龄 /// /// /// public static int? GetAge(this string identity) { if (identity.CheckIsIdentityNumber18()) { var birthday = identity.GetBirthday(); return birthday.GetAge(); } else { return null; } } /// /// 生成随机字符串 /// /// /// public static string GenerateRandomString(int length) { if (length <= 0) return null; var random = new Random(); var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var result = new StringBuilder(length); for (int i = 0; i < length; i++) { // 从字符集中随机选择一个字符 int index = random.Next(chars.Length); result.Append(chars[index]); } return result.ToString(); } } }