View


비밀번호에 숫자, 영어 , 특수문자가 들어가야 하는 것들은
정규식으로 구현이 가능했지만
같은 문자가 3번 들어가는 것을 체크한다던가
연속된 키보드 문자열 체크하기엔 한계가 있어서 따로 코드로 만들었다.

첫 번째 / 같은 문자가 3번 들어가는 것 체크 🔥
여기서는 aaabb처럼 같은 문자가 연속으로 들어가는 것 뿐만 아니라
ababanav 처럼 a같은 문자가 3번 들어가는 것을 찾고 싶었다

 protected bool checkPassword(string strPass)
{
    bool retVal = false;

    char[] tempArr = strPass.ToCharArray();
    System.Array.Sort(tempArr);

    int passCnt = 0;

    for (int i = 0; i < tempArr.Length - 1; i++)
    {

        if (tempArr[i].Equals(tempArr[i + 1]))
        {
            passCnt++;
        }
        else
        {
            passCnt = 0;
        }


        if (passCnt > 1)
        {
            retVal = true;
            break;
        }
    }

    return retVal;
}

먼저 strPass에서 내가 체크하고 싶은 문자열을
파라미터로 전달 후 char 배열로 만들어 정렬을 했다.

그 다음 i번째 문자와 i+1번째 문자가 같으면 passCnt의 값을 +1 해주었다

만약 passCnt가 2가 넘는다면 2개 이상으로 중복되는것 = 같은 문자가 3개이상이다!
false 리턴!

두 번째 / 연속된 키보드 문자열 체크 🔥

protected bool CheckKeyPass(string strPass)
{
    bool retVal = false;

    StringBuilder sbChk = new StringBuilder();

    string[] keyArray = new string[] {
        "QWERTYUIOP{}|",
        "|}{POIUYTREWQ",
        "ASDFGHJKL:\"",
        "\":LKJHGFDSA",
        "ZXCVBNM<>?",
        "?><MNBVCXZ",
        "qwertyuiop[]",
        "][poiuytrewq",
        "asdfghjkl;'",
        "';lkjhgfdsa",
        "zxcvbnm,./",
        "/.,mnbvcxz",
	};

    for (var i = 0; i < strPass.Length - 2; i++)
    {
        sbChk.Append(strPass[i].ToString() + strPass[i + 1].ToString() + strPass[i + 2].ToString());

        for (var j = 0; j < keyArray.Length; j++)
        {
            if (!keyArray[j].IndexOf(sbChk.ToString()).Equals(-1))
            {
                ret = true;
            }
        }

        sbChk.Clear();
    }


    return retVal;
}


일단 키보드의 문자열이 들어있는 배열을 만들어준다.
파라미터로 넘어온 문자들 중 세 글자를 가져와서 keyArray에 있는
키보드 문자열과 IndexOf로 비교해준다.
StringBuilder를 쓴 이유는 알고리즘 풀 때마다
String 계속 선언해주면 효율성이 떨어지는게 기억나서 StringBuilder를 써봤다

이 방식이면 C# 말고도 Java에도 적용 가능 할 듯!
다들 괜히 저처럼 정규식 붙잡다 머리 터지지맙시다 🙄

Share Link
reply
«   2024/10   »
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