กำหนดอินพุตสตริงที่มีตัวอักษรรหัสผ่าน งานคือตรวจสอบความแข็งแกร่งของรหัสผ่าน
ความแข็งแกร่งของรหัสผ่านคือการบอกว่ารหัสผ่านนั้นง่ายต่อการเดาหรือแฮกหรือไม่ ความแข็งแกร่งควรแตกต่างกันระหว่าง weak (อ่อน), average (ปานกลาง) และ strong (แข็งแกร่ง) เพื่อตรวจสอบความแข็งแกร่งเราต้องตรวจสอบจุดต่อไปนี้ −
- รหัสผ่านต้องมีความยาวอย่างน้อย 8 ตัวอักษร
- ต้องมีตัวอักษรพิมพ์เล็กอย่างน้อย 1 ตัว
- ต้องมีตัวอักษรพิมพ์ใหญ่อย่างน้อย 1 ตัว
- ต้องมีตัวเลขอย่างน้อย 1 ตัว
- ต้องมีตัวอักษรพิเศษอย่างน้อย 1 ตัว เช่น : !@#$%^&*()><,.+=-
เช่นมีรหัสผ่าน "tutorialspoint" ซึ่งเดาง่าย จึงกล่าวได้ว่ารหัสผ่านนี้ "weak" เพราะมีแต่ตัวพิมพ์เล็ก ในขณะที่รหัสผ่าน "Tutorialspoint@863!" เป็น strong เพราะมีทั้งพิมพ์ใหญ่-เล็ก ตัวเลข และตัวอักษรพิเศษ และยาวกว่า 8 ตัวอักษร จึงตรงเงื่อนไขทั้งหมดที่ทำให้รหัสผ่านแข็งแกร่ง
หากมีรหัสผ่านที่ตรงกับคุณสมบัติของรหัสผ่านแข็งแกร่งมากกว่าครึ่งหนึ่ง จะถือว่าเป็น moderate (ปานกลาง) เช่นรหัสผ่าน "tutorialspoint12" จะถือว่า moderate เพราะมีตัวพิมพ์เล็ก ตัวเลข และความยาวมากกว่า 8 ตัวอักษร
ตัวอย่าง
Input: tutoriAlspOint!@12 Output: Strength of password:-Strong Explanation: รหัสผ่านมี 1 ตัวพิมพ์เล็ก, 1 ตัวพิมพ์ใหญ่, 1 ตัวอักษรพิเศษ, ยาวกว่า 8 ตัวอักษร และมีตัวเลข จึงเป็น strong Input: tutorialspoint Output: Strength of password:-Weak
วิธีการที่เราจะใช้แก้ปัญหา −
- รับสตริงอินพุตสำหรับรหัสผ่าน
- ตรวจสอบรหัสผ่านสำหรับทุกปัจจัยที่รับผิดชอบในการตัดสินความแข็งแกร่ง
- ตามปัจจัยพิมพ์ความแข็งแกร่งของรหัสผ่าน
อัลกอริทึม
Start
Step 1 → ในฟังก์ชัน void printStrongNess(string& input)
ประกาศและกำหนด n = input.length()
ประกาศ bool hasLower = false, hasUpper = false
ประกาศ bool hasDigit = false, specialChar = false
ประกาศ string normalChars = "abcdefghijklmnopqrstu" "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
ลูป For 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
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 → ในฟังก์ชัน int 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