Luhn

Luhn

মধ্যম

ভূমিকা

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

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

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

নির্দেশনা

Luhn সূত্র অনুযায়ী কোনো সংখ্যা বৈধ কি না তা নির্ধারণ করুন।

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

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

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

উদাহরণ

বৈধ ক্রেডিট কার্ড সংখ্যা

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

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

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 478।

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

066 123 478
 ↑  ↑ ↑  ↑  (double these)

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

036 226 458

আমরা ডিজিটগুলো যোগ করি:

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

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

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

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

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

ডিপ ডাইভ: Luhn!

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