我正在制作 URL 缩短器,并且正在努力将数字(id)编码为字符串的最佳方式。
我使用的是字符 0-9、AZ、az,所以它基本上是 base-62 编码。这是非常基本的,但它并没有使用所有可能的代码。它将产生的代码是:
0, 1, ... y, z, 10, 11, ... zy, zz, 100, 101, ...
请注意,没有使用代码 00 到 0z,对于 000 到 0zz 也是如此,依此类推。我想使用所有代码,如下所示:
0, 1, ... y, z, 00, 01, ... zy, zz, 000, 001, ...
它将是 base-62 和 base-63 的某种组合,根据位置不同具有不同的基数......使用 base-62 很容易,例如:
create procedure tiny_GetCode
@UrlId int
as
set nocount on
declare @Code varchar(10)
set @Code = ''
while (@UrlId > 0 or len(@Code) = 0) begin
set @Code = substring('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', @UrlId % 62 + 1, 1) + @Code
set @UrlId = @UrlId / 62
end
select @Code
但我还没有设法从中进行多基转换,以利用所有代码。