পাসওয়ার্ড ক্যারেক্টার ধারণকারী একটি স্ট্রিং ইনপুট দেওয়া থাকলে, পাসওয়ার্ডের শক্তি (strength) যাচাই করা এই প্রোগ্রামের কাজ।
পাসওয়ার্ডের শক্তি বলতে বোঝায় পাসওয়ার্ডটি কতটুকু সহজে অনুমান করা বা ভাঙা যায়। শক্তি তিন ধরনের হতে পারে: দুর্বল (weak), মাঝপথ (average/Moderate) এবং শক্তিশালী (strong)। শক্তি যাচাই করার জন্য নিচের শর্তগুলো পূরণ করতে হবে:
- পাসওয়ার্ড কমপক্ষে ৮ ক্যারেক্টার লম্বা হতে হবে।
- কমপক্ষে ১টি ছোট হাতের অক্ষর (lowercase) থাকতে হবে।
- কমপক্ষে ১টি বড় হাতের অক্ষর (uppercase) থাকতে হবে।
- কমপক্ষে ১টি অঙ্ক (digit) থাকতে হবে।
- কমপক্ষে ১টি বিশেষ ক্যারেক্টার থাকতে হবে: !@#$%^&*()><,.+=-
যেমন "tutorialspoint" পাসওয়ার্ডটি সহজে অনুমান করা যায়, তাই এটি "দুর্বল" (weak), কারণ এতে শুধু ছোট হাতের অক্ষর রয়েছে। অন্যদিকে "Tutorialspoint@863!" পাসওয়ার্ডটি "শক্তিশালী" (strong), কারণ এতে বড় ও ছোট হাতের অক্ষর, অঙ্ক, বিশেষ ক্যারেক্টার রয়েছে এবং দৈর্ঘ্য ৮-এর চেয়ে বেশি।
যদি কোনো পাসওয়ার্ড শক্তিশালী পাসওয়ার্ডের বৈশিষ্ট্যের অর্ধেকের বেশি পূরণ করে, তবে সেটি "মাঝপথ" (Moderate) বিবেচিত হবে। যেমন "tutorialspoint12" - এতে ছোট হাতের অক্ষর, অঙ্ক রয়েছে এবং দৈর্ঘ্য ৮-এর চেয়ে বেশি, তাই এটি মাঝপথ।
উদাহরণ
Input: tutoriAlspOint!@12 Output: Strength of password:-Strong Explanation: পাসওয়ার্ডে ১টি ছোট হাতের অক্ষর, ১টি বড় হাতের অক্ষর, ১টি বিশেষ ক্যারেক্টার, ৮-এর চেয়ে বেশি দৈর্ঘ্য এবং ১টি অঙ্ক রয়েছে, তাই পাসওয়ার্ডটি শক্তিশালী। Input: tutorialspoint Output: Strength of password:-Weak
সমস্যা সমাধানের পদ্ধতি:
- পাসওয়ার্ডের জন্য স্ট্রিং ইনপুট নেওয়া
- পাসওয়ার্ডের শক্তি নির্ণয়ের সব ফ্যাক্টর যাচাই করা
- ফ্যাক্টর অনুযায়ী পাসওয়ার্ডের শক্তি প্রিন্ট করা
অ্যালগরিদম
Start Step 1 → void printStrongNess(string& input) ফাংশনে n = input.length() ঘোষণা ও ইনিশিয়ালাইজ hasLower = false, hasUpper = false ঘোষণা hasDigit = false, specialChar = false ঘোষণা normalChars = "abcdefghijklmnopqrstu" "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 " ঘোষণা Loop For i = 0 to n-1 If (islower(input[i])) hasLower = true সেট If (isupper(input[i])) hasUpper = true সেট If (isdigit(input[i])) hasDigit = true সেট special = input.find_first_not_of(normalChars) সেট If (special != string::npos) specialChar = true সেট End Loop "Strength of password:-" প্রিন্ট If (hasLower && hasUpper && hasDigit && specialChar && (n >= 8)) "Strong" প্রিন্ট else if ((hasLower || hasUpper) && specialChar && (n >= 6)) "Moderate" প্রিন্ট else "Weak" প্রিন্ট Step 2 → main() ফাংশনে input = "tutorialspoint!@12" ঘোষণা ও ইনিশিয়ালাইজ printStrongNess(input) কল Stop
উদাহরণ
#include <iostream> using namespace std; void printStrongNess(string& input) { int n = input.length(); // স্ট্রিংতে ছোট হাতের অক্ষর আছে কিনা যাচাই bool hasLower = false, hasUpper = false; bool hasDigit = false, specialChar = false; string normalChars = "abcdefghijklmnopqrstu" "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "; for (int i = 0; i < n; i++) { if (islower(input[i])) hasLower = true; if (isupper(input[i])) hasUpper = true; if (isdigit(input[i])) hasDigit = true; size_t special = input.find_first_not_of(normalChars); if (special != string::npos) specialChar = true; } // পাসওয়ার্ডের শক্তি cout << "Strength of password:-"; if (hasLower && hasUpper && hasDigit && specialChar && (n >= 8)) cout << "Strong" << endl; else if ((hasLower || hasUpper) && specialChar && (n >= 6)) cout << "Moderate" << endl; else cout << "Weak" << endl; } int main() { string input = "tutorialspoint!@12"; printStrongNess(input); return 0; } আউটপুট
Strength of password:-Moderate