친구 초대링크나 추천코드, 이메일 검증코드 등을 위해 'WUJtQT09'
같은 랜덤한 코드를 생성해야 할 때가 있다. 필요가 생겨 간단히 만들어 보았다.
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]
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
) 안에 있어야 함에 주의하자.