본문 바로가기
코딩 연습/코딩배우기

[python] 파이썬으로 비밀번호 유효성 검사하는 코딩하기

by good4me 2020. 9. 24.

goodthings4me.tistory.com

 

■ re.findall() 이용

import re

def passwordCheck(pwd):
    
    if len(pwd) < 8 or len(pwd) > 21 and not re.findall('[0-9]+', pwd) and not \
    re.findall('[a-z]', pwd) or not re.findall('[A-Z]', pwd):
        print('비밀번호 기준(숫자, 영문 대소문자 구성)에 맞지 않습니다.')
        return False

    elif not re.findall('[`~!@#$%^&*(),<.>/?]+', pwd):
    #elif re.search('[`~!@#$%^&*(),<.>/?]+', pwd) is None: # 이 방법도 있음                          
        print('비밀번호는 최소 1개 이상의 특수문자가 포함되어야 함')  
        return False

    print('비밀번호의 길이, 숫자, 영문자 등 유효함!!')
    return True
    

pwd = '112345678qQ!'

passwordCheck(pwd)


[실행 결과]
비밀번호의 길이, 숫자, 영문자 등 유효함!!

※ findall()은 정규식과 매칭되는 문자열을 리스트로 반환한다.

※ search()는 문자열 전체를 검색하여 정규식과 매칭되는지 검사한다.

 

good4me.co.kr

 

■ re.search() 이용

import re

def passwordValidation(pwd):

    if len(pwd) < 8:
        print('비밀번호는 최소 8자 이상이어야 함')
        return False
        
    elif re.search('[0-9]+', pwd) is None:
        print('비밀번호는 최소 1개 이상의 숫자가 포함되어야 함')
        return False
        
    elif re.search('[a-zA-Z]+', pwd) is None:
        print('비밀번호는 최소 1개 이상의 영문 대소문자가 포함되어야 함')
        return False
        
    elif re.search('[`~!@#$%^&*(),<.>/?]+', pwd) is None:
        print('비밀번호는 최소 1개 이상의 특수문자가 포함되어야 함')
        return False
        
    else:
        print('비밀번호 기준에 적합합니다.')
        return True


passwd = 'a123456789#'
passwordValidation(passwd)


[실행 결과]
비밀번호 기준에 적합합니다.

 

■ 특수문자를 리스트 객체로 생성한 후 체크하도록 하는 방법

import re

def pwdValidation(pwd):

    special_char = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(',\
                    ')', ',', '<', '.', '>', '/', '?', '[', ']', '{', '}']

    if len(pwd) < 8:
        print('비밀번호는 최소 8자 이상이어야 함')
        return False
        
    elif re.search('[0-9]+', pwd) is None:
        print('비밀번호는 최소 1개 이상의 숫자가 포함되어야 함')
        return False
        
    elif re.search('[a-z]+', pwd) is None or re.search('[A-Z]+', pwd) is None:
        print('비밀번호는 최소 1개 이상의 영문 대소문자가 포함되어야 함')
        return False
        
    elif not any(c in special_char for c in pwd):
        print('비밀번호는 최소 1개 이상의 특수문자가 포함되어야 함')
        return False
        
    else:
        print('비밀번호 기준에 적합합니다.')
        return True

password = '12345678aQ'
pwdValidation(password)


[실행 결과]
비밀번호는 최소 1개 이상의 특수문자가 포함되어야 함

※ not any(c in special_char for c in pwd)

# any()는 iterable 객체를 인수로 받고, 인수 중 하나라도 참이 있으면 True 반환(인수 모두 거짓일 때에만 False 반환)
# all()은 iterable 객체를 인수로 받고, 인수가 모두 참이면 True 반환,  거짓이 하나라도 있으면 False 반환

print(all([1, 2, 3, 0]))  # False
print(any([1, 2, 3, 0]))  # True

 

댓글