கடன் அட்டை எண்கள், கனடிய சமூக பாதுகாப்பு எண்கள் மற்றும் பிற அடையாள எண்களைப் பயன்படுத்தும் லூன் அல்காரிதத்தைப் பயன்படுத்தி எண்களை சரிபார்க்கவும் உருவாக்கவும். ஒரு எண் லூன் சோதனையை கடந்து செல்கின்றதா என்பதை சோதிக்கவும் அல்லது அல்காரிதத்துடன் ஒத்துவரும் செல்லுபடியாகும் எண்களை உருவாக்கவும்.
லூன் அல்கொரிதம், "மாடுலஸ் 10" அல்லது "மாட் 10" அல்கொரிதம் எனவும் அழைக்கப்படுகிறது, கடன் அட்டை எண்கள், கனடிய சமூக பாதுகாப்பு எண்கள், IMEI எண்கள் மற்றும் அமெரிக்காவில் தேசிய வழங்குநர் அடையாள எண்கள் போன்ற பல அடையாள எண்களை சரிபார்க்க பயன்படுத்தப்படும் எளிய சோதனை சூத்திரமாகும். இந்த கணக்கீட்டாளர் லூன் அல்கொரிதத்தைப் பயன்படுத்தி எண்களை சரிபார்க்கவும், லூன் சோதனைக்கு கடந்து செல்லும் செல்லுபடியாகும் எண்களை உருவாக்கவும் உங்களுக்கு அனுமதிக்கிறது.
லூன் அல்கொரிதம் பின்வருமாறு செயல்படுகிறது:
லூன் அல்கொரிதத்தின் காட்சி பிரதிநிதித்துவம் இதோ:
லூன் அல்கொரிதத்தை கணிதமாக பின்வருமாறு வெளிப்படுத்தலாம்:
இங்கு என்பது மாடுலோ செயல்பாடு.
லூன் அல்கொரிதம் பல துறைகளில் பல்வேறு பயன்பாடுகளை கொண்டுள்ளது:
லூன் அல்கொரிதம் பரவலாகப் பயன்படுத்தப்படும் போதிலும், பல்வேறு நோக்கங்களுக்கான பிற சோதனை அல்கொரிதங்கள் உள்ளன:
லூன் அல்கொரிதம் 1954 இல் IBM கணினி விஞ்ஞானி ஹான்ஸ் பீட்டர் லூன் மூலம் உருவாக்கப்பட்டது. தகவல் அறிவியலில் முன்னணி நபராக இருந்த லூன், 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)) # True
23print(luhn_validate(4532015112830367)) # False
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)); // true
30console.log(luhnValidate(4532015112830367)); // false
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)); // true
45 System.out.println(luhnValidate(4532015112830367L)); // false
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