본문 바로가기
코딩 연습/파이썬 기초(예제)

[파이썬기초(예제)] 회원가입 아이디 및 비밀번호 생성, 유효성 체크 기능

by good4me 2022. 4. 15.

goodthings4me.tistory.com

파이썬 기초 연습으로 회원가입 시 아이디와 비밀번호를 생성하고 비밀번호를 변경하는 기능을 만들어보았다. 텍스트 기반으로 터미널에서 수행되며, 아이디와 비밀번호 생성 시 파이썬 정규표현식으로 유효성을 체크하는 기능도 포함했다.

 

 

회원 아이디 & 비밀번호 생성, 변경, 그리고 유효성 체크까지 구현

 

설명 목차

  • 프로그램 메인(시작)
  • 아이디 및 비밀번호 생성
  • 아이디 및 비밀번호 유효성 체크(정규표현식 활용)
  • 비밀번호 변경

 

[프로그램 시작]

def main():
    regist_user = {'haha':'gkgkgh!!11'}
    sw = True

    while sw:
        print('-----------------------------')
        print('1. 회원 아이디 생성')
        print('2. 비밀번호 변경')
        print('3. 전체 회원 아이디 목록 보기')
        print('4. 종료')
        print('-----------------------------\n')  

        select_no = int(input('번호 선택(1~4): '))

        if select_no == 1:
            id_result = make_id(regist_user)
            if id_result:
                regist_user[id_result[0]] = id_result[1]
                print(regist_user)

        if select_no == 2:
            uid = str(input('회원 아이디: '))
            if uid in regist_user:
                print(f'{uid} / {regist_user[uid]}')
                n_pwd = edit_password(uid, regist_user[uid])
                regist_user[uid] = n_pwd
                print('비밀번호 변경 완료!\n')
            else:
                print('등록된 아이디가 아닙니다.\n')
                continue

        if select_no == 3:
            for k, v in regist_user.items():
                print(f'id: {k} / pw: {v}')
            print()
    
        if select_no == 4:
            sw = False

main()
  • 프로그램 메뉴 표시 반복을 위해 while 문을 사용했으며, 각 번호 입력 시 개별적인 함수를 호출해서 수행되도록 했다.
  • 1번은 회원 아이디를 생성하는 함수를 호출하고 결과(리스트)를 받아 회원관리 딕셔너리 변수 regist_user에 저장한다. (비밀번호 생성은 아이디 생성하는 함수에서 같이 수행함)
  • 2번은 비밀번호 변경을 위해 회원관리 딕셔너리에서 아이디를 검색하고, 있으면 비밀번호 변경 함수를 호출(아이디와 기존 비밀번호를 인자로 전달) 한 후 결과를 받아 저장한다.
  • 3번은 등록된 회원 아이디 목록을 보여주고,
  • 4번은 프로그램을 종료한다.

 

프로그램 전체 흐름
프로그램 전체 흐름

 

good4me.co.kr

 

[아이디 및 비밀번호 생성]

def make_id(regist_user):
    regist_id = []
    while True:
        uid = str(input('회원 아이디 입력: '))
        if uid in regist_user:
            print('이미 등록된 id입니다.')
            ex = input('메인 화면으로 이동하시겠습니까? (y/n): ')
            if ex == 'y' or ex == 'Y':
                return False
            else:
                continue
        else:
            res_id = chk_id(uid)
            if not res_id:
                continue
            else:
                regist_id.append(uid)
                break
    # print(regist_id)

    while True:
        pwd = str(input('비밀번호 입력: '))
        res_pwd = chk_password(pwd)
        if not res_pwd:
            continue
        else:
            regist_id.append(pwd)
            break
    # print(regist_id)
    return regist_id
  • 신규 회원 아이디를 입력받고, 아이디가 이미 등록되어 있으면 메인화면으로 가던지 다시 아이디를 입력하던지 선택
  • 입력받은 아이디의 유효성 체크 함수 호출 후 결과를 받아 None이면 회원 아이디를 다시 입력하고, None이 아니면 regist_id 리스트에 저장하고 다음 단계인 비밀번호 생성 while 문으로 이동
  • 비밀번호를 입력하면 비밀번호 유효성 체크 함수를 호출하여 결과를 받고, None이면 다시 입력하고, None이 아니면 regist_id 리스트에 저장하고 while 문 종료
  • 결과 값인 regist_id 리스트를 리턴

 

[아이디 및 비밀번호 유효성 체크(정규표현식 활용)]

import re

def chk_id(id):
    result = True
    reg = r'^[A-Za-z0-9_]{4,20}$'
    if not re.search(reg, id):
        print('아이디 생성 기준에 부적당합니다!')
        result = False
    return result


def chk_password(pwd):
    result = True
    reg = r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%&*?])[A-Za-z\d!@#$%&*?]{8,20}$'
    if not re.search(reg, pwd):
        print('비밀번호 기준에 부적당합니다!')
        result = False
    return result
  • 아이디와 패스워드는 파이썬 정규표현식으로 유효성 체크를 한다.
  • 아이디는 영문 대소문자와 숫자, 그리고 특수기호인 '_'만을 허용하되 4자 이상 20자 이하로 한다.
  • 비밀번호도 영문 대소문자와 숫자, 그리고 특수기호(!@#$%&*?)를 허용하며, 8자 이상 20자 이하로 한다.

아이디 & 비밀번호 체크
아이디 & 비밀번호 유효성 체크

 

[비밀번호 변경]

def edit_password(uid, pwd):
    n_pwd = ''
    while True:
        pw = str(input('새로운 비밀번호 입력: '))
        if pw == pwd:
            print(f'기존 비번하고 같음!')
            continue
        else:
            res_pwd = chk_password(pw)
            if not res_pwd:
                continue
            else:
                n_pwd = pw
                break
    print(f'id:{uid}, n_pwd:{n_pwd}')
    return uid, n_pwd
  • 비밀번호 변경은 등록된 아이디와 기본 비밀번호를 받아 다시 입력된 새로운 비밀번호가 기존 비밀번호와 같은 경우, 다시 입력하고, 다를 경우 비밀번호 유효성 체크 함수를 호출하여 결과를 받아 str 변수 n_pwd에 대입한다.
  • 아이디와 새로운 비밀번호를 리턴한다.

 

 

댓글