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