I am making a web app for practice, it is a job portal. I want to create 8 digit unique IDs for job which will be visible to the end user. Ids can have numbers and alphabets. Pattern needs to be 8 digits without hyphens or dashes like XXXXXXXX.
I know there is UUID thing in python. But they seem to generate the id in their specific format. Is there a way to get the id in my required format? If not can someone please guide me on how to go about it?
I know there is a similar thread How can I generate a unique ID in Python?; but it does not answer my question specifically. It did not answer what I was trying to achieve.
Thanks in advance.
Well you could use uuid.hex
import uuid
uuid.uuid4().hex[:8] # Might reduce uniqueness because of slicing
Or Django also has helper function get_random_string which accepts two parameters length
(default=12) and allowed_chars
:
from django.utils.crypto import get_random_string
get_random_string(8)
Use os.urandom
for the data, and base64
encode it;
In [1]: import os
In [2]: import base64
In [3]: base64.b64encode(os.urandom(6)).decode('ascii')
Out[3]: '6Amtry80'
TLDR: use hashids to convert one-to-one between sequential integers and random-looking strings
If you are creating a web app and need to map string ids like 'x4ua9fam'
to some entry in a database, you want a robust one-to-one method of converting back and forth between an integer and the string id.
Instead of generating a random id each time and checking if it has been taken, you can assign the next available sequential integer (0, 1, 2, ...)
to each new item and encode
it into a unique string using hashids
. When the user requests the string, you can decode
it back into the integer and get your data.