Programing/PHP

php 비밀번호 유효성 검사

Dongkkase 2025. 4. 22. 09:26
반응형

연관글

보안이 중요한 웹 애플리케이션에서는 사용자의 비밀번호가 일정 수준의 복잡성을 만족해야 합니다. 이 글에서는 PHP로 작성된 passwordCheck 함수를 통해 비밀번호의 길이, 문자 구성, 공백 여부 등을 검사하는 방법을 소개합니다.


✨ 함수 설명

function passwordCheck($password)
{
    $lengthValid = strlen($password) >= 10 && strlen($password) <= 30;
    $hasNumber = preg_match('/[0-9]/', $password);
    $hasLetter = preg_match('/[a-zA-Z]/', $password);
    $hasSpecial = preg_match('/[!@#$%^&*()\-_=+\\|[\]{};:\'",.<>\/?`~]/', $password);
    $hasWhitespace = preg_match('/\s/', $password);

    if (!$lengthValid) {
        return [
            "state" => false,
            "msg" => "비밀번호는 영문, 숫자, 특수문자를 혼합하여 최소 10자리 ~ 최대 30자리 이내로 입력해주세요.",
        ];
    }

    if ($hasWhitespace) {
        return [
            "state" => false,
            "msg" => "비밀번호는 공백 없이 입력해주세요.",
        ];
    }

    if (!$hasNumber || !$hasLetter || !$hasSpecial) {
        return [
            "state" => false,
            "msg" => "영문, 숫자, 특수문자를 혼합하여 입력해주세요.",
        ];
    }

    return [
        "state" => true,
        "msg" => "",
    ];
}

✨ 검사 기준 요약

  • 길이: 최소 10자 이상, 최대 30자 이하
  • 문자 구성:
    • 숫자 (0-9) 포함
    • 영문 대소문자 포함
    • 특수문자 포함 (!@#$%... 등)
  • 금지 조건: 공백(스페이스, 탭 등) 포함 시 실패

✨ 사용 예시

passwordCheck('abc123456!');
// 결과: ["state" => true, "msg" => ""]

passwordCheck('abcde');
// 결과: ["state" => false, "msg" => "비밀번호는 영문, 숫자, 특수문자를 혼합하여 최소 10자리 ~ 최대 30자리 이내로 입력해주세요."]

passwordCheck('abcdefghij');
// 결과: ["state" => false, "msg" => "영문, 숫자, 특수문자를 혼합하여 입력해주세요."]

passwordCheck('abc 123456!');
// 결과: ["state" => false, "msg" => "비밀번호는 공백 없이 입력해주세요."]

✨ 활용 팁

  • 회원가입 및 비밀번호 변경 화면에서 즉시 피드백을 제공하여 사용자 편의성 향상 가능
  • 동일한 규칙을 프론트엔드와 백엔드 모두 적용하면 검증의 일관성 유지 가능
  • 서비스 성격에 따라 특수문자의 허용 범위를 조정하거나 제한할 수 있음

✨ 결론

passwordCheck 함수는 PHP 환경에서 사용자 비밀번호의 복잡도와 안전성을 효율적으로 검증할 수 있는 실용적인 도구입니다. 간단한 로직을 통해 강력한 보안 요건을 충족할 수 있으며, 다양한 환경에 맞게 유연하게 확장할 수 있습니다.

반응형