728x90
반응형
#자바 비밀번호 정규식 패턴(Pattern) 메소드
#예시
private String checkPassword(String pwd, String id){
// 비밀번호 포맷 확인(영문, 특수문자, 숫자 포함 8자 이상)
Pattern passPattern1 = Pattern.compile("^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W).{8,20}$");
Matcher passMatcher1 = passPattern1.matcher(pwd);
if(!passMatcher1.find()){
return "비밀번호는 영문과 특수문자 숫자를 포함하며 8자 이상이어야 합니다.";
}
// 반복된 문자 확인
Pattern passPattern2 = Pattern.compile("(\\w)\\1\\1\\1");
Matcher passMatcher2 = passPattern2.matcher(pwd);
if(passMatcher2.find()){
return "비밀번호에 동일한 문자를 과도하게 연속해서 사용할 수 없습니다.";
}
// 아이디 포함 확인
if(pwd.contains(id)){
return "비밀번호에 ID를 포함할 수 없습니다.";
}
// 특수문자 확인
Pattern passPattern3 = Pattern.compile("\\W");
Pattern passPattern4 = Pattern.compile("[!@#$%^*+=-]");
for(int i = 0; i < pwd.length(); i++){
String s = String.valueOf(pwd.charAt(i));
Matcher passMatcher3 = passPattern3.matcher(s);
if(passMatcher3.find()){
Matcher passMatcher4 = passPattern4.matcher(s);
if(!passMatcher4.find()){
return "비밀번호에 특수문자는 !@#$^*+=-만 사용 가능합니다.";
}
}
}
//연속된 문자 확인
int ascSeqCharCnt = 0; // 오름차순 연속 문자 카운트
int descSeqCharCnt = 0; // 내림차순 연속 문자 카운트
char char_0;
char char_1;
char char_2;
int diff_0_1;
int diff_1_2;
for(int i = 0; i < pwd.length()-2; i++){
char_0 = pwd.charAt(i);
char_1 = pwd.charAt(i+1);
char_2 = pwd.charAt(i+2);
diff_0_1 = char_0 - char_1;
diff_1_2 = char_1 - char_2;
if(diff_0_1 == 1 && diff_1_2 == 1){
ascSeqCharCnt += 1;
}
if(diff_0_1 == -1 && diff_1_2 == -1){
descSeqCharCnt -= 1;
}
}
if(ascSeqCharCnt > 1 || descSeqCharCnt > 1){
return "비밀번호에 연속된 문자열을 사용할 수 없습니다.";
}
return "";
}
728x90
반응형
'IT > Java' 카테고리의 다른 글
[Java] - 자바 String 문자열 대문자(toUpperCase), 소문자(toLowerCase) 변환 방법 (0) | 2021.09.28 |
---|---|
[Java] - 자바 String 문자열 null 체크 및 치환하는 방법 (0) | 2021.09.28 |
[Java] - 자바 날짜 비교 메서드 [before(), after(), equals()] 사용법 (0) | 2021.09.14 |
[Java] - 자바 BigDecimal 사용법 (0) | 2021.06.09 |
[Java] - 자바 String 문자열 null 체크 하는 방법 (0) | 2021.02.03 |
댓글