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 になります... 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
しかし、すべてのコードを利用するために、それを多塩基変換することはまだできていません。