[Python] 랜덤 초대코드 생성하기

Eunsung Lim·2020년 12월 31일
0

Django 개발일지

목록 보기
2/3
post-thumbnail

랜덤 코드 생성기

친구 초대링크나 추천코드, 이메일 검증코드 등을 위해 'WUJtQT09' 같은 랜덤한 코드를 생성해야 할 때가 있다. 필요가 생겨 간단히 만들어 보았다.


코드

Python 2

import uuid
import base64

def generate_random_slug_code(length=8):
    """
    generates random code of given length
    """
    return base64.urlsafe_b64encode(
    	uuid.uuid4().bytes.encode("base64").rstrip()
    ).decode()[:length]

Python 3

import uuid
import base64
import codecs

def generate_random_slug_code(length=8):
    """
    generates random code of given length
    """
    return base64.urlsafe_b64encode(
        codecs.encode(uuid.uuid4().bytes, "base64").rstrip()
    ).decode()[:length]

UUID.bytes의 타입이 python2(str)와 3(bytes)에서 다르기 때문에 인코딩 부분이 조금 다르다.
둘 중에 사용하는 Python 버젼에 맞추어 선택하면 된다.


코드 뜯어보기

매번 완전히 새롭고 중복될 여지가 적은 시드값으로 uuid4를 택했다. UUID는 다음과 같은 형식으로 랜덤하게 생성된다.

>>> import uuid
>>> uuid.uuid4()
UUID('184062bb-6ad4-403d-a2b2-5c8be8d5f613') 
# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 

이 값을 base64로 인코딩했다.

>>> import codecs
>>> codecs.encode(uuid.uuid4().bytes, "base64").rstrip()
b'mkgmmjobSa2WbKf/PfOqIw=='

랜덤 코드를 초대 링크 등 url에서 활용하는 경우가 많다. url에서도 사용 가능한 코드를 만들기 위해 base64의 urlsafe_b64encode 함수를 활용했다.
이때 인코딩한 값은 단순 문자열이 아닌 바이트스트링 타입이다. 문자열로 활용하려면 .decode()를 붙여주면 된다.

>>> import base64
>>> base64.urlsafe_b64encode(_).decode()
'bWtnbW1qb2JTYTJXYktmL1BmT3FJdz09'

이제 이 값을 원하는 길이만큼 슬라이싱해주면 된다. 단, length 값이 유효한 범위(1-32) 안에 있어야 함에 주의하자.

profile
Strong belief in connecting the dots. 찬찬히 배우고 있는 학생 개발자입니다.

0개의 댓글