लुहन एल्गोरिदम का उपयोग करके नंबरों को मान्य और उत्पन्न करें, जो आमतौर पर क्रेडिट कार्ड नंबर, कनाडाई सामाजिक बीमा नंबर और अन्य पहचान नंबरों के लिए उपयोग किया जाता है। जांचें कि क्या कोई संख्या लुहन जांच पास करती है या एल्गोरिदम के अनुरूप मान्य नंबर उत्पन्न करें।
लुहन एल्गोरिदम, जिसे "मॉड्यूलस 10" या "मोड 10" एल्गोरिदम के रूप में भी जाना जाता है, एक सरल चेकसम फॉर्मूला है जिसका उपयोग विभिन्न पहचान नंबरों, जैसे कि क्रेडिट कार्ड नंबर, कनाडाई सामाजिक बीमा नंबर, IMEI नंबर, और संयुक्त राज्य अमेरिका में राष्ट्रीय प्रदाता पहचानकर्ता नंबरों को मान्य करने के लिए किया जाता है। यह कैलकुलेटर आपको लुहन एल्गोरिदम का उपयोग करके नंबरों को मान्य करने और वैध नंबर उत्पन्न करने की अनुमति देता है जो लुहन जांच पास करते हैं।
लुहन एल्गोरिदम इस प्रकार काम करता है:
यहां लुहन एल्गोरिदम का एक दृश्य प्रतिनिधित्व है:
लुहन एल्गोरिदम को गणितीय रूप से इस प्रकार व्यक्त किया जा सकता है:
मान लीजिए -वां अंक है, सबसे दाहिनी ओर के अंक से (चेक अंक को छोड़कर) बाईं ओर बढ़ते हुए। फिर चेक अंक इस प्रकार चुना जाता है कि:
जहां मॉड्यूलो ऑपरेशन है।
लुहन एल्गोरिदम के विभिन्न क्षेत्रों में कई अनुप्रयोग हैं:
हालांकि लुहन एल्गोरिदम का व्यापक उपयोग होता है, लेकिन विभिन्न उद्देश्यों के लिए अन्य चेकसम एल्गोरिदम भी हैं:
लुहन एल्गोरिदम का निर्माण 1954 में आईबीएम के कंप्यूटर वैज्ञानिक हंस पीटर लुहन द्वारा किया गया था। लुहन सूचना विज्ञान के क्षेत्र में एक अग्रणी थे और उन्हें कई नवाचारों का श्रेय दिया जाता है, जिसमें KWIC (की वर्ड इन कॉन्टेक्स्ट) अनुक्रमण प्रणाली शामिल है।
यह एल्गोरिदम मूल रूप से आकस्मिक त्रुटियों के खिलाफ सुरक्षा के लिए डिज़ाइन किया गया था, न कि दुर्भावनापूर्ण हमलों के लिए। यह ध्यान रखना महत्वपूर्ण है कि जबकि लुहन एल्गोरिदम कई सामान्य त्रुटियों का पता लगा सकता है, यह डेटा सुरक्षा के लिए एक सुरक्षित रूप नहीं है और इसे डेटा सुरक्षा के उद्देश्यों के लिए भरोसा नहीं किया जाना चाहिए।
अपनी उम्र के बावजूद, लुहन एल्गोरिदम अपनी सरलता और सामान्य प्रतिलिपि त्रुटियों को पकड़ने की प्रभावशीलता के कारण व्यापक रूप से उपयोग में है।
यहां विभिन्न प्रोग्रामिंग भाषाओं में लुहन एल्गोरिदम को लागू करने के कुछ कोड उदाहरण दिए गए हैं:
1import random
2
3def luhn_validate(number):
4 digits = [int(d) for d in str(number)]
5 checksum = 0
6 for i in range(len(digits) - 1, -1, -1):
7 d = digits[i]
8 if (len(digits) - i) % 2 == 0:
9 d = d * 2
10 if d > 9:
11 d -= 9
12 checksum += d
13 return checksum % 10 == 0
14
15def generate_valid_number(length):
16 digits = [random.randint(0, 9) for _ in range(length - 1)]
17 checksum = sum(digits[::2]) + sum(sum(divmod(d * 2, 10)) for d in digits[-2::-2])
18 check_digit = (10 - (checksum % 10)) % 10
19 return int(''.join(map(str, digits + [check_digit])))
20
21## उदाहरण उपयोग:
22print(luhn_validate(4532015112830366)) # सत्य
23print(luhn_validate(4532015112830367)) # असत्य
24print(generate_valid_number(16)) # एक वैध 16-अंक संख्या उत्पन्न करता है
25
1function luhnValidate(number) {
2 const digits = number.toString().split('').map(Number);
3 let checksum = 0;
4 for (let i = digits.length - 1; i >= 0; i--) {
5 let d = digits[i];
6 if ((digits.length - i) % 2 === 0) {
7 d *= 2;
8 if (d > 9) d -= 9;
9 }
10 checksum += d;
11 }
12 return checksum % 10 === 0;
13}
14
15function generateValidNumber(length) {
16 const digits = Array.from({length: length - 1}, () => Math.floor(Math.random() * 10));
17 const checksum = digits.reduce((sum, digit, index) => {
18 if ((length - 1 - index) % 2 === 0) {
19 digit *= 2;
20 if (digit > 9) digit -= 9;
21 }
22 return sum + digit;
23 }, 0);
24 const checkDigit = (10 - (checksum % 10)) % 10;
25 return parseInt(digits.join('') + checkDigit);
26}
27
28// उदाहरण उपयोग:
29console.log(luhnValidate(4532015112830366)); // सत्य
30console.log(luhnValidate(4532015112830367)); // असत्य
31console.log(generateValidNumber(16)); // एक वैध 16-अंक संख्या उत्पन्न करता है
32
1import java.util.Random;
2
3public class LuhnValidator {
4 public static boolean luhnValidate(long number) {
5 String digits = String.valueOf(number);
6 int checksum = 0;
7 boolean isEven = true;
8 for (int i = digits.length() - 1; i >= 0; i--) {
9 int digit = Character.getNumericValue(digits.charAt(i));
10 if (isEven) {
11 digit *= 2;
12 if (digit > 9) digit -= 9;
13 }
14 checksum += digit;
15 isEven = !isEven;
16 }
17 return checksum % 10 == 0;
18 }
19
20 public static long generateValidNumber(int length) {
21 Random random = new Random();
22 long[] digits = new long[length - 1];
23 for (int i = 0; i < length - 1; i++) {
24 digits[i] = random.nextInt(10);
25 }
26 long checksum = 0;
27 for (int i = digits.length - 1; i >= 0; i--) {
28 long digit = digits[i];
29 if ((length - 1 - i) % 2 == 0) {
30 digit *= 2;
31 if (digit > 9) digit -= 9;
32 }
33 checksum += digit;
34 }
35 long checkDigit = (10 - (checksum % 10)) % 10;
36 long result = 0;
37 for (long digit : digits) {
38 result = result * 10 + digit;
39 }
40 return result * 10 + checkDigit;
41 }
42
43 public static void main(String[] args) {
44 System.out.println(luhnValidate(4532015112830366L)); // सत्य
45 System.out.println(luhnValidate(4532015112830367L)); // असत्य
46 System.out.println(generateValidNumber(16)); // एक वैध 16-अंक संख्या उत्पन्न करता है
47 }
48}
49
जब लुहन एल्गोरिदम को लागू करते समय, निम्नलिखित किनारे के मामलों और विशेष विचारों पर विचार करें:
इनपुट मान्यता: सुनिश्चित करें कि इनपुट एक वैध संख्या स्ट्रिंग है। गैर-अंक वर्णों को उपयुक्त रूप से संभाला जाना चाहिए (या तो हटा दिया जाए या अमान्य इनपुट के रूप में माना जाए)।
अग्रणी शून्य: एल्गोरिदम को उन संख्याओं के साथ सही ढंग से काम करना चाहिए जिनमें अग्रणी शून्य हैं।
बड़े नंबर: कुछ प्रोग्रामिंग भाषाओं में मानक पूर्णांक प्रकारों की क्षमता से अधिक लंबी संख्याओं को संभालने के लिए तैयार रहें।
खाली इनपुट: परिभाषित करें कि आपकी कार्यान्वयन को खाली स्ट्रिंग या शून्य इनपुट को कैसे संभालना चाहिए।
गैर-मानक वर्ण सेट: कुछ अनुप्रयोगों में, आप उन संख्याओं का सामना कर सकते हैं जो मानक 0-9 सीमा से बाहर के वर्णों के साथ प्रस्तुत की जाती हैं। परिभाषित करें कि इन्हें कैसे संभाला जाना चाहिए।
प्रदर्शन विचार: उन अनुप्रयोगों के लिए जो तेजी से बड़ी संख्या में इनपुट की मान्यता की आवश्यकता होती है, एल्गोरिदम कार्यान्वयन को अनुकूलित करने पर विचार करें।
वैध क्रेडिट कार्ड नंबर:
अमान्य क्रेडिट कार्ड नंबर:
वैध कनाडाई सामाजिक बीमा नंबर:
अमान्य IMEI नंबर:
लुहन एल्गोरिदम के कार्यान्वयन को सत्यापित करने के लिए, आप निम्नलिखित परीक्षण मामलों का उपयोग कर सकते हैं:
1def test_luhn_algorithm():
2 assert luhn_validate(4532015112830366) == True
3 assert luhn_validate(4532015112830367) == False
4 assert luhn_validate(79927398713) == True
5 assert luhn_validate(79927398714) == False
6
7 # उत्पन्न की गई संख्याओं का परीक्षण
8 for _ in range(10):
9 assert luhn_validate(generate_valid_number(16)) == True
10
11 print("सभी परीक्षण पास हुए!")
12
13test_luhn_algorithm()
14