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

পাইথনে IP ঠিকানা ভ্যালিডেট করা


মনে করুন আমাদের একটি স্ট্রিং আছে; আমাদের চেক করতে হবে দেওয়া ইনপুটটি বৈধ IPv4 ঠিকানা, IPv6 ঠিকানা, বা সেগুলোর কোনোটিই নয়।

IPv4 ঠিকানা ক্যাননিক্যালি ডটেড-ডেসিম্যাল নোটেশনে রিপ্রেজেন্ট করা হয়, যেটি চারটি দশমিক সংখ্যা দিয়ে গঠিত, প্রতিটি ০ থেকে ২৫৫ পর্যন্ত, এবং ডট (.) দিয়ে পৃথক। উদাহরণ: 192.168.254.1। 덧붙여, IPv4 ঠিকানাতে লিডিং জিরো অবৈধ। উদাহরণ: 192.168.254.01 অবৈধ।

IPv6 ঠিকানা আট গ্রুপে চার হেক্সাডেসিম্যাল ডিজিট দিয়ে রিপ্রেজেন্ট করা হয়, প্রতিটি গ্রুপ ১৬ বিট রিপ্রেজেন্ট করে। গ্রুপগুলো কলন (:) দিয়ে পৃথক। উদাহরণ: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 একটি বৈধ ঠিকানা। আমরা চার হেক্সাডেসিম্যাল ডিজিটের মধ্যে লিডিং জিরো কিছু বাদ দিতে পারি এবং কিছু লোয়ারকেস ক্যারেক্টার আপারকেসে কনভার্ট করতে পারি, তাই 2001:db8:85a3:0:0:8A2E:0370:7334 এই ঠিকানাও বৈধ।

তবে, আমরা সিম্পলিসিটির জন্য শূন্য মানয়ুক্ত последователь গ্রুপকে ডাবল কলন (::) দিয়ে একটি খালি গ্রুপে রিপ্লেস করব না। তাই 2001:0db8:85a3::8A2E:0370:7334 একটি অবৈধ IPv6 ঠিকানা। অতিরিক্তভাবে, IPv6-এ এক্স্ট্রা লিডিং জিরোও অবৈধ। ঠিকানা 02001:0db8:85a3:0000:0000:8a2e:0370:7334 অবৈধ।

এটি সমাধান করতে আমরা নিচের ধাপগুলো ফলো করব:

  • checkv4(x) মেথড ডিফাইন করুন, এটি চেক করবে x ০ থেকে ২৫৫ রেঞ্জে আছে কিনা, হলে true, নাহলে false।

  • checkv6(x) মেথড ডিফাইন করুন, এটি নিচের মতো কাজ করবে:

    • যদি x-এর সাইজ ৪ এর বেশি হয়, তবে false রিটার্ন করুন।

    • যদি x-এর ডেসিম্যাল সমতুল্য >= ০ হয় এবং x[0] '-' নয়, তবে true, অন্যথায় false।

  • মেইন মেথড থেকে:

  • যদি ইনপুটে তিনটি ডট থাকে, এবং প্রতিটি অংশের জন্য checkv4(i) true হয়, তবে "IPv4" রিটার্ন করুন।

  • যদি ইনপুটে সাতটি কলন থাকে, এবং প্রতিটি অংশের জন্য checkv6(i) true হয়, তবে "IPv6" রিটার্ন করুন।

উদাহরণ (Python)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে।

class Solution(object):
    def validIPAddress(self, IP):
        \"\"\"
        :type IP: str
        :rtype: str
        \"\"\"
        def isIPv4(s):
            try:
                return str(int(s)) == s and 0 <= int(s) <= 255
            except:
                return False

        def isIPv6(s):
            if len(s) > 4:
                return False
            try:
                return int(s, 16) >= 0 and s[0] != '-'
            except:
                return False

        if IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")):
            return "IPv4"
        if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")):
            return "IPv6"
        return "Neither"

ob = Solution()
print(ob.validIPAddress("172.16.254.1"))

ইনপুট

"172.16.254.1"

আউটপুট

"IPv4"

  1. পাইথনে return স্টেটমেন্ট (The return Statement)

  2. পাইথনে ফাংশন ডিফাইন করা (Defining a Function)

  3. পাইথনে আইপি অ্যাড্রেস ডিফ্যাং (Defanging an IP Address in Python)

  4. পাইথনে একাধিক মান রিটার্ন করা (Returning Multiple Values in Python)