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에도 적용 가능 할 듯!
다들 괜히 저처럼 정규식 붙잡다 머리 터지지맙시다 🙄
'C#' 카테고리의 다른 글
C# :: ASP프레임 워크에서 클릭된 버튼 ID 가져오기 (How to get the ID of the clicked button) (0) | 2023.10.13 |
---|---|
C# :: 엑셀 데이터와 데이터 베이스 데이터 비교하여 결과 엑셀 다운로드 하기 (0편) (0) | 2023.10.12 |
C# :: String.Equals 메소드 사용하기 (0) | 2023.10.11 |
C# :: 엑셀 데이터 불러오기 , 가져오기 (Read data from excel file) (0) | 2022.07.13 |
ExecuteScalar() / ExecuteReader() / ExecuteNonQuery() 의 차이점 : asp.net (0) | 2020.07.05 |
reply