웹사이트에서 회원가입을 하다 보면 비밀번호 생성 시 다음과 같은 유효성 검사 조건을 요구하는 경우를 자주 볼 수 있습니다.
- 최소 8자 이상, 최대 14자 이하
- 소문자 최소 1개 포함
- 공백 문자 사용 불가
- 대문자 최소 1개 포함
- 특수문자 최소 1개 포함
이번 글에서는 C#을 활용해 위 조건들을 하나씩 확인하는 방법을 살펴보겠습니다.
1. 길이 조건: 최소 8자, 최대 14자
비밀번호의 길이가 8자 미만이거나 14자를 초과하면 유효하지 않은 것으로 판단합니다.
if (passwd.Length < 8 || passwd.Length > 14)
return false;
2. 소문자 최소 1개 포함 여부
LINQ의 Any() 메서드와 char.IsLower를 사용하여 소문자가 하나라도 있는지 확인합니다.
if (!passwd.Any(char.IsLower))
return false;
3. 공백 문자 제외
비밀번호에 공백이 포함되어 있으면 유효하지 않습니다.
if (passwd.Contains(" "))
return false;4. 대문자 최소 1개 포함 여부
마찬가지로 Any()와 char.IsUpper를 활용해 대문자 존재 여부를 검사합니다.
if (!passwd.Any(char.IsUpper))
return false;
5. 특수문자 최소 1개 포함 여부
허용된 특수문자 목록을 배열로 만든 뒤, 비밀번호에 해당 문자가 하나라도 포함되어 있는지 반복문으로 확인합니다.
string specialCh = @"%!@#$%^&*()?/>.<,:;'\|}]{[_~`+=-" + "\"";
char[] specialChArray = specialCh.ToCharArray();
foreach (char ch in specialChArray) {
if (passwd.Contains(ch))
return true;
}전체 코드 예시
위 조건들을 하나의 메서드로 통합하면 다음과 같이 작성할 수 있습니다.
public static bool IsValidPassword(string passwd) {
if (passwd.Length < 8 || passwd.Length > 14)
return false;
if (!passwd.Any(char.IsLower))
return false;
if (!passwd.Any(char.IsUpper))
return false;
if (passwd.Contains(" "))
return false;
string specialCh = @"%!@#$%^&*()?/>.<,:;'\|}]{[_~`+=-" + "\"";
return specialCh.Any(passwd.Contains);
}이처럼 각 조건을 단계별로 검사하면 강력한 비밀번호 정책을 손쉽게 구현할 수 있습니다. 필요에 따라 숫자 포함 여부 등 추가 조건도 같은 방식으로 확장할 수 있습니다.