লুন অ্যালগরিদম ব্যবহার করে সংখ্যা যাচাই এবং তৈরি করুন, যা সাধারণত ক্রেডিট কার্ড নম্বর, কানাডিয়ান সামাজিক নিরাপত্তা নম্বর এবং অন্যান্য পরিচয় নম্বরের জন্য ব্যবহৃত হয়। পরীক্ষা করুন যে একটি সংখ্যা লুন পরীক্ষা পাস করে কিনা বা অ্যালগরিদমের সাথে সঙ্গতিপূর্ণ বৈধ সংখ্যা তৈরি করুন।
লুন অ্যালগরিদম, যা "মডুলাস 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