लुहान एल्गोरिथ्म: Difference between revisions

From Vigyanwiki
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Short description|Simple checksum formula}}
{{Short description|Simple checksum formula}}
लुहान [[कलन विधि|एल्गोरिथ्म]] या लुहान सूत्र, जिसे [[मॉड्यूलर अंकगणित]] 10 या मॉड 10 एल्गोरिदम के रूप में भी जाना जाता है, इसका नाम इसके निर्माता, [[आईबीएम]] वैज्ञानिक [[उनके पीटर लुहान]] के नाम पर रखा गया है, एक सरल [[ संख्या जांचें ]] सूत्र है जिसका उपयोग विभिन्न प्रकार की पहचान संख्याओं को मान्य करने के लिए किया जाता है, जैसे भुगतान कार्ड नंबर, [[अंतर्राष्ट्रीय मोबाइल उपकरण पहचान]], संयुक्त राज्य अमेरिका में [[राष्ट्रीय प्रदाता पहचानकर्ता]], [[कनाडा]] [[सामाजिक बीमा संख्या]], इज़राइली पहचान पत्र आईडी संख्या, [[दक्षिण अफ्रीका]] आईडी संख्या, [[स्वीडन]] [[राष्ट्रीय पहचान संख्या]], स्वीडन कॉर्पोरेट पहचान संख्या (ऑर्गएनआर), [[ यूनान ]]ट्रैक्टर सप्लाई कंपनी की रसीदें। इसका वर्णन 23 अगस्त 1960 को दिए गए अमेरिकी पेटेंट संख्या 2,950,048 में किया गया है।<ref name="patent">{{cite patent |country=US |number=2950048A |status=patent |title=संख्याओं के सत्यापन के लिए कंप्यूटर|pubdate=1960-08-23 |fdate=1954-01-06 |inventor1-first=Hans P. |inventor1-last=Luhn |inventorlink=Hans Peter Luhn}}</ref>
'''लुहान [[कलन विधि|एल्गोरिथ्म]]''' या लुहान सूत्र, जिसे [[मॉड्यूलर अंकगणित]] 10 या मॉड 10 एल्गोरिदम के रूप में भी जाना जाता है, इसका नाम इसके निर्माता, [[आईबीएम]] वैज्ञानिक [[उनके पीटर लुहान]] के नाम पर रखा गया है, सरल [[ संख्या जांचें |संख्या जांचें]] सूत्र है जिसका उपयोग विभिन्न प्रकार की पहचान संख्याओं को मान्य करने के लिए किया जाता है, जैसे भुगतान कार्ड नंबर, [[अंतर्राष्ट्रीय मोबाइल उपकरण पहचान]], संयुक्त राज्य अमेरिका में [[राष्ट्रीय प्रदाता पहचानकर्ता]], [[कनाडा]] [[सामाजिक बीमा संख्या]], इज़राइली पहचान पत्र आईडी संख्या, [[दक्षिण अफ्रीका]] आईडी संख्या, [[स्वीडन]] [[राष्ट्रीय पहचान संख्या]], स्वीडन कॉर्पोरेट पहचान संख्या (ऑर्गएनआर), [[ यूनान |यूनान]] ट्रैक्टर सप्लाई कंपनी की रसीदें है। इसका वर्णन 23 अगस्त 1960 को दिए गए अमेरिकी पेटेंट संख्या 2,950,048 में किया गया है।<ref name="patent">{{cite patent |country=US |number=2950048A |status=patent |title=संख्याओं के सत्यापन के लिए कंप्यूटर|pubdate=1960-08-23 |fdate=1954-01-06 |inventor1-first=Hans P. |inventor1-last=Luhn |inventorlink=Hans Peter Luhn}}</ref>


