2015년 5월 15일 금요일

MFC 비밀번호 정규식 체크 작업

최근에 나온 언어 들은 모두 정규식을 지원하여 비밀번호 체크 할때 정규식을 활용하면 되지만

MFC 같은 경우는 정규식을 지원 하지 않는다.

최근에 나온 c++ RegEx 를 쓰면 되지만 기존에 쓰여진 코드에 적용 하려면 라이브러리까지 업데이트 해야 되는

번거로움이 생겨서 로직을 아래와 같이 구현 하여 썼다.

향후 필요한 분이 간혹 있을거 같아서 공유합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
CString sPasswd;
 sPasswd = "1234abcdccc";

 int nCount = sPasswd.GetLength();
 //길이체크
 if (nCount < 8 && nCount > 13)
 {
  AfxMessageBox("비밀번호 길이는 8~12 자리 입니다.", MB_OK, 0);
  return;
 }

 bool bEngFlag=false, bNumFlag=false, bExtFlag=false;

 char szExt[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'};
 //영문체크
 //숫자체크
 //특수문자체크
 for (int i=0; i<nCount; i++)
 {
  char cChk = sPasswd.GetAt(i);
  if (!bEngFlag)
   bEngFlag = isalpha(cChk);
  if (!bNumFlag)
   bNumFlag = isdigit(cChk);
  if (!bExtFlag)
  {
   for (int j=0; j<sizeof(szExt); j++)
   {
    if (cChk == szExt[j])
    {
     bExtFlag = true;
     break;
    }
   }
  }
 }

 if (!bEngFlag || !bNumFlag || !bExtFlag)
 {
  AfxMessageBox("비밀번호가 유효하지 않습니다.");
  return;
 }
 else
 {
  AfxMessageBox("비밀번호가 유효합니다.");
 }

댓글 없음: