init commit
This commit is contained in:
250
20220330_Vote/Ewide.RoadFlow/Utility/GuidExtensions.cs
Normal file
250
20220330_Vote/Ewide.RoadFlow/Utility/GuidExtensions.cs
Normal file
@@ -0,0 +1,250 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RoadFlow.Utility
|
||||
{
|
||||
public static class GuidExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 生成新的GUID(有的需要生成连续的Guid,所以统一调用这里的方法)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Guid NewGuid()
|
||||
{
|
||||
return Guid.NewGuid();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断为空GUID
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsEmptyGuid(this Guid guid)
|
||||
{
|
||||
return guid == Guid.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断为空GUID
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsEmptyGuid(this Guid? guid)
|
||||
{
|
||||
return !guid.HasValue || guid.Value == Guid.Empty;
|
||||
}
|
||||
/// <summary>
|
||||
/// 判断不为空GUID
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsNotEmptyGuid(this string guid)
|
||||
{
|
||||
if (guid.IsNullOrWhiteSpace())
|
||||
return false;
|
||||
return guid.ToGuid().IsNotEmptyGuid();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断不为空GUID
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsNotEmptyGuid(this Guid guid)
|
||||
{
|
||||
return guid != Guid.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断不为NULL和空GUID
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsNotEmptyGuid(this Guid? guid)
|
||||
{
|
||||
return guid.HasValue && guid.Value != Guid.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将GUID转换为整数
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns>HashCode整数</returns>
|
||||
public static int ToInt(this Guid guid)
|
||||
{
|
||||
return Math.Abs(guid.GetHashCode());
|
||||
//byte[] buffer = guid.ToByteArray();
|
||||
//return BitConverter.ToInt32(buffer, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 转换GUID为大写字符串
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToUpperString(this Guid guid)
|
||||
{
|
||||
return guid.ToString().ToUpper();
|
||||
}
|
||||
/// <summary>
|
||||
/// 转换guid为小写字符串
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToLowerString(this Guid guid)
|
||||
{
|
||||
return guid.ToString().ToLower();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 没有分隔线的字符串
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToNString(this Guid guid)
|
||||
{
|
||||
return guid.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 没有分隔线的小写字符串
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToLowerNString(this Guid guid)
|
||||
{
|
||||
return guid.ToString().ToLower();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 没有分隔线的大写字符串
|
||||
/// </summary>
|
||||
/// <param name="guid"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToUpperNString(this Guid guid)
|
||||
{
|
||||
return guid.ToString().ToUpper();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将int转换为GUID
|
||||
/// </summary>
|
||||
/// <param name="i">111</param>
|
||||
/// <returns>00000000-0000-0000-0000-000000000111</returns>
|
||||
public static Guid ToGuid(this int i)
|
||||
{
|
||||
return i.ToString().PadLeft(32, '0').ToGuid();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将long转换为GUID
|
||||
/// </summary>
|
||||
/// <param name="i">111</param>
|
||||
/// <returns>00000000-0000-0000-0000-000000000111</returns>
|
||||
public static Guid ToGuid(this long i)
|
||||
{
|
||||
return i.ToString().PadLeft(32, '0').ToGuid();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将GUID转换为int
|
||||
/// </summary>
|
||||
/// <param name="guid">00000000-0000-0000-0000-000000000111 的GUID</param>
|
||||
/// <returns>111</returns>
|
||||
public static int ToInteger(this Guid guid)
|
||||
{
|
||||
return guid.ToNString().TrimStart('0').ToInt();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将GUID转换为long
|
||||
/// </summary>
|
||||
/// <param name="guid">00000000-0000-0000-0000-000000000111 的GUID</param>
|
||||
/// <returns>111</returns>
|
||||
public static long ToLong(this Guid guid)
|
||||
{
|
||||
return guid.ToNString().TrimStart('0').ToLong();
|
||||
}
|
||||
|
||||
#region 生成顺序GUID
|
||||
//private static readonly RandomNumberGenerator Rng = RandomNumberGenerator.Create();
|
||||
|
||||
///// <summary>
|
||||
///// 创建顺序GUID
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public static Guid NewSequentialGuid()
|
||||
//{
|
||||
// SequentialGuidType sequentialGuidType;
|
||||
// switch (Config.DatabaseType)
|
||||
// {
|
||||
// case "sqlserver":
|
||||
// sequentialGuidType = SequentialGuidType.SequentialAtEnd;
|
||||
// break;
|
||||
// case "oracle":
|
||||
// sequentialGuidType = SequentialGuidType.SequentialAsBinary;
|
||||
// break;
|
||||
// case "mySql":
|
||||
// sequentialGuidType = SequentialGuidType.SequentialAsString;
|
||||
// break;
|
||||
// default:
|
||||
// sequentialGuidType = SequentialGuidType.SequentialAsString;
|
||||
// break;
|
||||
// }
|
||||
|
||||
// var randomBytes = new byte[10];
|
||||
// Rng.Locking(r => r.GetBytes(randomBytes));
|
||||
// long timestamp = DateTime.UtcNow.Ticks / 10000L;
|
||||
// byte[] timestampBytes = BitConverter.GetBytes(timestamp);
|
||||
// if (BitConverter.IsLittleEndian)
|
||||
// {
|
||||
// Array.Reverse(timestampBytes);
|
||||
// }
|
||||
// byte[] guidBytes = new byte[16];
|
||||
// switch (sequentialGuidType)
|
||||
// {
|
||||
// case SequentialGuidType.SequentialAsString:
|
||||
// case SequentialGuidType.SequentialAsBinary:
|
||||
// Buffer.BlockCopy(timestampBytes, 2, guidBytes, 0, 6);
|
||||
// Buffer.BlockCopy(randomBytes, 0, guidBytes, 6, 10);
|
||||
// if (sequentialGuidType == SequentialGuidType.SequentialAsString && BitConverter.IsLittleEndian)
|
||||
// {
|
||||
// Array.Reverse(guidBytes, 0, 4);
|
||||
// Array.Reverse(guidBytes, 4, 2);
|
||||
// }
|
||||
// break;
|
||||
// case SequentialGuidType.SequentialAtEnd:
|
||||
// Buffer.BlockCopy(randomBytes, 0, guidBytes, 0, 10);
|
||||
// Buffer.BlockCopy(timestampBytes, 2, guidBytes, 10, 6);
|
||||
// break;
|
||||
// }
|
||||
// return new Guid(guidBytes);
|
||||
//}
|
||||
|
||||
//private enum SequentialGuidType
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// The GUID should be sequential when formatted using the
|
||||
// /// <see cref="Guid.ToString()" /> method.
|
||||
// /// </summary>
|
||||
// SequentialAsString,
|
||||
|
||||
// /// <summary>
|
||||
// /// The GUID should be sequential when formatted using the
|
||||
// /// <see cref="Guid.ToByteArray" /> method.
|
||||
// /// </summary>
|
||||
// SequentialAsBinary,
|
||||
|
||||
// /// <summary>
|
||||
// /// The sequential portion of the GUID should be located at the end
|
||||
// /// of the Data4 block.
|
||||
// /// </summary>
|
||||
// SequentialAtEnd
|
||||
//}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user