Desejo criar um serviço de encurtador de URL em que você possa gravar um URL longo em um campo de entrada e o serviço encurte o URL para " http://www.example.org/abcdef
".
Em vez de " abcdef
", pode haver qualquer outra sequência com seis caracteres a-z, A-Z and 0-9
. Isso torna 56 a 57 bilhões de strings possíveis.
Minha abordagem:
Eu tenho uma tabela de banco de dados com três colunas:
- id, número inteiro, incremento automático
- long, string, o URL longo digitado pelo usuário
- short, string, o URL encurtado (ou apenas os seis caracteres)
Em seguida, insiro o URL longo na tabela. Depois, selecionaria o valor de incremento automático para " id
" e criaria um hash. Esse hash deve ser inserido como " short
". Mas que tipo de hash devo construir? Algoritmos de hash como MD5 criam seqüências muito longas. Eu não uso esses algoritmos, eu acho. Um algoritmo auto-construído também funcionará.
Minha ideia:
Para " http://www.google.de/
", obtenho o ID de incremento automático 239472
. Então, eu faço os seguintes passos:
short = '';
if divisible by 2, add "a"+the result to short
if divisible by 3, add "b"+the result to short
... until I have divisors for a-z and A-Z.
Isso pode ser repetido até que o número não seja mais divisível. Você acha que essa é uma boa abordagem? Você tem uma ideia melhor?
Devido ao interesse contínuo neste tópico, publiquei uma solução eficiente para o GitHub , com implementações para JavaScript , PHP , Python e Java . Adicione suas soluções, se quiser :)
encode()
edecode()
funções. As etapas são, portanto: (1) Salvar URL no banco de dados (2) Obter ID de linha exclusivo para esse URL do banco de dados (3) Converter o número inteiro em string curta comencode()
, por exemplo,273984
paraf5a4
(4) Use a string curta (por exemplof4a4
) em seu URLs compartilháveis (5) Ao receber uma solicitação de uma sequência curta (por exemplo20a8
), decodifique a sequência para um ID inteiro comdecode()
(6) Procure URL no banco de dados para o ID fornecido. Para conversão, use: github.com/delight-im/ShortURL