एल्गोरिदम सार्वजनिक डोमेन में है और आज व्यापक उपयोग में है। यह ISO/IEC 7812-1 में निर्दिष्ट है।<ref>{{cite tech report |title=Identification cards — Identification of issuers — Part 1: Numbering system |number=[[ISO/IEC 7812]]-1:2017 |institution=[[International Organization for Standardization]], [[International Electrotechnical Commission]] |date=January 2017 |type=Standard |url=https://www.iso.org/standard/70484.html |chapter=Annex B: Luhn formula for computing modulus-10 “double-add-double” check digits}}</ref> इसका उद्देश्य [[क्रिप्टोग्राफ़िक हैश फ़ंक्शन]] होना नहीं है; इसे दुर्भावनापूर्ण हमलों से नहीं, बल्कि आकस्मिक त्रुटियों से बचाने के लिए डिज़ाइन किया गया था। अधिकांश क्रेडिट कार्ड और कई सरकारी पहचान संख्याएं वैध संख्याओं को गलत टाइप की गई या अन्यथा गलत संख्याओं से अलग करने की एक सरल विधि के रूप में एल्गोरिदम का उपयोग करती हैं।
एल्गोरिदम सार्वजनिक डोमेन में है और आज व्यापक उपयोग में है। यह आईएसओ/आईईसी 7812-1 में निर्दिष्ट है।<ref>{{cite tech report |title=Identification cards — Identification of issuers — Part 1: Numbering system |number=[[ISO/IEC 7812]]-1:2017 |institution=[[International Organization for Standardization]], [[International Electrotechnical Commission]] |date=January 2017 |type=Standard |url=https://www.iso.org/standard/70484.html |chapter=Annex B: Luhn formula for computing modulus-10 “double-add-double” check digits}}</ref> इसका उद्देश्य [[क्रिप्टोग्राफ़िक हैश फ़ंक्शन]] होना नहीं है; इसे दुर्भावनापूर्ण आक्रमण से नहीं, किन्तु आकस्मिक त्रुटियों से बचाने के लिए डिज़ाइन किया गया था। अधिकांश क्रेडिट कार्ड और विभिन्न सरकारी पहचान संख्याएं वैध संख्याओं को गलत टाइप की गई या अन्यथा गलत संख्याओं से पृथक करने की सरल विधि के रूप में एल्गोरिदम का उपयोग करती हैं।


==विवरण==
==विवरण==
Line 9: Line 9:
# पेलोड के साथ, सबसे दाएँ अंक से प्रारंभ करें। बाईं ओर बढ़ते हुए, प्रत्येक दूसरे अंक (सबसे दाएँ अंक सहित) का मान दोगुना करें।
# पेलोड के साथ, सबसे दाएँ अंक से प्रारंभ करें। बाईं ओर बढ़ते हुए, प्रत्येक दूसरे अंक (सबसे दाएँ अंक सहित) का मान दोगुना करें।
# परिणामी अंकों के मानों का योग करें.
# परिणामी अंकों के मानों का योग करें.
# चेक अंक की गणना किसके द्वारा की जाती है <math>10 - (s\operatorname{mod} 10)</math>. यह वह न्यूनतम संख्या (संभवतः शून्य) है जिसे जोड़ा जाना चाहिए <math>s</math> 10 का गुणज बनाने के लिए। समान मान देने वाले अन्य मान्य सूत्र हैं <math>(10 - s)\operatorname{mod} 10</math> और <math>10\lceil s/10\rceil - s</math>.
# चेक अंक की गणना <math>10 - (s\operatorname{mod} 10)</math> द्वारा की जाती है . यह वह न्यूनतम संख्या (संभवतः शून्य) है जिसे 10 का गुणज बनाने के लिए <math>s</math> में जोड़ा जाना चाहिए समान मान देने वाले अन्य मान्य सूत्र हैं <math>(10 - s)\operatorname{mod} 10</math> और <math>10\lceil s/10\rceil - s</math>.
#


=== चेक अंक की गणना के लिए उदाहरण ===
=== चेक अंक की गणना के लिए उदाहरण ===


खाता संख्या 7992739871 का एक उदाहरण मानें (सिर्फ पेलोड, चेक अंक अभी तक शामिल नहीं है):
खाता संख्या 7992739871 का उदाहरण मानें (सिर्फ पेलोड, चेक अंक अभी तक सम्मिलित नहीं है):


{| class="wikitable" style="text-align:center;border:none;background:transparent;"4353464434047422| style="width:1.5em" | 4283039836977353| style="width:1.5em" | 9
{| class="wikitable" style="text-align:center;border:none;background:transparent;"4353464434047422| style="width:1.5em" | 4283039836977353| style="width:1.5em" | 9
Line 28: Line 29:
| style="width:1.5em" | 1
| style="width:1.5em" | 1
|-
|-
! Multipliers
! मल्टीप्लायर
| 1
| 1
| 2
| 2
Line 64: Line 65:
| style="background: #FFA;" | '''2'''
| style="background: #FFA;" | '''2'''
|-
|-
! Sum digits
! अंकों का योग
|7
|7
|'''9''' (1+8)
|'''9''' (1+8)
Line 78: Line 79:
परिणामी अंकों का योग 67 है।
परिणामी अंकों का योग 67 है।


चेक अंक के बराबर है <math>10 - (67\operatorname{mod} 10) = 3</math>.
चेक अंक <math>10 - (67\operatorname{mod} 10) = 3</math> के बराबर है .


इससे पूरा खाता नंबर 79927398713 पढ़ जाता है।
इससे पूरा खाता नंबर 79927398713 पढ़ जाता है।
Line 88: Line 89:
# अपने परिणाम की तुलना मूल चेक अंक से करें। यदि दोनों संख्याएँ मेल खाती हैं, तो परिणाम मान्य है। (उदा.<math>(givenCheckDigit = calculatedCheckDigit) \Leftrightarrow (isValidCheckDigit)</math>).
# अपने परिणाम की तुलना मूल चेक अंक से करें। यदि दोनों संख्याएँ मेल खाती हैं, तो परिणाम मान्य है। (उदा.<math>(givenCheckDigit = calculatedCheckDigit) \Leftrightarrow (isValidCheckDigit)</math>).


==ताकतें और कमजोरियाँ==
==सशक्तता और अशक्तता==
लुहान एल्गोरिथ्म सभी एकल-अंकीय त्रुटियों के साथ-साथ आसन्न अंकों के लगभग सभी स्थानान्तरण का पता लगाएगा। हालाँकि, यह दो अंकों के अनुक्रम 09 से 90 (या इसके विपरीत) के स्थानान्तरण का पता नहीं लगाएगा। यह अधिकांश संभावित जुड़वां त्रुटियों का पता लगाएगा (यह 22 ↔ 55, 33 ↔ 66 या 44 ↔ 77 का पता नहीं लगाएगा)।
लुहान एल्गोरिथ्म सभी एकल-अंकीय त्रुटियों के साथ-साथ आसन्न अंकों के लगभग सभी स्थानान्तरण का पता लगाएगा। चूँकि, यह दो अंकों के अनुक्रम 09 से 90 (या इसके विपरीत) के स्थानान्तरण का पता नहीं होता है। यह अधिकांश संभावित जुड़वां त्रुटियों का पता लगाएगा (यह 22 ↔ 55, 33 ↔ 66 या 44 ↔ 77 का पता नहीं लगाएगा)।


अन्य, अधिक जटिल चेक-डिजिट एल्गोरिदम (जैसे [[वेरहॉफ एल्गोरिथम]] और [[धूल एल्गोरिथ्म]]) अधिक ट्रांसक्रिप्शन त्रुटियों का पता लगा सकते हैं। [[लुहान मॉड एन एल्गोरिदम]] एक एक्सटेंशन है जो गैर-संख्यात्मक स्ट्रिंग का समर्थन करता है।
अन्य, अधिक सम्मिश्र चेक-डिजिट एल्गोरिदम (जैसे [[वेरहॉफ एल्गोरिथम]] और [[धूल एल्गोरिथ्म|डैम एल्गोरिथ्म]]) अधिक ट्रांसक्रिप्शन त्रुटियों का पता लगा सकते हैं। [[लुहान मॉड एन एल्गोरिदम]] एक्सटेंशन है जो गैर-संख्यात्मक स्ट्रिंग का समर्थन करता है।


क्योंकि एल्गोरिदम अंकों पर दाएं से बाएं तरीके से काम करता है और शून्य अंक परिणाम को केवल तभी प्रभावित करते हैं जब वे स्थिति में बदलाव का कारण बनते हैं, संख्याओं की एक स्ट्रिंग की शुरुआत में शून्य-पैडिंग गणना को प्रभावित नहीं करती है। इसलिए, सिस्टम जो अंकों की एक विशिष्ट संख्या को पैड करते हैं (उदाहरण के लिए 1234 को 0001234 में परिवर्तित करके) पैडिंग से पहले या बाद में लुहान सत्यापन कर सकते हैं और समान परिणाम प्राप्त कर सकते हैं।
क्योंकि एल्गोरिदम अंकों पर दाएं से बाएं विधि से कार्य करता है और शून्य अंक परिणाम को केवल तभी प्रभावित करते हैं जब वे स्थिति में परिवर्तन का कारण बनते हैं, संख्याओं की स्ट्रिंग की प्रारंभ में शून्य-पैडिंग गणना को प्रभावित नहीं करती है। इसलिए, सिस्टम जो अंकों की विशिष्ट संख्या को पैड करते हैं (उदाहरण के लिए 1234 को 0001234 में परिवर्तित करके) पैडिंग से पहले या पश्चात् में लुहान सत्यापन कर सकते हैं और समान परिणाम प्राप्त कर सकते हैं।


एल्गोरिदम संयुक्त राज्य अमेरिका के पेटेंट में दिखाई दिया<ref name="patent" />चेकसम की गणना के लिए एक सरल, हाथ से पकड़े जाने वाले, यांत्रिक उपकरण के लिए। डिवाइस ने यांत्रिक तरीकों से मॉड 10 योग लिया। प्रतिस्थापन अंक, यानी, डबल और कम प्रक्रिया के परिणाम, यांत्रिक रूप से उत्पादित नहीं किए गए थे। बल्कि, मशीन की बॉडी पर अंकों को उनके क्रमबद्ध क्रम में अंकित किया गया था।
एल्गोरिदम संयुक्त राज्य अमेरिका के पेटेंट में दिखाई दिया था <ref name="patent" /> चेकसम की गणना के लिए सरल, हाथ से पकड़े जाने वाले, यांत्रिक उपकरण के लिए डिवाइस ने यांत्रिक विधियों से मॉड 10 योग लिया था। प्रतिस्थापन अंक, अर्थात, डबल और कम प्रक्रिया के परिणाम, यांत्रिक रूप से उत्पादित नहीं किए गए थे। किन्तु, मशीन की बॉडी पर अंकों को उनके क्रमबद्ध क्रम में अंकित किया गया था।


== स्यूडोकोड कार्यान्वयन ==
== स्यूडोकोड कार्यान्वयन ==


निम्नलिखित फ़ंक्शन चेक अंक सहित एक कार्ड नंबर को पूर्णांकों की एक सरणी के रूप में लेता है और यदि चेक अंक सही है तो सही आउटपुट देता है, अन्यथा गलत आउटपुट देता है।
निम्नलिखित फ़ंक्शन चेक अंक सहित कार्ड नंबर को पूर्णांकों की सरणी के रूप में लेता है और यदि चेक अंक सही है तो सही आउटपुट देता है, अन्यथा गलत आउटपुट देता है।<syntaxhighlight lang="abl">
 
function isValid(cardNumber[1..length])                                                                          
फ़ंक्शन मान्य है(कार्डनंबर[1..लंबाई])
    sum := 0                                                                                                  
    योग := 0
    parity := length mod 2                                                                                  
    समता := लंबाई मॉड 2
    for i from 1 to length do                                                                                 
    मेरे लिए 1 से लंबाई तक करें
        if i mod 2 != parity then                                                       
        यदि मैं 2 != समता को मॉडिफाई करता हूँ तो
            sum := sum + cardNumber[i]                                                                      
            योग := योग + कार्डनंबर[i]
        elseif cardNumber[i] > 4 then                                                                     
        अन्यथा यदि कार्डनंबर[i] > 4 तो
            sum := sum + 2 * cardNumber[i] - 9                                                                      
            योग := योग + 2 * कार्डनंबर[i] - 9
        else
        अन्य
            sum := sum + 2 * cardNumber[i]
            योग := योग + 2 * कार्डनंबर[i]
        end if
        अगर अंत
    end for
    के लिए समाप्त
    return cardNumber[length] == (10 - (sum mod 10))
    रिटर्न कार्डनंबर[लंबाई] == (10 - (कुल योग 10))
end function
अंत समारोह
</syntaxhighlight>


== कोड कार्यान्वयन ==
== कोड कार्यान्वयन ==


=== सी शार्प (प्रोग्रामिंग भाषा)|सी# ===
=== C# ===
<सिंटैक्सहाइलाइट लैंग= सी# लाइन= 1 >
<syntaxhighlight>
बूल IsValidLuhn(int[] अंकों में)
bool IsValidLuhn(in int[] digits)
{
{
     int check_digit = 0;
     int check_digit = 0;
     (int i = अंक. लंबाई - 2; i >= 0; --i) के लिए
     for (int i = digits.Length - 2; i >= 0; --i)
         check_digit += ((i और 1) 0 है) स्विच
         check_digit += ((i & 1) is 0) switch
         {
         {
             सत्य => अंक[i] > 4? अंक[i] * 2 - 9 : अंक[i] * 2,
             true  => digits[i] > 4 ? digits[i] * 2 - 9 : digits[i] * 2,
             गलत => अंक[i]
             false => digits[i]
         };
         };


     वापसी 10 - (check_digit % 10) == अंक.अंतिम();
     return 10 - (check_digit % 10) == digits.Last();
}
}
</सिंटैक्सहाइलाइट>
</syntaxhighlight>
 
==संदर्भ==
==संदर्भ==
<references/>
<references/>
Line 147: Line 147:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 25/07/2023]]
[[Category:Created On 25/07/2023]]
[[Category:Vigyan Ready]]

Latest revision as of 07:51, 6 November 2023

लुहान एल्गोरिथ्म या लुहान सूत्र, जिसे मॉड्यूलर अंकगणित 10 या मॉड 10 एल्गोरिदम के रूप में भी जाना जाता है, इसका नाम इसके निर्माता, आईबीएम वैज्ञानिक उनके पीटर लुहान के नाम पर रखा गया है, सरल संख्या जांचें सूत्र है जिसका उपयोग विभिन्न प्रकार की पहचान संख्याओं को मान्य करने के लिए किया जाता है, जैसे भुगतान कार्ड नंबर, अंतर्राष्ट्रीय मोबाइल उपकरण पहचान, संयुक्त राज्य अमेरिका में राष्ट्रीय प्रदाता पहचानकर्ता, कनाडा सामाजिक बीमा संख्या, इज़राइली पहचान पत्र आईडी संख्या, दक्षिण अफ्रीका आईडी संख्या, स्वीडन राष्ट्रीय पहचान संख्या, स्वीडन कॉर्पोरेट पहचान संख्या (ऑर्गएनआर), यूनान ट्रैक्टर सप्लाई कंपनी की रसीदें है। इसका वर्णन 23 अगस्त 1960 को दिए गए अमेरिकी पेटेंट संख्या 2,950,048 में किया गया है।[1]

एल्गोरिदम सार्वजनिक डोमेन में है और आज व्यापक उपयोग में है। यह आईएसओ/आईईसी 7812-1 में निर्दिष्ट है।[2] इसका उद्देश्य क्रिप्टोग्राफ़िक हैश फ़ंक्शन होना नहीं है; इसे दुर्भावनापूर्ण आक्रमण से नहीं, किन्तु आकस्मिक त्रुटियों से बचाने के लिए डिज़ाइन किया गया था। अधिकांश क्रेडिट कार्ड और विभिन्न सरकारी पहचान संख्याएं वैध संख्याओं को गलत टाइप की गई या अन्यथा गलत संख्याओं से पृथक करने की सरल विधि के रूप में एल्गोरिदम का उपयोग करती हैं।

विवरण

चेक अंक की गणना इस प्रकार की जाती है:

  1. यदि संख्या में पहले से ही चेक अंक है, तो पेलोड बनाने के लिए उस अंक को छोड़ दें। चेक अंक प्रायः अंतिम अंक होता है।
  2. पेलोड के साथ, सबसे दाएँ अंक से प्रारंभ करें। बाईं ओर बढ़ते हुए, प्रत्येक दूसरे अंक (सबसे दाएँ अंक सहित) का मान दोगुना करें।
  3. परिणामी अंकों के मानों का योग करें.
  4. चेक अंक की गणना द्वारा की जाती है . यह वह न्यूनतम संख्या (संभवतः शून्य) है जिसे 10 का गुणज बनाने के लिए में जोड़ा जाना चाहिए समान मान देने वाले अन्य मान्य सूत्र हैं और .

चेक अंक की गणना के लिए उदाहरण

खाता संख्या 7992739871 का उदाहरण मानें (सिर्फ पेलोड, चेक अंक अभी तक सम्मिलित नहीं है):

7 9 9 2 7 3 9 8 7 1
मल्टीप्लायर 1 2 1 2 1 2 1 2 1 2
= = = = = = = = = =
7 18 9 4 7 6 9 16 7 2
अंकों का योग 7 9 (1+8) 9 4 7 6 9 7 (1+6) 7 2

परिणामी अंकों का योग 67 है।

चेक अंक के बराबर है .

इससे पूरा खाता नंबर 79927398713 पढ़ जाता है।

चेक अंक को मान्य करने के लिए उदाहरण

  1. सत्यापित करने के लिए नंबर का चेक अंक (अंतिम अंक) छोड़ें। (उदा. 79927398713 -> 7992739871)
  2. चेक अंक की गणना करें (ऊपर देखें)
  3. अपने परिणाम की तुलना मूल चेक अंक से करें। यदि दोनों संख्याएँ मेल खाती हैं, तो परिणाम मान्य है। (उदा.).

सशक्तता और अशक्तता

लुहान एल्गोरिथ्म सभी एकल-अंकीय त्रुटियों के साथ-साथ आसन्न अंकों के लगभग सभी स्थानान्तरण का पता लगाएगा। चूँकि, यह दो अंकों के अनुक्रम 09 से 90 (या इसके विपरीत) के स्थानान्तरण का पता नहीं होता है। यह अधिकांश संभावित जुड़वां त्रुटियों का पता लगाएगा (यह 22 ↔ 55, 33 ↔ 66 या 44 ↔ 77 का पता नहीं लगाएगा)।

अन्य, अधिक सम्मिश्र चेक-डिजिट एल्गोरिदम (जैसे वेरहॉफ एल्गोरिथम और डैम एल्गोरिथ्म) अधिक ट्रांसक्रिप्शन त्रुटियों का पता लगा सकते हैं। लुहान मॉड एन एल्गोरिदम एक्सटेंशन है जो गैर-संख्यात्मक स्ट्रिंग का समर्थन करता है।

क्योंकि एल्गोरिदम अंकों पर दाएं से बाएं विधि से कार्य करता है और शून्य अंक परिणाम को केवल तभी प्रभावित करते हैं जब वे स्थिति में परिवर्तन का कारण बनते हैं, संख्याओं की स्ट्रिंग की प्रारंभ में शून्य-पैडिंग गणना को प्रभावित नहीं करती है। इसलिए, सिस्टम जो अंकों की विशिष्ट संख्या को पैड करते हैं (उदाहरण के लिए 1234 को 0001234 में परिवर्तित करके) पैडिंग से पहले या पश्चात् में लुहान सत्यापन कर सकते हैं और समान परिणाम प्राप्त कर सकते हैं।

एल्गोरिदम संयुक्त राज्य अमेरिका के पेटेंट में दिखाई दिया था [1] चेकसम की गणना के लिए सरल, हाथ से पकड़े जाने वाले, यांत्रिक उपकरण के लिए डिवाइस ने यांत्रिक विधियों से मॉड 10 योग लिया था। प्रतिस्थापन अंक, अर्थात, डबल और कम प्रक्रिया के परिणाम, यांत्रिक रूप से उत्पादित नहीं किए गए थे। किन्तु, मशीन की बॉडी पर अंकों को उनके क्रमबद्ध क्रम में अंकित किया गया था।

स्यूडोकोड कार्यान्वयन

निम्नलिखित फ़ंक्शन चेक अंक सहित कार्ड नंबर को पूर्णांकों की सरणी के रूप में लेता है और यदि चेक अंक सही है तो सही आउटपुट देता है, अन्यथा गलत आउटपुट देता है।

function isValid(cardNumber[1..length])                                                                            
    sum := 0                                                                                                   
    parity := length mod 2                                                                                    
    for i from 1 to length do                                                                                  
        if i mod 2 != parity then                                                        
            sum := sum + cardNumber[i]                                                                       
        elseif cardNumber[i] > 4 then                                                                      
            sum := sum + 2 * cardNumber[i] - 9                                                                        
        else
            sum := sum + 2 * cardNumber[i]
        end if
    end for
    return cardNumber[length] == (10 - (sum mod 10))
end function

कोड कार्यान्वयन

C#

bool IsValidLuhn(in int[] digits)
{
    int check_digit = 0;
    for (int i = digits.Length - 2; i >= 0; --i)
        check_digit += ((i & 1) is 0) switch
        {
            true  => digits[i] > 4 ? digits[i] * 2 - 9 : digits[i] * 2,
            false => digits[i]
        };

    return 10 - (check_digit % 10) == digits.Last();
}

संदर्भ

  1. 1.0 1.1 US patent 2950048A, Luhn, Hans P., "संख्याओं के सत्यापन के लिए कंप्यूटर", published 1960-08-23 
  2. "Annex B: Luhn formula for computing modulus-10 "double-add-double" check digits". Identification cards — Identification of issuers — Part 1: Numbering system (Standard). International Organization for Standardization, International Electrotechnical Commission. January 2017. ISO/IEC 7812-1:2017.


बाहरी संबंध