Kiểm tra độ mạnh của password

Em học trên codelearn. Cho em hỏi

if (password.find(password[i])!= -1)
            kt3 = true;

trong đoạn code này là sao ạ.

bool checkStrongPassword(std::string password)
{
    if (password.length() < 6) 
        return false;
    string p = "!@#$%^&*()-+";
    string s = password;
    bool kt1 = false;
    bool kt2 = false;
    bool kt3 = false;
    bool kt4 = false;
    for (int i=0; i<password.length(); i++)
    {
        if (password[i] >= 65 && password[i] <= 90)
            kt1 = true;
        if (password[i] >= 97 && password[i] <= 122)
            kt2 = true;
        if (password[i] >= 48 && password[i] <= 57)
            kt4 = true;
        if (password.find(password[i])!= -1)
            kt3 = true;
    }
    return kt1 && kt2 && kt3 && kt4;
    
}
1 Like

Điều kiện đó luôn đúng mà :smiley:

5 Likes

còn cái hàm find là gì z ạ, với điều kiện luôn đúng sao nó không gán kt3=true sẵn luôn ạ

str.find('a') sẽ trả về 1 giá trị kiểu size_t là vị trí đầu tiên mà ‘a’ xuất hiện trong str. Không tìm thấy sẽ trả về -1.
Cái điều kiện password.find(password[i])!= -1 là kiểm tra xem phần tử thứ i của password có tồn tại trong password không. Và theo em, tất nhiên điều này luôn đúng như anh @rogp10 đã nói.

4 Likes

Vấn đề là biến p = "!@#$%^&*()-+"; chưa được dùng, đoạn trên phải là đoạn tìm các kí tự của p trong password. Tức là mật khẩu phải chứa ít nhất 1 kí tự của p (kí tự đặc biệt).

// vòng lặp thứ 2
for(int i = 0; i < p.lenght(); ++i){
if (password.find(p[i])!= -1){
        kt3 = true;
        break;
    }
}
5 Likes

Cái này em chạy Bảng mã ASCII từ 32 đến 47 được không ạ?

Điều kiện thế nào thì tùy bạn định nghĩa thôi.
Nhưng theo bài trên thì điều kiện khá gắt khi bắt buộc phải có đủ:

  • Chữ thường.
  • Chữ hóa.
  • Số.
  • Các kí tự đặc biệt được quy định.

Bạn thay đoạn kiểm tra các kí tự đặc biệt sang giống với cách các kiểm tra phía trên cho khoảng 32 - 47 cũng được.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?