diff --git a/src/NSExt/Extensions/ByteExtensions.cs b/src/NSExt/Extensions/ByteExtensions.cs index bbb88f4..c2813be 100644 --- a/src/NSExt/Extensions/ByteExtensions.cs +++ b/src/NSExt/Extensions/ByteExtensions.cs @@ -24,3 +24,5 @@ public static class ByteExtensions return e.GetString(me); } } + + diff --git a/src/NSExt/Extensions/CharExtensions.cs b/src/NSExt/Extensions/CharExtensions.cs new file mode 100644 index 0000000..d906477 --- /dev/null +++ b/src/NSExt/Extensions/CharExtensions.cs @@ -0,0 +1,26 @@ +namespace NSExt.Extensions; + +public static class CharExtensions +{ + /// + /// 是否数字或大小写字母 + /// + /// + /// + public static bool IsAsciiLetterOrDigit(this char me) + { + return (((uint)me - 'A') & ~0x20) < 26 || (uint)me - '0' < 10; + } + + /// + /// 是否base64字符 + /// + /// + /// + public static bool IsBase64Character(this char me) + { + return IsAsciiLetterOrDigit(me) || me is '+' or '/' or '='; + } +} + + diff --git a/src/NSExt/Extensions/DateTimeExtensions.cs b/src/NSExt/Extensions/DateTimeExtensions.cs index dadc7e1..449dfd5 100644 --- a/src/NSExt/Extensions/DateTimeExtensions.cs +++ b/src/NSExt/Extensions/DateTimeExtensions.cs @@ -43,19 +43,6 @@ public static class DateTimeExtensions } - // ReSharper disable once InconsistentNaming - public static string yyyyMM(this DateTime me) - { - return me.ToString("yyyyMM"); - } - - // ReSharper disable once InconsistentNaming - public static string yyyyMMdd(this DateTime me) - { - return me.ToString("yyyyMMdd"); - } - - // ReSharper disable once InconsistentNaming public static string yyyy_MM(this DateTime me) { @@ -86,4 +73,17 @@ public static class DateTimeExtensions { return me.ToString("yyyy-MM-dd HH:mm:ss.fff"); } + + + // ReSharper disable once InconsistentNaming + public static string yyyyMM(this DateTime me) + { + return me.ToString("yyyyMM"); + } + + // ReSharper disable once InconsistentNaming + public static string yyyyMMdd(this DateTime me) + { + return me.ToString("yyyyMMdd"); + } } diff --git a/src/NSExt/Extensions/DbCommandExtensions.cs b/src/NSExt/Extensions/DbCommandExtensions.cs index 679d4d6..693152f 100644 --- a/src/NSExt/Extensions/DbCommandExtensions.cs +++ b/src/NSExt/Extensions/DbCommandExtensions.cs @@ -27,3 +27,4 @@ public static class DbCommandExtensions return sql; } } + diff --git a/src/NSExt/Extensions/DecimalExtensions.cs b/src/NSExt/Extensions/DecimalExtensions.cs index 98f312d..6bbde35 100644 --- a/src/NSExt/Extensions/DecimalExtensions.cs +++ b/src/NSExt/Extensions/DecimalExtensions.cs @@ -14,3 +14,5 @@ public static class DecimalExtensions return dec; } } + + diff --git a/src/NSExt/Extensions/EnumExtensions.cs b/src/NSExt/Extensions/EnumExtensions.cs index 755e238..10642a3 100644 --- a/src/NSExt/Extensions/EnumExtensions.cs +++ b/src/NSExt/Extensions/EnumExtensions.cs @@ -15,3 +15,5 @@ public static class EnumExtensions return (attrs.Length != 0 ? attrs[0].Description : Enum.GetName(t, e)) ?? ""; } } + + diff --git a/src/NSExt/Extensions/EnumerableExtensions.cs b/src/NSExt/Extensions/EnumerableExtensions.cs index b318029..369ccae 100644 --- a/src/NSExt/Extensions/EnumerableExtensions.cs +++ b/src/NSExt/Extensions/EnumerableExtensions.cs @@ -24,3 +24,5 @@ public static class EnumerableExtensions return me is null || !me.Any(); } } + + diff --git a/src/NSExt/Extensions/GenericExtensions.cs b/src/NSExt/Extensions/GenericExtensions.cs index 60f2679..eb09d52 100644 --- a/src/NSExt/Extensions/GenericExtensions.cs +++ b/src/NSExt/Extensions/GenericExtensions.cs @@ -41,3 +41,5 @@ public static class GenericExtensions return me.Equals(compare) ? ret : me; } } + + diff --git a/src/NSExt/Extensions/IntExtensions.cs b/src/NSExt/Extensions/IntExtensions.cs index c39e99b..40d244a 100644 --- a/src/NSExt/Extensions/IntExtensions.cs +++ b/src/NSExt/Extensions/IntExtensions.cs @@ -24,8 +24,15 @@ public static class IntExtensions return new Random(Guid.NewGuid().GetHashCode()).Next(me[0], me[1]); } + /// + /// 转换成ipv4 + /// + /// + /// public static string ToIpV4(this int me) { return string.Join(".", BitConverter.GetBytes(me).Reverse()); } } + + diff --git a/src/NSExt/Extensions/LoggerExtensions.cs b/src/NSExt/Extensions/LoggerExtensions.cs index bf22146..a4e09ac 100644 --- a/src/NSExt/Extensions/LoggerExtensions.cs +++ b/src/NSExt/Extensions/LoggerExtensions.cs @@ -64,3 +64,5 @@ public static class LoggerExtensions me.LogWarning(CallerInfoMessage(message, callerName, callerFilePath, callerLineNumber)); } } + + diff --git a/src/NSExt/Extensions/LongExtensions.cs b/src/NSExt/Extensions/LongExtensions.cs index a426526..1b9e7a5 100644 --- a/src/NSExt/Extensions/LongExtensions.cs +++ b/src/NSExt/Extensions/LongExtensions.cs @@ -25,3 +25,6 @@ public static class LongExtensions return new DateTime(1970, 1, 1).AddMilliseconds(msFrom1970).ToLocalTime(); } } + + + diff --git a/src/NSExt/Extensions/ObjectExtensions.cs b/src/NSExt/Extensions/ObjectExtensions.cs index 82c6509..ca9f2b5 100644 --- a/src/NSExt/Extensions/ObjectExtensions.cs +++ b/src/NSExt/Extensions/ObjectExtensions.cs @@ -31,3 +31,6 @@ public static class ObjectExtensions }); } } + + + diff --git a/src/NSExt/Extensions/StringExtensions.cs b/src/NSExt/Extensions/StringExtensions.cs index fbce59b..411bbe9 100644 --- a/src/NSExt/Extensions/StringExtensions.cs +++ b/src/NSExt/Extensions/StringExtensions.cs @@ -7,6 +7,21 @@ namespace NSExt.Extensions; public static class StringExtensions { + /// + /// MD5 hmac编码 + /// + /// 字符串 + /// 密钥 + /// 字符串使用的编码 + /// hash摘要的16进制文本形式(无连字符小写) + private static string Md5Hmac(this string me, string key, Encoding e) + { + using var md5Hmac = new HMACMD5(e.GetBytes(key)); + return BitConverter.ToString(md5Hmac.ComputeHash(e.GetBytes(me))) + .Replace("-", string.Empty) + .ToLower(CultureInfo.CurrentCulture); + } + /// /// base64编码 /// @@ -80,18 +95,6 @@ public static class StringExtensions return System.DateTime.ParseExact(me, format, CultureInfo.CurrentCulture); } - - /// - /// 将字符串转换成日期对象 - /// - /// 待转换字符串 - /// 转换失败时返回的日期对象 - /// 转换后的日期对象 - public static DateTime DateTimeTry(this string me, DateTime def) - { - return !System.DateTime.TryParse(me, out var ret) ? def : ret; - } - /// /// 将字符串转换成日期对象 /// @@ -106,6 +109,18 @@ public static class StringExtensions : ret; } + + /// + /// 将字符串转换成日期对象 + /// + /// 待转换字符串 + /// 转换失败时返回的日期对象 + /// 转换后的日期对象 + public static DateTime DateTimeTry(this string me, DateTime def) + { + return !System.DateTime.TryParse(me, out var ret) ? def : ret; + } + /// /// string to decimal /// @@ -186,6 +201,22 @@ public static class StringExtensions return e.GetBytes(me); } + /// + /// 对一个字符串进行sha1 hash运算 + /// + /// 对一个字符串进行sha1 hash运算 + /// 密钥 + /// 使用的编码 + /// hash摘要的16进制文本形式(无连字符小写) + public static string HmacSha1(this string me, string secret, Encoding e) + { + using var hmacSha1 = new HMACSHA1(e.GetBytes(secret)); + + return BitConverter.ToString(hmacSha1.ComputeHash(e.GetBytes(me))) + .Replace("-", string.Empty) + .ToLower(CultureInfo.CurrentCulture); + } + /// /// 解码html编码 /// @@ -240,6 +271,35 @@ public static class StringExtensions return !long.TryParse(me, out var ret) ? def : ret; } + /// + /// ipv4格式转int32格式 + /// + /// + /// + public static int IpV4ToInt32(this string me) + { + return BitConverter.ToInt32(me.Split('.').Select(byte.Parse).Reverse().ToArray(), 0); + } + + + /// + /// 是否base64字符串 + /// + /// 字符串 + /// + public static bool IsBase64String(this string me) + { + // 一个合法的Base64,有着以下特征: + // 字符串的长度为4的整数倍。 + // 字符串的符号取值只能在A -Z, a -z, 0 -9, +, /, =共计65个字符中,且 = 如果出现就必须在结尾出现。 + if (!me.All(x => x.IsBase64Character())) return false; + if (me.Length % 4 != 0) return false; + var firstEqualSignPos = me.IndexOf('='); + if (firstEqualSignPos < 0) return true; + var lastEqualSignPos = me.LastIndexOf('='); + return lastEqualSignPos == me.Length - 1 && me[firstEqualSignPos..lastEqualSignPos].All(x => x == '='); + } + /// /// 将一个json字符串反序列化成为jObject对象 @@ -251,6 +311,11 @@ public static class StringExtensions return Newtonsoft.Json.Linq.JObject.Parse(me); } + /// + /// 中文姓名打马赛克 + /// + /// + /// public static string MaskChineseName(this string me) { if (me.Length == 2) return "*" + me[1..]; @@ -269,37 +334,6 @@ public static class StringExtensions } - /// - /// 对一个字符串进行sha1 hash运算 - /// - /// 字符串 - /// 字符串使用的编码 - /// hash摘要的16进制文本形式(无连字符小写) - public static string Sha1(this string me, Encoding e) - { - using var sha1 = SHA1.Create(); - return BitConverter.ToString(sha1.ComputeHash(e.GetBytes(me))) - .Replace("-", string.Empty) - .ToLower(CultureInfo.CurrentCulture); - } - - /// - /// 对一个字符串进行sha1 hash运算 - /// - /// 对一个字符串进行sha1 hash运算 - /// 密钥 - /// 使用的编码 - /// hash摘要的16进制文本形式(无连字符小写) - public static string HmacSha1(this string me, string secret, Encoding e) - { - using var hmacSha1 = new HMACSHA1(e.GetBytes(secret)); - - return BitConverter.ToString(hmacSha1.ComputeHash(e.GetBytes(me))) - .Replace("-", string.Empty) - .ToLower(CultureInfo.CurrentCulture); - } - - /// /// 对一个字符串进行md5hash运算 /// @@ -314,22 +348,6 @@ public static class StringExtensions .ToLower(CultureInfo.CurrentCulture); } - - /// - /// MD5 hmac编码 - /// - /// 字符串 - /// 密钥 - /// 字符串使用的编码 - /// hash摘要的16进制文本形式(无连字符小写) - private static string Md5Hmac(this string me, string key, Encoding e) - { - using var md5Hmac = new HMACMD5(e.GetBytes(key)); - return BitConverter.ToString(md5Hmac.ComputeHash(e.GetBytes(me))) - .Replace("-", string.Empty) - .ToLower(CultureInfo.CurrentCulture); - } - /// /// 判断字符串是否为null或不存在子元素(如果为集合对象);如果为空,返回指定的默认值,否则返回字符串本身 /// @@ -341,6 +359,17 @@ public static class StringExtensions return me.AsEnumerable().NullOrEmpty() ? defVal : me; } + + /// + /// null或空白字符 + /// + /// + /// + public static bool NullOrWhiteSpace(this string me) + { + return string.IsNullOrWhiteSpace(me); + } + /// /// 反序列化一个文件获得指定类型的数据对象 /// @@ -382,6 +411,21 @@ public static class StringExtensions } + /// + /// 对一个字符串进行sha1 hash运算 + /// + /// 字符串 + /// 字符串使用的编码 + /// hash摘要的16进制文本形式(无连字符小写) + public static string Sha1(this string me, Encoding e) + { + using var sha1 = SHA1.Create(); + return BitConverter.ToString(sha1.ComputeHash(e.GetBytes(me))) + .Replace("-", string.Empty) + .ToLower(CultureInfo.CurrentCulture); + } + + /// /// 截取指定长度的字符串,代替substring /// @@ -427,15 +471,5 @@ public static class StringExtensions { return Uri.UnescapeDataString(me); } - - public static int IpV4ToInt32(this string me) - { - return BitConverter.ToInt32(me.Split('.').Select(byte.Parse).Reverse().ToArray(), 0); - } - - - public static bool NullOrWhiteSpace(this string me) - { - return string.IsNullOrWhiteSpace(me); - } } + diff --git a/src/NSExt/Extensions/UriExtensions.cs b/src/NSExt/Extensions/UriExtensions.cs index 8fbf8a5..5bf932f 100644 --- a/src/NSExt/Extensions/UriExtensions.cs +++ b/src/NSExt/Extensions/UriExtensions.cs @@ -12,3 +12,6 @@ public static class UriExtensions return "//" + me.Authority + me.PathAndQuery; } } + + + diff --git a/src/NSExt/NSExt.csproj b/src/NSExt/NSExt.csproj index 189f248..c291aed 100644 --- a/src/NSExt/NSExt.csproj +++ b/src/NSExt/NSExt.csproj @@ -8,8 +8,8 @@ - - + +