Luhn

Luhn

মধ্যম

ভূমিকা

Global Verification Authority-তে আপনাকে এইমাত্র একটি গুরুত্বপূর্ণ দায়িত্ব দেওয়া হয়েছে। শহরজুড়ে, অনলাইন কেনাকাটা থেকে নিরাপদ লগইন পর্যন্ত, অগণিত কাজ নির্ভর করে সংখ্যাভিত্তিক আইডেন্টিফায়ারের নির্ভুলতার উপর, যেমন ক্রেডিট কার্ড নম্বর, ব্যাংক অ্যাকাউন্ট নম্বর, ট্রানজেকশন কোড আর ট্র্যাকিং আইডি। লুহন অ্যালগরিদম একটি সরল চেকসাম সূত্র, যা ভুল টাইপ করা নম্বর শনাক্ত করতে সাহায্য করে।

আপনার ডেস্কে এইমাত্র আইডেন্টিফায়ারের একটি ব্যাচ এসে পৌঁছেছে। এগুলোর সবকটিকেই লুহন টেস্ট পাস করতে হবে, যাতে নিশ্চিত হওয়া যায় সেগুলো বৈধ। কোনোটি ফেল করলে সেটিকে অবৈধ হিসেবে চিহ্নিত করা হবে, আর এভাবে ভুল ট্রানজেকশন বা ব্যর্থ অ্যাকাউন্ট ভেরিফিকেশনের মতো ভুল এড়ানো যাবে।

আপনি কি নিশ্চিত করতে পারবেন যে এটি সঠিকভাবে করা হচ্ছে? অনেক সেবার অখণ্ডতা নির্ভর করে আপনার উপর।

নির্দেশনা

একটি সংখ্যা লুহ্ন সূত্র অনুযায়ী বৈধ কি না তা নির্ণয় করুন।

সংখ্যাটি একটি স্ট্রিং হিসেবে দেওয়া হবে।

একটি সংখ্যা যাচাই করা

১ বা তার কম দৈর্ঘ্যের স্ট্রিং বৈধ নয়। ইনপুটে স্পেস থাকতে পারে, তবে যাচাই করার আগে সেগুলো সরিয়ে ফেলতে হবে। এছাড়া অন্য সব অঙ্ক-বহির্ভূত ক্যারেক্টার অনুমোদিত নয়।

উদাহরণ

বৈধ ক্রেডিট কার্ড নম্বর

যে সংখ্যাটি যাচাই করতে হবে সেটি হলো 4539 3195 0343 6467।

লুহ্ন অ্যালগরিদমের প্রথম ধাপ হলো, সংখ্যাটির শেষ প্রান্ত থেকে শুরু করে ডান দিক থেকে দ্বিতীয় অঙ্ক থেকে বাম দিকে এগোতে এগোতে প্রতি দ্বিতীয় অঙ্ককে দ্বিগুণ করা।

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

কোনো অঙ্ক দ্বিগুণ করার ফলাফল যদি ৯-এর চেয়ে বড় হয়, তাহলে সেই ফলাফল থেকে ৯ বিয়োগ করতে হবে। এতে আমরা পাই:

8569 6195 0383 3437

সবশেষে, আমরা সব অঙ্ক যোগ করি। যোগফল যদি ১০ দিয়ে নিঃশেষে বিভাজ্য হয়, তাহলে মূল সংখ্যাটি বৈধ।

8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80

৮০, ১০ দিয়ে নিঃশেষে বিভাজ্য, তাই 4539 3195 0343 6467 সংখ্যাটি বৈধ!

অবৈধ কানাডিয়ান SIN

যে সংখ্যাটি যাচাই করতে হবে সেটি হলো 066 123 468।

আমরা সংখ্যাটির শেষ থেকে শুরু করি এবং ডান দিক থেকে দ্বিতীয় অঙ্ক থেকে শুরু করে বাম দিকে এগোতে এগোতে প্রতি দ্বিতীয় অঙ্ককে দ্বিগুণ করি।

066 123 478
 ↑  ↑ ↑  ↑  (double these)

কোনো অঙ্ক দ্বিগুণ করার ফলাফল যদি ৯-এর চেয়ে বড় হয়, তাহলে সেই ফলাফল থেকে ৯ বিয়োগ করতে হবে। এতে আমরা পাই:

036 226 458

আমরা অঙ্কগুলো যোগ করি:

0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36

৩৬, ১০ দিয়ে নিঃশেষে বিভাজ্য নয়, তাই 066 123 478 সংখ্যাটি বৈধ নয়!

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
YAMLScript Exercism

Luhn শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, YAMLScript ট্র্যাকের 60টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।

ডিপ ডাইভ: Luhn!

আমরা Luhn-এর ৮টি ভিন্ন সংস্করণ ঘেঁটে দেখি; শুরু করি অত্যন্ত পরিপাটি একটি Ruby ইমপ্লিমেন্টেশন দিয়ে, তারপর কিছু ইম্পারেটিভ ও ফাংশনাল পদ্ধতি ঘেঁটি অবশেষে পৌঁছাই একটি SQLite সংস্করণে, যার পাঠোদ্ধার করতে Erik আর Jeremy-কে বেশ পরিশ্রম করতে হয়েছিল!