Luhn

Luhn

मध्यम

परिचय

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 वैध है!

अवैध कनाडाई SIN

जाँची जाने वाली संख्या 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 वैध नहीं है!

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
YAMLScript Exercism

Luhn शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और YAMLScript को 60 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।

Luhn को गहराई से जानिए!

हम Luhn के 8 अलग-अलग वर्शन देखते हैं। शुरुआत एक बहुत करीने से लिखी Ruby इम्प्लीमेंटेशन से होती है, फिर कुछ इम्पेरेटिव और फंक्शनल तरीके देखते हैं, और अंत में एक SQLite वर्शन पर पहुँचते हैं, जिसे समझने में Erik और Jeremy को काफी मेहनत लगी!