摘要:Sqids是一个用于将数字编码为短且唯一的非顺序字符串的库,支持在 .NET 平台中使用。适用于生成用户可见的 ID(如 URL 中的 ID),确保这些 ID 不包含敏感或不适当的内容,并提供高性能和灵活性。
Sqids是一个用于将数字编码为短且唯一的非顺序字符串的库,支持在 .NET 平台中使用。适用于生成用户可见的 ID(如 URL 中的 ID),确保这些 ID 不包含敏感或不适当的内容,并提供高性能和灵活性。
有点类似之前介绍的 · Hashids· 生成的短链
使用Hashids来保护你的Dotnet应用程序
• 无冲突(Collision-free):生成的 ID 是唯一的,并能解码回原始数字。
• 多数字支持(Multiple Numbers):支持将多个数字编码为一个 ID,并可准确还原。
• “眼安全”(Eye-safe):避免常见脏话、敏感词,适合用户可见场景。
• 随机化输出(Randomized Output):相同输入序列会生成不同 ID,防止猜测。
• 支持所有整数类型:包括int、long、byte等。
• 高性能(Blazingly Fast):基于 Span 实现,内存分配少,性能高。
• 全面测试(Meticulously Tested):覆盖大量边界情况,稳定可靠。
• CLS 兼容:支持多种 .NET 语言(如 C#、F#)。
使用 NuGet Package ManagerInstall-Package Sqidsusing Sqids;var sqids = new SqidsEncoderint>;注意:.NET 7 及以上版本需指定泛型类型参数,如;旧版本直接使用new SqidsEncoder。单个数字编码/解码var id = sqids.Encode(1); // 输出类似 "Uk"
var number = sqids.Decode(id).Single; // 返回 [1]多个数字编码/解码var id = sqids.Encode(123); // 输出类似 "86Rf07"
var numbers = sqids.Decode(id); // 返回 [1, 2, 3]
你可以自定义以下内容:
自定义字母表(Alphabet)var sqids = new SqidsEncoderint>(new{
Alphabet = "mTHivO7hx3RAbr1f586SwjNnK2lgpcUVuG09BCtekZdJ4DYFPaWoMLQEsXIqyz",
});
建议使用打乱后的字符集以增强唯一性。
最小长度(MinLength)var sqids = new SqidsEncoderint>(new{
MinLength =5
});自定义屏蔽词(BlockList)var sqids = new SqidsEncoderint>(new
{
BlockList = { "whatever", "else", "you", "want" },
});
默认屏蔽词已经非常全面,你也可以添加额外项进行扩展。
解码单个数字if (sqids.decode(input) is [var singleNumber]){
// 使用 singleNumber
}检查 ID 是否为规范格式(Canonical)var decoded = sqids.Decode(incomingId);
boolisCanonical = incomingId == sqids.Encode(decoded);
结合单个数字检查:
if (sqids.Decode(incomingId) is [var decodedId] && incomingId == sqids.Encode(decodedId)){
// 合法且规范
}
else
{
// 非法请求,返回 404 或其他处理
}默认配置services.AddSingletonint>>;自定义配置services.AddSingleton(new SqidsEncoderint>(new
{
Alphabet = "ABCEDFGHIJ0123456789",
MinLength =6
}));
在控制器中注入:
public class SomeController(SqidsEncoderint> sqids){
// ...
}
Sqids提供了一种简洁、高效的方式来生成安全、美观的短 ID,特别适合用于对外暴露的资源标识符。它不仅易于集成,还具备高度定制能力,是现代 .NET 应用程序中理想的 ID 编码解决方案。
来源:opendotnet