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.