80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using HashidsNet;
|
||
using Yitter.IdGenerator;
|
||
|
||
namespace Easy.Core;
|
||
|
||
public static class YitIdHelperExtension
|
||
{
|
||
/// <summary>
|
||
/// 盐值
|
||
/// </summary>
|
||
private const string Salt = "dkjsDLVK1S7y5be8XYzoq0C2nHaEmBfA";
|
||
|
||
/// <summary>
|
||
/// 注册雪花ID服务(默认配置)
|
||
/// </summary>
|
||
/// <param name="service"></param>
|
||
public static void AddIdGenerator(this IServiceCollection service)
|
||
{
|
||
service.AddIdGenerator(new IdGeneratorOptions(0));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 注册雪花ID服务(自定义配置)
|
||
/// </summary>
|
||
/// <param name="service"></param>
|
||
/// <param name="sectionName"></param>
|
||
public static void AddIdGenerator(this IServiceCollection service, string sectionName)
|
||
{
|
||
var options = App.GetConfig<IdGeneratorOptions>(sectionName) ?? new IdGeneratorOptions(0);
|
||
options.BaseTime = options.BaseTime.ToUniversalTime();
|
||
YitIdHelper.SetIdGenerator(options);
|
||
service.AddSingleton<IIdGenerator>(new DefaultIdGenerator(options));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 注册雪花ID服务(自定义配置)
|
||
/// </summary>
|
||
/// <param name="service"></param>
|
||
/// <param name="options">配置</param>
|
||
public static void AddIdGenerator(this IServiceCollection service, IdGeneratorOptions options)
|
||
{
|
||
options.BaseTime = options.BaseTime.ToUniversalTime();
|
||
YitIdHelper.SetIdGenerator(options);
|
||
service.AddSingleton<IIdGenerator>(new DefaultIdGenerator(options));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 生成ID
|
||
/// </summary>
|
||
/// <param name="generator"></param>
|
||
/// <returns></returns>
|
||
public static long NextId(this IIdGenerator generator)
|
||
{
|
||
return generator.NewLong();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 加密ID(生成短ID)
|
||
/// </summary>
|
||
/// <param name="generator"></param>
|
||
/// <param name="id">long类型ID</param>
|
||
/// <param name="salt">盐值</param>
|
||
/// <returns></returns>
|
||
public static string Encode(this IIdGenerator generator, long id, string salt = Salt)
|
||
{
|
||
return new Hashids(salt).EncodeLong(id);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 解密加密ID(解密短ID)
|
||
/// </summary>
|
||
/// <param name="generator"></param>
|
||
/// <param name="text">密文</param>
|
||
/// <param name="salt">盐值</param>
|
||
/// <returns></returns>
|
||
public static long Decode(this IIdGenerator generator, string text, string salt = Salt)
|
||
{
|
||
return new Hashids(salt).DecodeSingleLong(text);
|
||
}
|
||
} |