Cho chuỗi đầu vào chứa các ký tự mật khẩu, nhiệm vụ là kiểm tra độ mạnh của mật khẩu.
Độ mạnh của mật khẩu là khi bạn nói rằng mật khẩu có dễ bị đoán hay bẻ khóa không. Độ mạnh nên thay đổi từ yếu, trung bình và mạnh. Để kiểm tra độ mạnh, chúng ta phải kiểm tra các điểm sau:
- Mật khẩu phải dài ít nhất 8 ký tự
- Phải chứa ít nhất 1 chữ cái thường
- Phải chứa ít nhất 1 chữ cái hoa
- Phải chứa ít nhất 1 chữ số
- Phải chứa ít nhất 1 ký tự đặc biệt như: !@#$%^&*()><,.+=-
Ví dụ, mật khẩu "tutorialspoint" dễ bị đoán nên ta nói mật khẩu đó "yếu" vì chỉ chứa chữ thường. Mặt khác, "Tutorialspoint@863!" là mạnh vì có cả chữ hoa, thường, chữ số, ký tự đặc biệt và dài hơn 8 ký tự, đáp ứng tất cả điều kiện.
Nếu mật khẩu đáp ứng hơn một nửa đặc điểm của mật khẩu mạnh, coi là trung bình. Ví dụ "tutorialspoint12" được coi là trung bình vì có chữ thường, chữ số và dài hơn 8 ký tự.
Ví dụ
Đầu vào: tutoriAlspOint!@12 Đầu ra: Độ mạnh mật khẩu: Mạnh Giải thích: Mật khẩu có 1 chữ thường, 1 chữ hoa, 1 ký tự đặc biệt, dài hơn 8 ký tự và có chữ số, do đó mật khẩu mạnh. Đầu vào: tutorialspoint Đầu ra: Độ mạnh mật khẩu: Yếu
Phương pháp giải quyết:
- Nhập chuỗi mật khẩu
- Kiểm tra mật khẩu theo tất cả các yếu tố đánh giá độ mạnh
- In độ mạnh mật khẩu theo các yếu tố
THUẬT TOÁN
BẮT ĐẦU
Bước 1 → Trong hàm void printStrongNess(string& input)
Khai báo và khởi tạo n = input.length()
Khai báo bool hasLower = false, hasUpper = false
Khai báo bool hasDigit = false, specialChar = false
Khai báo string normalChars = "abcdefghijklmnopqrstu" + "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
VỒNG LẶP i = 0 đến n-1
NẾU (islower(input[i])) Gán hasLower = true
NẾU (isupper(input[i])) Gán hasUpper = true
NẾU (isdigit(input[i])) Gán hasDigit = true
Gán size_t special = input.find_first_not_of(normalChars)
NẾU (special != string::npos) Gán specialChar = true
KẾT THÚC VỒNG LẶP
In "Độ mạnh mật khẩu: "
NẾU (hasLower VÀ hasUpper VÀ hasDigit VÀ specialChar VÀ (n >= 8))
In "Mạnh"
NGƯỢC LẠI NẾU ((hasLower HOẶC hasUpper) VÀ specialChar VÀ (n >= 6))
In "Trung bình"
NGƯỢC LẠI
In "Yếu"
Bước 2 → Trong hàm int main()
Khai báo và khởi tạo input = "tutorialspoint!@12"
Gọi printStrongNess(input)
DỪNG
Ví dụ mã nguồn
#include <iostream>
using namespace std;
void printStrongNess(string& input) {
int n = input.length();
// Kiểm tra chữ thường
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;
}
// Độ mạnh mật khẩu
cout << "Độ mạnh mật khẩu: ";
if (hasLower && hasUpper && hasDigit && specialChar && (n >= 8))
cout << "Mạnh" << endl;
else if ((hasLower || hasUpper) && specialChar && (n >= 6))
cout << "Trung bình" << endl;
else
cout << "Yếu" << endl;
}
int main() {
string input = "tutorialspoint!@12";
printStrongNess(input);
return 0;
}
Kết quả đầu ra
Độ mạnh mật khẩu: Trung bình