Я сокращаю URL и пытаюсь найти оптимальный способ кодирования числа (id) в строку символов.
Я использую символы 0-9, A-Z, a-z, так что в основном это будет кодировка 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
Но мне пока не удалось сделать из него многоосновное преобразование, чтобы использовать все коды.