Bir giriş alanına uzun bir URL yazabileceğiniz ve hizmet URL'yi " http://www.example.org/abcdef
" olarak kısaltan bir URL kısaltıcı hizmeti oluşturmak istiyorum .
" abcdef
" Yerine altı karakter içeren başka bir dize olabilir a-z, A-Z and 0-9
. Bu 56 ~ 57 milyar olası dizgileri yapar.
Benim yaklaşımım:
Üç sütun içeren bir veritabanı tablo var:
- kimlik, tamsayı, otomatik artış
- uzun, dize, kullanıcının girdiği uzun URL
- kısa, dize, kısaltılmış URL (veya yalnızca altı karakter)
Daha sonra uzun URL'yi tabloya eklerdim. Sonra " id
" için otomatik artış değerini seçer ve bir karma oluştururdum. Bu karma daha sonra " short
" olarak eklenmelidir . Ama ne tür bir karma yapmalıyım? MD5 gibi karma algoritmalar çok uzun dizeler oluşturur. Bence bu algoritmaları kullanmıyorum. Kendi kendine oluşturulmuş bir algoritma da çalışacaktır.
Benim fikrim:
" http://www.google.de/
" İçin otomatik artış kimliğini alıyorum 239472
. Sonra aşağıdaki adımları gerçekleştiriyorum:
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.
Bu sayı bölünemez hale gelinceye kadar tekrarlanabilir. Bunun iyi bir yaklaşım olduğunu düşünüyor musunuz? Daha iyi bir fikrin var mı?
Bu konuya olan ilgiden dolayı, GitHub'a JavaScript , PHP , Python ve Java uygulamaları ile etkin bir çözüm yayınladım . İsterseniz çözümlerinizi ekleyin :)
encode()
vedecode()
işlevlere sahip olabileceğiniz anlamına gelir . Adımlar nedenle şunlardır: (1) Kaydet URL veritabanında (2) ile kısa dizeye veritabanı (3) dönüştürme tamsayı kimliğinden bu URL için benzersiz satır kimliği alınencode()
, örneğin273984
üzeref5a4
(4) kısa bir dize (örn kullanınf4a4
olarak) sizin paylaşılabilir URL'ler (5) Kısa bir dize (örn.20a8
) için bir istek alırken , dizeyidecode()
(6) ile bir tamsayı kimliğine göre kodunu çözün . Dönüşüm için şunu kullanın: github.com/delight-im/ShortURL