Multi-Base-Konvertierung - mit allen Kombinationen für URL-Shortener

Ich erstelle eine URL-Kürzung und habe Probleme mit der optimalen Codierung einer Zahl (ID) in eine Zeichenfolge.

Ich verwende die Zeichen 0-9, A-Z, a-z, daher handelt es sich im Grunde genommen um eine Base-62-Codierung. Das ist ziemlich einfach, nutzt aber nicht alle möglichen Codes. Die Codes, die es erzeugen würde, wären:

0, 1, ... y, z, 10, 11, ... zy, zz, 100, 101, ...

Beachten Sie, dass die Codes 00 bis 0z nicht verwendet werden. Dies gilt auch für 000 bis 0zz und so weiter. Ich möchte alle Codes wie folgt verwenden:

0, 1, ... y, z, 00, 01, ... zy, zz, 000, 001, ...

Es wäre eine Kombination aus Base-62 und Base-63, mit unterschiedlichen Basen, abhängig von der Position ... Die Verwendung von Base-62 ist einfach, zum Beispiel:

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

Aber ich habe es noch nicht geschafft, eine Multi-Base-Konvertierung durchzuführen, um alle Codes zu nutzen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage