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 @@
-
-
+
+