Conversão de várias bases - usando todas as combinações para encurtador de URL
Estou criando um encurtador de URL e estou tendo dificuldades com a maneira ideal de codificar um número (id) em uma cadeia de caracteres.
Eu estou usando os caracteres 0-9, A-Z, a-z, então será basicamente uma codificação de base 62. Isso é bastante básico, mas não utiliza todos os códigos possíveis. Os códigos que produziria seriam:
0, 1, ... y, z, 10, 11, ... zy, zz, 100, 101, ...
Observe que os códigos de 00 a 0z não são usados, o mesmo para 000 a 0zz e assim por diante. Eu gostaria de usar todos os códigos, assim:
0, 1, ... y, z, 00, 01, ... zy, zz, 000, 001, ...
Seria uma combinação de base 62 e base 63, com bases diferentes, dependendo da posição ... Usar a base 62 é fácil, por exemplo:
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
Mas ainda não consegui fazer uma conversão de várias bases para usar todos os códigos.