如何从唯一的整数创建唯一的slugs?

问题描述 投票:0回答:2

我有一个实体表,每个实体都有一个 ID 标识列,它是一个简单的递增整数,保证每个实体都是唯一的。 如何从这些身份整数创建相对较短(最好是 10 个字符或更少)的 slugs,以便每个整数应映射到集合中唯一的随机字符系列

[a-z][0-9]
? 换句话说,从技术上讲,创建作为实体的字符串表示形式的 slugs 是微不足道的:
/foobar/1
/foobar/2
等,但是如何基于这些看起来更像
/foobar/34a4804bc9
的身份整数创建 slugs,
/foobar/291e407998
等等?

c# function url slug
2个回答
0
投票
        int id = 0;
        Random r = new Random(id);
        char[] chars = "abcdefghijklmnopqrstuvwxyz1234567890".ToCharArray();
        string output = "";
        for (int i = 0; i < 10; i++)
        {
            output += chars[r.Next(chars.Length)];
        }

        Console.WriteLine(output);

可能是最简单的方法。将 ID 替换为他们的唯一编号,它充当种子。


0
投票

为像我一样偶然发现这篇文章的其他人添加此内容。我发现一个名为 Sqids(以前称为 Hashids)的开源库正是这样做的。

.NET 示例和文档

快速编码和解码示例:

var sqids = new SqidsEncoder<int>();
var id = sqids.Encode(1, 2, 3); // "86Rf07"
var numbers = sqids.Decode(id); // [1, 2, 3]

如果ID太短,可以将其填充到一定长度:

var sqids = new SqidsEncoder<int>(new()
{
  MinLength = 10,
});
var id = sqids.Encode(1, 2, 3); // "86Rf07xd4z"
var numbers = sqids.Decode(id); // [1, 2, 3]
© www.soinside.com 2019 - 2024. All rights reserved.