কম্পিউটার টিউটোরিয়াল

জাভা প্রোগ্রাম: ক্রেডিট কার্ড নম্বর যাচাই (Luhn Algorithm)

একটি লম্বা নম্বর দেওয়া আছে যেটি ক্রেডিট কার্ডের ডিজিটগুলো ধারণ করে; কাজটি হলো একটি প্রোগ্রাম দিয়ে জানতে যে ক্রেডিট কার্ড নম্বরটি বৈধ (valid) কিনা।

একটি ক্রেডিট কার্ড নম্বরের বৈধতার শর্তগুলো:

  • নম্বরটির ডিজিট সংখ্যা ১৩ থেকে ১৬ এর মধ্যে হতে হবে।
  • শুরুর ডিজিট নির্দিষ্ট: ভিসা কার্ড ৪ দিয়ে শুরু হয়, মাস্টার কার্ড ৫ দিয়ে, আমেরিকান এক্সপ্রেস ৩৭ দিয়ে, ডিসকভার কার্ড ৬ দিয়ে।

যাচাই করার ধাপসমূহ (Luhn Algorithm / Mod 10 Check):

  1. স্টেপ ১: ডান থেকে বামে প্রতিটি ডিজিট ডাবল করুন। ডাবল করার ফলাফল যদি এক ডিজিট হয়, তবে সেটি থাকতে দিন; যদি দুই ডিজিট হয়, তবে দুটি ডিজিট যোগ করে এক ডিজিট বানান (যেমন ২২ = ২+২ = ৪)।
  2. স্টেপ ২: ডান থেকে বামে যেসব ডিজিট অড্ড পজিশনে আছে, সেগুলো যোগ করুন।
  3. স্টেপ ৩: স্টেপ ১-এ প্রাপ্ত এক-ডিজিটের সংখ্যাগুলো যোগ করুন।
  4. স্টেপ ৪: স্টেপ ২ এবং স্টেপ ৩-এর ফলাফল যোগ করুন।
  5. স্টেপ ৫: যদি মোট যোগফল ১০ দিয়ে বিভাজ্য হয়, তবে কার্ড নম্বরটি বৈধ, অন্যথায় অবৈধ।

উদাহরণ ইনপুট/আউটপুট

Input: n = 4440967484181607 Output: 4440967484181607 is valid
Input: n = 379354508162306 Output: 379354508162306 is valid

অ্যালগরিদম ও সম্পূর্ণ কোড

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        long cnumber = 4440967484181607L;
        System.out.println(cnumber + " is " + (validitychk(cnumber) ? "valid" : "invalid"));
    }

    public static boolean validitychk(long cnumber) {
        return (thesize(cnumber) >= 13 && thesize(cnumber) <= 16)
            && (prefixmatch(cnumber, 4) || prefixmatch(cnumber, 5)
                || prefixmatch(cnumber, 37) || prefixmatch(cnumber, 6))
            && ((sumdoubleeven(cnumber) + sumodd(cnumber)) % 10 == 0);
    }

    public static int sumdoubleeven(long cnumber) {
        int sum = 0;
        String num = cnumber + "";
        for (int i = thesize(cnumber) - 2; i >= 0; i -= 2)
            sum += getDigit(Integer.parseInt(num.charAt(i) + "") * 2);
        return sum;
    }

    public static int getDigit(int cnumber) {
        if (cnumber < 9) return cnumber;
        return cnumber / 10 + cnumber % 10;
    }

    public static int sumodd(long cnumber) {
        int sum = 0;
        String num = cnumber + "";
        for (int i = thesize(cnumber) - 1; i >= 0; i -= 2)
            sum += Integer.parseInt(num.charAt(i) + "");
        return sum;
    }

    public static boolean prefixmatch(long cnumber, int d) {
        return getprefx(cnumber, thesize(d)) == d;
    }

    public static int thesize(long d) {
        String num = d + "";
        return num.length();
    }

    public static long getprefx(long cnumber, int k) {
        if (thesize(cnumber) > k) {
            String num = cnumber + "";
            return Long.parseLong(num.substring(0, k));
        }
        return cnumber;
    }
}

আউটপুট

4440967484181607 is valid
  1. কাউন্টিং সোর্টের জন্য জাভা প্রোগ্রাম

  2. ককটেইল সোর্টের জন্য জাভা প্রোগ্রাম

  3. জাভাতে প্রাইম নম্বর চেক করা এবং পরবর্তী প্রাইম খুঁজে বের করা (কাস্টম লজিক)

  4. পাইথন প্রোগ্রাম - ক্রেডিট কার্ড নম্বর বৈধ কিনা তা যাচাই করুন