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ınf4a4olarak) 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