JAVA
[JAVA] Java 비밀번호 정규식 / ID 동일문자 / 같은 문자 / 연속 문자 / 연속 숫자 공통 Util 소스
오탄자
2020. 2. 25. 17:50
요즘은 보안문제상 회원가입 시 비밀번호 패턴을 복잡하게 만들게 된다.
비밀번호에 id와 동일문자가 들어가도 안되고 같은 문자 또는 숫자가 연속으로 들어가도 안되고 문자, 숫자, 특수문자를 혼합하여
비밀번호를 만들게된다.
이럴때 비밀번호 패턴을 체크하는 클래스를 만들어서 쉽게 비밀번호를 체크할 수 있게 하려고 한다.
영문/숫자/특수문자 사용
영문, 숫자
영문, 특수문자
특수문자, 숫자
같은문자, 숫자
인지 체크하는 변수를 선언한다.
public static final String p1 = "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[$@$!%*#?&])[A-Za-z[0-9]$@$!%*#?&]{8,20}$";
public static final String p2 = "^[A-Za-z[0-9]]{10,20}$";
public static final String p3 = "^[[0-9]$@$!%*#?&]{10,20}$";
public static final String p4 = "^[[A-Za-z]$@$!%*#?&]{10,20}$";
public static final String p5 = "(\\w)\\1\\1";
Matcher m;
기존 비밀번호와 새 비밀번호가 같으면 리턴한다.
새 비밀번호의 정규식 패턴을 확인한다.
public boolean passwordChk(String newPassword, String oldPassword, String userId) {
boolean check = false;
m = Pattern.compile(p1).matcher(newPassword);
if(m.find()) {
check = true;
}
m = Pattern.compile(p2).matcher(newPassword);
if(m.find()) {
check = true;
}
m = Pattern.compile(p3).matcher(newPassword);
if(m.find()) {
check = true;
}
m = Pattern.compile(p4).matcher(newPassword);
if(m.find()) {
chk = true;
}
if(check) {
if(samePwd(newPassword)) {
return false;
}
if(continuousPwd(newPassword)) {
return false;
}
if(newPassword.equals(oldPassword)) {
return false;
}
if(sameId(newPassword, userId)) {
return false;
}
}
return true;
}
같은 문자 숫자 3자리 체크한다.
public boolean samePwd(String pwd) {
match = Pattern.compile(p5).matcher(pwd);
return match.find() ? true : false;
}
연속 문자 숫자 3자리 체크한다.
public boolean continuousPwd(String pwd) {
int o = 0;
int d = 0;
int p = 0;
int n = 0;
int limit = 3;
for(int i=0; i<pwd.length(); i++) {
char tempVal = pwd.charAt(i);
if(i > 0 && (p = o - tempVal) > -2 && (n = p == d ? n + 1 :0) > limit -3) {
return true;
}
d = p;
o = tempVal;
}
return false;
}
아이디와 동일문자 4자리 체크한다.
public boolean sameId(String pwd, String id) {
for(int i=0; i<pwd.length()-3; i++) {
if(id.contains(pwd.substring(i, i+3))) {
return true;
}
}
return false;
}