লুহন অ্যালগরিদম ক্যালকুলেটর - ক্রেডিট কার্ড এবং আইএমইআই যাচাই
ক্রেডিট কার্ড যাচাইকরণ, আইএমইআই পরীক্ষা এবং আইডি যাচাইয়ের জন্য বিনামূল্যের লুহন মোড ১০ ক্যালকুলেটর। তৎক্ষণাৎ নম্বর যাচাই করুন বা অনলাইনে পরীক্ষার তথ্য তৈরি করুন।
লুহন অ্যালগরিদম ক্যালকুলেটর
পরীক্ষা করুন আপনার সংখ্যাটি লুহন মড 10 যাচাইয়ে পাস করে কিনা
ডকুমেন্টেশন
লুন অ্যালগরিদম বোঝা
ক্রেডিট কার্ড নম্বর যাচাই করতে বা IMEI যাচাই করতে চাইছেন? লুন অ্যালগরিদম (বা "মড 10 অ্যালগরিদম") একটি চেকসাম সূত্র যা ১৯৫৪ সাল থেকে পেমেন্ট যাচাইকরণের মূল ভিত্তি। আইবিএম বিজ্ঞানী হান্স পিটার লুন এই সুন্দর গাণিতিক পরীক্ষাটি তৈরি করেছিলেন যাতে ম্যানুয়াল ডেটা এন্ট্রিতে টাইপো এবং প্রতিলিপি ত্রুটি ধরা পড়ে—যেমন যখন আপনি দুটি অঙ্ক ভুল বদলে দেন বা একটি নম্বর ভুল টাইপ করেন।
এর যে বৈশিষ্ট্য অতুলনীয়: প্রতিটি বড় ক্রেডিট কার্ড নেটওয়ার্ক (ভিসা, মাস্টারকার্ড, আমেরিকান এক্সপ্রেস), মোবাইল ডিভাইস IMEI নম্বর, কানাডিয়ান সোশ্যাল ইনসুরেন্স নম্বর, এবং মার্কিন স্বাস্থ্য সেবা প্রদানকারীর পরিচয়পত্রগুলি এই অ্যালগরিদমের উপর নির্ভর করে। যখন আপনি পেমেন্ট ফর্মে একটি কার্ড নম্বর টাইপ করেন এবং এটি তৎক্ষণাৎ ত্রুটি প্রত্যাখ্যান করে, তখন সেটা লুন পরীক্ষা কাজ করছে।
এই ক্যালকুলেটর আপনাকে যেকোনো নম্বর ক্রমের যাচাই করতে বা পরীক্ষা তথ্য তৈরি করতে দেয়—যা অত্যন্ত গুরুত্বপূর্ণ যখন আপনি পেমেন্ট ইন্টিগ্রেশন তৈরি করছেন বা বাস্তব গ্রাহকের ডেটা ব্যবহার না করে পরিচয় সিস্টেম পরীক্ষা করছেন।
কিভাবে এই ক্যালকুলেটর ব্যবহার করবেন
বিদ্যমান সংখ্যাগুলি যাচাই করা: যেকোনো সংখ্যা সিকোয়েন্স—যেমন ১৬-ডিজিটের ক্রেডিট কার্ড বা ১৫-ডিজিটের IMEI—লিখুন এবং "ভ্যালিডেট" বাটনে ক্লিক করুন। আপনি তাৎক্ষণিকভাবে দেখতে পাবেন যে এটি মড ১০ চেক পাস করেছে কিনা, সাথে প্রত্যেক ডিজিট কীভাবে প্রক্রিয়া করা হয়েছে তার ধাপে ধাপে ব্যাখ্যা। এটি বিশেষভাবে দরকারী যখন পেমেন্ট ফর্ম ডিবাগ করা হচ্ছে বা ডেটা এন্ট্রি সঠিক কিনা তা যাচাই করা হচ্ছে।
পরীক্ষামূলক ডেটা তৈরি করা: "জেনারেট" মোডে সুইচ করে যেকোনো দৈর্ঘ্যের বৈধ পরীক্ষামূলক সংখ্যা তৈরি করুন। এই সংখ্যাগুলি লুহন যাচাইকরণ পাস করে কিন্তু বাস্তব, সক্রিয় কার্ড নয়—যা ডেভেলপমেন্ট পরিবেশে বাস্তবসম্মত পরীক্ষামূলক কেসের জন্য নিখুঁত, লাইভ পেমেন্ট তথ্য স্পর্শ না করেই।
প্রক্রিয়াটি বুঝে নেওয়া: ভিজ্যুয়ালাইজেশনটি দেখায় যে প্রত্যেক ডিজিটের সাথে সঠিক কী ঘটে: কোনগুলি ডাবল হয়, কখন ৯ বিয়োগ করা হয়, এবং চূড়ান্ত যোগফল কীভাবে বৈধতা নির্ধারণ করে। আমি এই ভিজ্যুয়াল ফিডব্যাকটিকে অত্যন্ত মূল্যবান মনে করি যখন সহকর্মীদের কাছে অ্যালগরিদমটি ব্যাখ্যা করা হয় বা বাস্তবায়ন সমস্যাগুলি ডিবাগ করা হয়।
লুহন অ্যালগরিদম কীভাবে কাজ করে
অ্যালগরিদমটি সংখ্যাগুলিকে ডান থেকে বাম দিকে প্রক্রিয়া করে, একটি সহজ প্যাটার্ন প্রয়োগ করে যা বেশিরভাগ ডেটা এন্ট্রি ভুলকে ধরে ফেলে:
-
ডান থেকে শুরু করুন: প্রতিটি অঙ্ক নিন, বাম দিকে যাচ্ছে। প্রতি দ্বিতীয় অঙ্ককে দ্বিগুণ করা হয় (এগুলি হল সেই অঙ্কগুলি যা ডান থেকে গণনা করলে জোড় অবস্থানে থাকে)।
-
বড় দ্বিগুণকৃত সংখ্যা হ্যান্ডেল করুন: যখন দ্বিগুণ করা হয় এবং সংখ্যাটি 9 এর বেশি হয়, তখন 9 বিয়োগ করুন। এটি গাণিতিকভাবে পৃথক অঙ্কগুলিকে একসাথে যোগ করার সমতুল্য (18 হয়ে যায় 1+8=9)।
-
সবকিছু যোগ করুন: সমস্ত প্রক্রিয়াকৃত অঙ্ককে যোগ করুন—দ্বিগুণকৃত/সমন্বিত এবং অপরিবর্তিত অঙ্কগুলি।
-
বিভাজ্যতা পরীক্ষা করুন: যদি যোগফল 10 দ্বারা সমানভাবে বিভাজ্য হয় (0 দ্বারা শেষ হয়), তাহলে সংখ্যাটি বৈধ। অন্য যেকোনো ফলাফল মানে এটিতে কোনো ত্রুটি আছে।
এই পদ্ধতিটির চতুর্যতা হল কীভাবে এটি সাধারণ ভুলগুলিকে ধরে ফেলে। যদি আপনি দুটি প্রতিবেশী অঙ্ককে বিনিময় করেন বা একটি সংখ্যা ভুল টাইপ করেন, চেকসাম প্রায় সবসময় পরিবর্তিত হয়। অ্যালগরিদমটি সমস্ত সম্ভাব্য ত্রুটি ধরতে পারবে না—যেমন যমজ ত্রুটি যেমন 22 কে 55 তে বদলানো—কিন্তু এটি প্রায় 98% এলোমেলো একক-অঙ্ক ত্রুটি এবং প্রায় 90% প্রতিবেশী পরিবর্তনগুলিকে ধরে ফেলে।
এখানে প্রক্রিয়াটির একটি দৃশ্যমান উপস্থাপনা রয়েছে:
গাণিতিক সূত্র
যারা আনুষ্ঠানিক নোটেশন পছন্দ করেন, তাদের জন্য এখানে গাণিতিক অভিব্যক্তি রয়েছে:
যেন -তম অঙ্ক, সর্বাধিক ডান দিক থেকে গণনা করা (চেক অঙ্ককে বাদ দিয়ে) এবং বাম দিকে যাচ্ছে। তাহলে চেক অঙ্ক এমনভাবে নির্বাচিত যে:
যেখানে হল মডুলো অপারেশন।
বাস্তব-পৃথিবীর প্রয়োগসমূহ
পেমেন্ট প্রক্রিয়াকরণ: প্রতিটি বড় কার্ড নেটওয়ার্ক—ভিসা, মাস্টারকার্ড, আমেরিকান এক্সপ্রেস, ডিসকভার—টাইপো থেকে প্রাথমিক প্রতিরোধ হিসাবে লুহন চেক ব্যবহার করে। যখন আপনি একটি চেকআউট ফর্ম তৈরি করছেন, ক্লায়েন্ট-সাইড লুহন যাচাইকরণ আপনার ব্যবহারকারীদের অস্পষ্টভাবে ভুল সংখ্যা জমা দিতে বাধা দেয় এবং পেমেন্ট গেটওয়ে-এ অনাবশ্যক API কল কমায়।
মোবাইল ডিভাইস ট্র্যাকিং: ফোন এবং ট্যাবলেটের IMEI নম্বরগুলিতে লুহন চেক ডিজিট রয়েছে। এটি সরবরাহ শৃঙ্খল ব্যবস্থাপনা এবং ডিভাইস প্রমাণীকরণ সিস্টেমে গুরুত্বপূর্ণ—আমি ওয়্যারহাউজ সিস্টেমগুলিকে অবৈধ IMEI স্ক্যান তাৎক্ষণিকভাবে প্রত্যাখ্যান করতে দেখেছি, যা শিপিংয়ের ত্রুটিগুলিকে এর আগেই রোধ করে।
স্বাস্থ্যসেবা সনাক্তকারী: মার্কিন যুক্তরাষ্ট্রের জাতীয় প্রদানকারী সনাক্তকারী (NPI) সিস্টেম এই অ্যালগরিদম ব্যবহার করে প্রদানকারী নম্বরগুলি যাচাই করে। প্রতিদিন লক্ষ লক্ষ স্বাস্থ্যসেবা লেনদেনে, প্রদানকারী আইডিতে প্রতিলিপি ত্রুটি ধরা পড়লে বিলিংয়ের বিলম্ব কমায় এবং দাবি প্রত্যাখ্যানগুলি কমায়।
সরকারী সনাক্তকরণ: কানাডিয়ান সামাজিক বীমা নম্বরগুলি লুহন যাচাইকরণ অন্তর্ভুক্ত করে। অ্যালগরিদমটি ডাটাবেজ লুকআপ ছাড়াই দ্রুত যুক্তিসঙ্গত পরীক্ষা প্রদান করে, যা উচ্চ-মাত্রার যাচাইকরণ পরিস্থিতিতে কার্যকর।
পুরাতন বই সিস্টেম: কিছু ISBN-10 বাস্তবায়ন লুহন ভেরিয়েন্ট ব্যবহার করে। যদিও ISBN-13 একটি আলাদা চেক ডিজিট অ্যালগরিদম ব্যবহার করে, পুরাতন লাইব্রেরি এবং ইনভেন্টরি সিস্টেমগুলি এখনও লুহন-ভিত্তিক যাচাইকরণের উপর নির্ভর করে।
ধাপে-ধাপে উদাহরণ
ক্রেডিট কার্ড নম্বর যাচাইকরণ
চলুন 4532015112830366 নম্বরটি যাচাই করি:
- ডান থেকে শুরু: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- প্রতি দ্বিতীয় অঙ্কটিকে দ্বিগুণ করুন (ডান থেকে): 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- 9 এর বেশি সংখ্যা থেকে 9 বিয়োগ করুন: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- যোগফল: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 % 10 = 0 ✓ বৈধ!
অবৈধ IMEI নম্বর ধরা
490154203237518 পরীক্ষা করা (শেষ অঙ্কটি ইচ্ছাকৃতভাবে ভুল):
- দ্বিগুণ এবং প্রক্রিয়াকরণের পর: যোগফল = 57
- 57 % 10 = 7 ✗ অবৈধ!
যোগফল শূন্যে শেষ হয় না, তাই অ্যালগরিদম এটিকে ভুল হিসাবে চিহ্নিত করে। এটিকে বৈধ করার জন্য, শেষ অঙ্কটি 1 হওয়া উচিত, যা যোগফলকে 60-তে নিয়ে আসবে—যা সম্পূর্ণরূপে 10 দ্বারা বিভাজ্য। এটিই ঠিক কীভাবে অ্যালগরিদম ডিভাইস সনাক্তকারীর প্রতিলিপি ত্রুটিগুলিকে ধরে ফেলে।
বিকল্প চেকসাম অ্যালগরিদম
লুন অ্যালগরিদম জনপ্রিয় কারণ এটি বাস্তবায়ন করা সহজ, তবে আরও জটিল বিকল্প রয়েছে যখন আপনার আরও শক্তিশালী ত্রুটি সনাক্তকরণ প্রয়োজন:
ভেরহফ অ্যালগরিদম: সমস্ত একক-সংখ্যার ত্রুটি এবং প্রায় সমস্ত পরিবর্তন ত্রুটি সনাক্ত করে, যার মধ্যে লুন মিস করে এমন টুইন-সংখ্যার ক্ষেত্রগুলিও (যেমন 22↔55) অন্তর্ভুক্ত। ট্রেডঅফ হল বৃদ্ধিত জটিলতা—এটিতে গুণ এবং পারমিউটেশন অপারেশনের সঙ্গে লুকআপ টেবিল প্রয়োজন। ডেটা সঠিকতা গুরুত্বপূর্ণ হলে এবং কম্পিউটেশনাল ওভারহেড চিন্তা করা হয় না এমন ক্ষেত্রে এটি ব্যবহার করুন।
ডাম অ্যালগরিদম: সমস্ত একক-সংখ্যার ত্রুটি এবং সমস্ত সন্নিহিত পরিবর্তন ত্রুটি ব্যতিক্রমভাবে সনাক্ত করে। এটি একটি বিশেষভাবে নির্মিত কোয়াসিগ্রুপ অপারেশনের উপর ভিত্তি করে যা সম্পূর্ণ কভারেজ নিশ্চিত করে। বাস্তবায়নটি একটি একক লুকআপ টেবিল ব্যবহার করে, যা এটিকে ভেরহফ থেকে সহজ কিন্তু এখনও লুন থেকে জটিল করে তোলে।
ISBN-13 চেক ডিজিট: লুন এবং ISBN-10 উভয় থেকে আলাদা একটি ওয়েটেড মডুলো 10 অ্যালগরিদম ব্যবহার করে। ওয়েটগুলি 1 এবং 3 এর মধ্যে পরিবর্তিত হয়, যা বই সনাক্তকারীগুলির জন্য ভাল ত্রুটি সনাক্তকরণ প্রদান করে। এটি পুরানো ISBN-10 সিস্টেমকে প্রতিস্থাপন করেছে (যা লুন ব্যবহার করত) যখন শিল্পকে আরও বেশি সনাক্তকারী স্থান প্রয়োজন ছিল।
ইতিহাস এবং প্রেক্ষাপট
হান্স পিটার লুহন ১৯৫৪ সালে আইবিএম-এ এই অ্যালগরিদম বিকশিত করেছিলেন, স্বয়ংক্রিয় তথ্য প্রক্রিয়ার প্রাথমিক দিনগুলিতে। লুহন ইতিমধ্যে তথ্য পুনর্প্রাপ্তিতে অগ্রণী কাজের জন্য পরিচিত ছিলেন—তাঁর 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উদাহরণ ব্যবহার:
print(luhn_validate(4532015112830366)) # সত্য print(luhn_validate(4532015112830367)) # মিথ্যা print(generate_valid_number(16)) # একটি বৈধ 16-সংখ্যার নম্বর তৈরি করে
1
2javascript function luhnValidate(number) { const digits = number.toString().split('').map(Number); let checksum = 0; for (let i = digits.length - 1; i >= 0; i--) { let d = digits[i]; if ((digits.length - i) % 2 === 0) { d *= 2; if (d > 9) d -= 9; } checksum += d; } return checksum % 10 === 0; }
function generateValidNumber(length) { const digits = Array.from({length: length - 1}, () => Math.floor(Math.random() * 10)); const checksum = digits.reduce((sum, digit, index) => { if ((length - 1 - index) % 2 === 0) { digit *= 2; if (digit > 9) digit -= 9; } return sum + digit; }, 0); const checkDigit = (10 - (checksum % 10)) % 10; return parseInt(digits.join('') + checkDigit); }
// উদাহরণ ব্যবহার: console.log(luhnValidate(4532015112830366)); // সত্য console.log(luhnValidate(4532015112830367)); // মিথ্যা console.log(generateValidNumber(16)); // একটি বৈধ 16-সংখ্যার নম্বর তৈরি করে
1
2java import java.util.Random;
public class LuhnValidator { public static boolean luhnValidate(long number) { String digits = String.valueOf(number); int checksum = 0; boolean isEven = true; for (int i = digits.length() - 1; i >= 0; i--) { int digit = Character.getNumericValue(digits.charAt(i)); if (isEven) { digit *= 2; if (digit > 9) digit -= 9; } checksum += digit; isEven = !isEven; } return checksum % 10 == 0; }
public static long generateValidNumber(int length) {
Random random = new Random();
long[] digits = new long[length - 1];
for (int i = 0; i < length - 1; i++) {
digits[i] = random.nextInt(10);
}
long checksum = 0;
for (int i = digits.length - 1; i >= 0; i--) {
long digit = digits[i];
if ((length - 1 - i) % 2 == 0) {
digit *= 2;
if (digit > 9) digit -= 9;
}
checksum += digit;
}
long checkDigit = (10 - (checksum % 10)) % 10;
long result = 0;
for (long digit : digits) {
result = result * 10 + digit;
}
return result * 10 + checkDigit;
}
public static void main(String[] args) {
System.out.println(luhnValidate(4532015112830366L)); // সত্য
System.out.println(luhnValidate(4532015112830367L)); // মিথ্যা
System.out.println(generateValidNumber(16)); // একটি বৈধ 16-সংখ্যার নম্বর তৈরি করে
}
}
1
2## এজ কেস এবং ইমপ্লিমেন্টেশন গটচাস
3
4প্রোডাকশন সিস্টেমে লুহন ভ্যালিডেশন বাস্তবায়ন করার সময়, এই সাধারণ সমস্যাগুলির প্রতি নজর রাখুন:
5
6**ইনপুট স্যানিটাইজেশন:**
7বাস্তব ইনপুটে প্রায়ই স্পেস, হাইফেন বা অন্যান্য ফরম্যাটিং অক্ষর থাকে (যেমন "4532-0151-1128-3036")। ইনপুট প্রত্যাখ্যান করার পরিবর্তে ভ্যালিডেশনের আগে এগুলি মুছে ফেলুন—ব্যবহারকারীরা প্রায়ই ফরম্যাটকৃত নম্বর কপি করে। তবে, তাৎক্ষণিকভাবে বর্ণানুক্রমিক অক্ষরগুলি প্রত্যাখ্যান করুন কারণ এগুলি সত্যিই অবৈধ ইনপুট নির্দেশ করে।
8
9**লিডিং জিরো গুরুত্বপূর্ণ:**
10"0123456789" নম্বরটি "123456789" থেকে লুহন উদ্দেশ্যে আলাদা। ভ্যালিডেশনের সময় লিডিং জিরো সংরক্ষিত থাকতে হবে। এটি ডেভেলপাররা যারা প্রথমে পূর্ণসংখ্যায় রূপান্তর করে তাদের বিভ্রান্ত করে। পরিবর্তে স্ট্রিং অপারেশন ব্যবহার করুন।
11
12**ভাষা পূর্ণসংখ্যা সীমা:**
13ক্রেডিট কার্ডগুলি সাধারণত ১৯ ডিজিটে সীমাবদ্ধ, যা ৬৪-বিট পূর্ণসংখ্যায় ফিট হয়। কিন্তু যদি আপনি যেকোনো দৈর্ঘ্যের সনাক্তকারী ভ্যালিডেশন করছেন, তাহলে পূর্ণসংখ্যায় রূপান্তর এড়িয়ে চলুন। ওভারফ্লো রোধ করতে স্ট্রিং বা ডিজিটের অ্যারে হিসাবে প্রক্রিয়া করুন।
14
15**খালি বা নাল ইনপুট:**
16আপনার আচরণ স্পষ্টভাবে সংজ্ঞায়িত করুন: ব্যতিক্রম ছুড়ে দিন, মিথ্যা ফেরত দিন, বা সুন্দরভাবে পরিচালনা করুন? আমি দেখেছি যে ভ্যালিডেশন ফাংশনগুলির জন্য মিথ্যা ফেরত দেওয়া সবচেয়ে বেশি অর্থবহ, তবে API এন্ডপয়েন্টগুলি হয়তো একটি বিবরণমূলক বার্তার সাথে ৪০০ ত্রুটি ফেরত দিতে চাইবে।
17
18**পরিসরে কর্মক্ষমতা:**
19ব্যাচ ভ্যালিডেশনের জন্য (যেমন হাজার হাজার কার্ড নম্বর সহ আপলোডকৃত CSV ফাইল প্রক্রিয়াকরণ), মৌলিক অ্যালগরিদমটি ইতিমধ্যে খুবই দ্রুত—O(n) যেখানে n হল ডিজিটের সংখ্যা। বাধাস্থান সাধারণত I/O, গণনা নয়। ভ্যালিডেশন যুক্তিটির চেয়ে ফাইল পার্সিং এবং ত্রুটি রিপোর্টিংয়ে অনুকূলন করার দিকে মনোযোগ দিন।
20
21## দ্রুত রেফারেন্স: টেস্ট নম্বরগুলি
22
23এই নম্বরগুলি আপনার বাস্তবায়ন পরীক্ষা করার জন্য ব্যবহার করুন:
24
25**বৈধ নম্বরগুলি:**
26- `4532015112830366` — ভিসা ফরম্যাট (১৬ ডিজিট)
27- `046454286` — কানাডিয়ান SIN ফরম্যাট (৯ ডিজিট)
28- `79927398713` — সাধারণ বৈধ নম্বর
29
30**অবৈধ নম্বরগুলি:**
31- `4532015112830367` — এক ডিজিট ভুল
32- `490154203237518` — ভুল চেক ডিজিট
33- `79927398714` — শেষ ডিজিট ভুল
34
35এই টেস্ট কেসগুলি সাধারণ পরিস্থিতিগুলি কভার করে: মানসম্মত বৈধ নম্বর, একক-ডিজিট ত্রুটি, এবং ভুল চেক ডিজিট।
36
37## স্বয়ংক্রিয় পরীক্ষা সুইট
38
39এখানে আপনার বাস্তবায়নটি যাচাই করার জন্য একটি সম্পূর্ণ পরীক্ষা সুইট রয়েছে:
40
41python def test_luhn_algorithm(): # মৌলিক বৈধতা পরীক্ষা assert luhn_validate(4532015112830366) == True assert luhn_validate(4532015112830367) == False assert luhn_validate(79927398713) == True assert luhn_validate(79927398714) == False
# তৈরি করা সংখ্যাগুলি বৈধতা পাস করে কিনা তা পরীক্ষা
for _ in range(10):
generated = generate_valid_number(16)
assert luhn_validate(generated) == True, f"তৈরি করা {generated} বৈধতা পাস করতে ব্যর্থ"
# সীমান্ত ক্ষেত্র: একক সংখ্যা
assert luhn_validate(0) == True # 0 mod 10 = 0
# সীমান্ত ক্ষেত্র: শূন্যের সঙ্গে শুরু হওয়া সংখ্যা সংরক্ষিত
assert luhn_validate("0000000000000000") != luhn_validate(0)
print("সমস্ত পরীক্ষা পাস হয়েছে!")
test_luhn_algorithm()
## প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
### লুহন অ্যালগরিদম কী ব্যবহৃত হয়?
লুহন অ্যালগরিদম পরিচয় সংখ্যা যাচাই করে যার মধ্যে রয়েছে ক্রেডিট কার্ড (ভিসা, মাস্টারকার্ড, অ্যামেক্স), মোবাইল ডিভাইসের IMEI নম্বর, কানাডিয়ান সোশ্যাল ইনসুরেন্স নম্বর এবং মার্কিন স্বাস্থ্য NPI নম্বর। এটি সাধারণ ডেটা এন্ট্রি ত্রুটি—যেমন ভুল টাইপ করা অঙ্ক বা accidentally বিনিময়ে দেওয়া সংখ্যা—প্রক্রিয়াকরণ ত্রুটি বা ব্যর্থ লেনদেনের আগে সনাক্ত করে।
### লুহন অ্যালগরিদম ত্রুটি সনাক্তকরণে কতটা নির্ভুল?
লুহন প্রায় 98% একক-অঙ্ক ত্রুটি এবং প্রায় 90% সন্নিহিত পরিবর্তন ত্রুটি (যেমন "12" এর পরিবর্তে "21" টাইপ করা) ধরে ফেলে। যাইহোক, এটি যমজ ত্রুটি মিস করে যেখানে উভয় অঙ্ক একই (22→55) এবং লাফিয়ে যাওয়া পরিবর্তন (101→404)। মিনুয়াল ডেটা এন্ট্রি সম্পর্কিত বেশিরভাগ ব্যবহারিক অ্যাপ্লিকেশনের জন্য, এই সনাক্তকরণ হার যথেষ্ট।
### আমি কি লুহন অ্যালগরিদম দ্বারা ক্রেডিট কার্ড অফলাইনে যাচাই করতে পারি?
হ্যাঁ, লুহন যাচাইকরণ সম্পূর্ণ অফলাইন কাজ করে—এটি শুধুমাত্র গাণিতিক, যার জন্য কোনো ডেটাবেজ লুকআপ বা API কল প্রয়োজন হয় না। এটি ওয়েব ফর্মে ক্লায়েন্ট-সাইড যাচাইকরণের জন্য পারফেক্ট, সার্ভার লোড কমায় এবং ব্যবহারকারীদের তাৎক্ষণিক প্রতিক্রিয়া প্রদান করে। কিন্তু মনে রাখবেন: একটি বৈধ লুহন নম্বর মানে এটি সক্রিয় বা পাওনা ক্রেডিট আছে এমন নয়।
### ক্রেডিট কার্ড প্রক্রিয়াকরণের জন্য লুহন অ্যালগরিদম কি নিরাপদ?
না—লুহন হল ত্রুটি সনাক্তকরণ, নিরাপত্তা নয়। এটি শুধুমাত্র গাণিতিক বিন্যাস যাচাই করে। একটি লুহন পরীক্ষা পাস করা মানে এটি বাস্তব, সক্রিয়, অর্থ সরবরাহ করা, বা ব্যবহারকারীর অধিকার আছে এমন নয়। আধুনিক পেমেন্ট নিরাপত্তার জন্য একাধিক স্তর প্রয়োজন: CVV/CVC যাচাইকরণ, ঠিকানা যাচাইকরণ (AVS), 3D সুরক্ষিত প্রমাণীকরণ, এবং টোকেনাইজেশন। লুহন শুধুমাত্র প্রথম যুক্তিসঙ্গত পরীক্ষা।
### কোন প্রোগ্রামিং ভাষাগুলি লুহন বাস্তবায়ন সমর্থন করে?
প্রতিটি সাধারণ উদ্দেশ্যের ভাষা লুহন বাস্তবায়ন করতে পারে—এটি একটি সহজ অ্যালগরিদম যার জন্য শুধুমাত্র মৌলিক পাটা এবং লুপ প্রয়োজন। পাইথন, জাভাস্ক্রিপ্ট, জাভা, C++, C#, PHP, রুবি, Go, Rust, এবং Swift সবই সহজে 10-20 লাইন কোডে এটি সামলাতে পারে। কিছু ভাষায় তৃতীয় পক্ষের লাইব্রেরি রয়েছে, কিন্তু অ্যালগরিদমটি এতই সরল যে বেশিরভাগ ডেভেলপার সরাসরি এটি বাস্তবায়ন করে।
### এটি কেন "মড 10 অ্যালগরিদম" বলা হয়?
চূড়ান্ত ধাপটি পরীক্ষা করে যে অঙ্ক যোগফল 10 দ্বারা বিভাজ্য কিনা মডুলো অপারেশন ব্যবহার করে (যোগফল % 10 == 0)। "মড 10" এই মডুলাস 10 পরীক্ষার উল্লেখ করে। যদি 10 দ্বারা ভাগ করার পর অবশিষ্টাংশ শূন্য হয়, তাহলে সংখ্যাটি পাস করে—অন্যথায় এটি ব্যর্থ হয়। এই গাণিতিক বৈশিষ্ট্যই অ্যালগরিদমটিকে কাজ করতে সাহায্য করে।
### আমি কি লুহন ব্যবহার করে পরীক্ষামূলক ক্রেডিট কার্ড নম্বর তৈরি করতে পারি?
হ্যাঁ—আপনি পেমেন্ট ফর্ম পরীক্ষার সময় লুহন যাচাইকরণ পাস করে এমন নম্বর তৈরি করতে পারেন। এগুলি বাস্তব, সক্রিয় কার্ড নয়; শুধুমাত্র গাণিতিক বিন্যাস সন্তুষ্ট করে। এটি আইনসঙ্গত এবং পরীক্ষার জন্য প্রয়োজনীয়, কিন্তু তৈরি করা নম্বরগুলি প্রকৃত ক্রয়ের জন্য ব্যবহার করা প্রতারণা। বেশিরভাগ পেমেন্ট গেটওয়ে স্টেজিং পরিবেশের জন্য আনুষ্ঠানিক পরীক্ষা কার্ড নম্বর সরবরাহ করে।
### লুহন অ্যালগরিদমের সীমাবদ্ধতা কী?
লুহন ধরতে পারবে না: যমজ ত্রুটি (22↔55), লাফিয়ে যাওয়া পরিবর্তন (101↔404), ধ্বনিগত ত্রুটি (কিছু ক্ষেত্রে 60↔06), বা একাধিক একই সাথে ত্রুটি। এটি কোনো ক্রিপ্টোগ্রাফিক নিরাপত্তাও প্রদান করে না—বৈধ বিন্যাস মানে বৈধ কার্ড নয়। এই সীমাবদ্ধতা সত্ত্বেও, এর সরলতা এবং 90%+ ত্রুটি সনাক্তকরণ হার অন্য যাচাইকরণ পদ্ধতির সাথে সংযুক্ত হয়ে বাস্তব পেমেন্ট সিস্টেমের জন্য ব্যবহারিক করে তোলে।
## সংখ্যা যাচাই করা শুরু করুন
উপরের ক্যালকুলেটর ব্যবহার করে ক্রেডিট কার্ড নম্বর যাচাই করুন, ডেভেলপমেন্ট পরিবেশের জন্য পরীক্ষামূলক ডেটা তৈরি করুন, অথবা মোড ১০ অ্যালগরিদম কীভাবে প্রতিটি অঙ্কে প্রক্রিয়া করে তা অন্বেষণ করুন। ধাপে ধাপে ভিজ্যুয়ালাইজেশন বাস্তবায়ন সমস্যাগুলি ডিবাগ করতে সাহায্য করে এবং যাচাই ফলাফলগুলি অ-কাঠামোগত স্টেকহোল্ডারদের কাছে ব্যাখ্যা করে।
আপনি যদি একটি পেমেন্ট ফর্ম তৈরি করছেন, IMEI যাচাই সিস্টেম ডিবাগ করছেন, অথবা শুধুমাত্র চেকসাম অ্যালগরিদম সম্পর্কে শিখছেন, এই টুলটি আপনার প্রয়োজনীয় তাৎক্ষণিক প্রতিক্রিয়া এবং কাঠামোগত স্বচ্ছতা প্রদান করে।
## রেফারেন্স এবং আরও পড়ার জন্য তথ্য
1. [লুহন, এইচ. পি. (১৯৬০)। "নম্বর যাচাই করার জন্য কম্পিউটার"। মার্কিন পেটেন্ট ২,৯৫০,০৪৮](https://patents.google.com/patent/US2950048) - অ্যালগরিদমটি বর্ণনা করা মৌলিক পেটেন্ট।
2. [ISO/IEC ৭৮১২-১:২০১৭ - পরিচয়পত্র](https://www.iso.org/standard/70484.html) - পরিচয়পত্রের নম্বরকরণ সিস্টেমের জন্য আন্তর্জাতিক মান, যা পেমেন্ট কার্ডের জন্য লুহন ব্যবহার নির্দিষ্ট করে।
3. [গ্যালিয়ান, জোসেফ (১৯৯১)। "পরিচয়পত্রের নম্বরের গণিত"](https://www.jstor.org/stable/2686878) - কলেজ গণিত জার্নালে প্রকাশিত, লুহন সহ বিভিন্ন চেক ডিজিট অ্যালগরিদমের একাডেমিক বিশ্লেষণ।
4. [পেমেন্ট কার্ড ইন্ডাস্ট্রি ডেটা সিকিউরিটি স্ট্যান্ডার্ড (PCI DSS)](https://www.pcisecuritystandards.org/) - নিরাপত্তা মান যা নির্ধারণ করে কীভাবে পেমেন্ট কার্ড তথ্য পরিচালনা করা হবে, যা নিরাপত্তা স্তরে লুহনের প্রেক্ষাপট প্রদান করে।