मैं एक URL शॉर्टनर सेवा बनाना चाहता हूं जहां आप एक लंबे URL को इनपुट फ़ील्ड में लिख सकते हैं और सेवा URL को छोटा कर देती है "http://www.example.org/abcdef
" में ।
" abcdef
" के बजाय छह वर्णों वाला कोई अन्य स्ट्रिंग हो सकता है a-z, A-Z and 0-9
। यह 56 ~ 57 बिलियन संभव तार बनाता है।
मेरा दृष्टिकोण:
मेरे पास एक डेटाबेस तालिका है जिसमें तीन कॉलम हैं:
- आईडी, पूर्णांक, ऑटो-वेतन वृद्धि
- उपयोगकर्ता द्वारा दर्ज किया गया लंबा, स्ट्रिंग, लंबा URL
- छोटा, स्ट्रिंग, छोटा URL (या सिर्फ छह अक्षर)
फिर मैं लंबे URL को तालिका में सम्मिलित करूँगा। तब मैं " id
" के लिए ऑटो-इन्क्रीमेंट वैल्यू चुनूँगा और इसका एक हैश बनाऊंगा। यह हैश तब डाला जाना चाहिए "short
" के । लेकिन मुझे किस प्रकार के हैश का निर्माण करना चाहिए? एमडी 5 जैसे हैश एल्गोरिदम बहुत लंबे तार पैदा करते हैं। मैं इन एल्गोरिदम का उपयोग नहीं करता, मुझे लगता है। एक स्व-निर्मित एल्गोरिथ्म भी काम करेगा।
मेरा विचार:
" http://www.google.de/
" के लिए मुझे ऑटो-इंक्रीमेंट आईडी मिलता है 239472
। फिर मैं निम्नलिखित कदम उठाता हूं:
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.
यह दोहराया जा सकता है जब तक कि संख्या किसी भी अधिक विभाज्य नहीं है। क्या आपको लगता है कि यह एक अच्छा तरीका है? क्या आपके पास एक बेहतर विचार है?
इस विषय में जारी रुचि के कारण, मैंने GitHub के लिए एक कुशल समाधान प्रकाशित किया है , जावास्क्रिप्ट , PHP , पायथन और जावा के लिए कार्यान्वयन के साथ । अपने समाधान जोड़ें अगर आप की तरह :)
encode()
औरdecode()
कार्य दोनों हो सकते हैं । चरणों इसलिए कर रहे हैं: (1) सहेजें यूआरएल डेटाबेस में (2) के साथ छोटे स्ट्रिंग के लिए डेटाबेस (3) Convert पूर्णांक आईडी से उस URL के लिए अद्वितीय पंक्ति आईडी प्राप्त करेंencode()
, जैसे273984
करने के लिएf5a4
(4) कम स्ट्रिंग (उदाहरण के लिए उपयोग करेंf4a4
) में sharable URL (5) छोटी स्ट्रिंग (जैसे20a8
) के लिए अनुरोध प्राप्त करते समय , स्ट्रिंग को पूर्णांक आईडी के साथ डिकोड करेंdecode()
(6) दिए गए आईडी के लिए डेटाबेस में URL देखें। रूपांतरण के लिए, उपयोग करें: github.com/delight-im/ShortURL