How to create a 8 digit Unique ID in Python?

2020-08-20 03:09发布

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.

3条回答
\"骚年 ilove
2楼-- · 2020-08-20 03:41

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'
查看更多
Luminary・发光体
3楼-- · 2020-08-20 03:47

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.

查看更多
一纸荒年 Trace。
4楼-- · 2020-08-20 03:57

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)
查看更多
登录 后发表回答