Global Verification Authority में आपको अभी-अभी एक बहुत महत्वपूर्ण काम सौंपा गया है। पूरे शहर में, ऑनलाइन खरीदारी से लेकर सुरक्षित लॉगिन तक, अनगिनत काम क्रेडिट कार्ड नंबर, बैंक खाता नंबर, ट्रांज़ैक्शन कोड और ट्रैकिंग ID जैसी संख्यात्मक पहचानों की सटीकता पर निर्भर करते हैं। Luhn एल्गोरिदम एक आसान चेकसम फॉर्मूला है, जो गलती से टाइप हुए नंबरों को पहचानने में मदद करता है।
आपकी मेज़ पर पहचानकर्ताओं का एक ढेर अभी पहुँचा है। इन सभी को Luhn की जाँच पास करनी होगी, ताकि पक्का हो सके कि ये वैध हैं। अगर कोई इनमें से जाँच पास न कर पाए, तो उसे अमान्य बता दिया जाएगा। इससे गलत ट्रांज़ैक्शन होना या खाते का सत्यापन न हो पाना जैसी गलतियों से बचा जा सकेगा।
क्या आप यह काम ठीक से पूरा कर सकते हैं? कई सेवाओं की विश्वसनीयता आप पर निर्भर है।
बताइए कि कोई संख्या Luhn फॉर्मूला के अनुसार वैध है या नहीं।
संख्या आपको एक स्ट्रिंग के रूप में दी जाएगी।
1 या उससे कम लंबाई की स्ट्रिंग वैध नहीं होती। इनपुट में स्पेस की अनुमति है, लेकिन जाँचने से पहले उन्हें हटा देना चाहिए। इनके अलावा और कोई भी गैर-अंकीय अक्षर स्वीकार्य नहीं है।
जाँची जाने वाली संख्या 4539 3195 0343 6467 है।
Luhn एल्गोरिदम का पहला चरण यह है कि हम संख्या के अंत से शुरू करें और हर दूसरे अंक को दोगुना करें। हम दाईं ओर से दूसरे अंक से शुरू करते हैं और बाईं ओर बढ़ते जाते हैं।
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
अगर किसी अंक को दोगुना करने का परिणाम 9 से बड़ा हो, तो उस परिणाम में से 9 घटा दीजिए। हमें यह मिलता है:
8569 6195 0383 3437
अंत में, हम सभी अंकों का जोड़ करते हैं। अगर जोड़ 10 से पूरी तरह विभाज्य हो, तो मूल संख्या वैध है।
8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80
80, 10 से पूरी तरह विभाज्य है, इसलिए संख्या 4539 3195 0343 6467 वैध है!
जाँची जाने वाली संख्या 066 123 468 है।
शुरुआत संख्या के अंत से होती है: दाईं ओर से दूसरे अंक से शुरू करके हर दूसरे अंक को दोगुना किया जाता है।
066 123 478
↑ ↑ ↑ ↑ (double these)
किसी अंक को दोगुना करने पर अगर परिणाम 9 से बड़ा आए, तो उसमें से 9 घटा दीजिए। इसके बाद हमें यह मिलता है:
036 226 458
अब हम अंकों का जोड़ करते हैं:
0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36
36, 10 से पूरी तरह विभाज्य नहीं है, इसलिए संख्या 066 123 478 वैध नहीं है!
Exercism पर साइन अप कीजिए और YAMLScript को 60 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
हम Luhn के 8 अलग-अलग वर्शन देखते हैं। शुरुआत एक बहुत करीने से लिखी Ruby इम्प्लीमेंटेशन से होती है, फिर कुछ इम्पेरेटिव और फंक्शनल तरीके देखते हैं, और अंत में एक SQLite वर्शन पर पहुँचते हैं, जिसे समझने में Erik और Jeremy को काफी मेहनत लगी!