2017-03-09 1 views
0

Je fais une application web pour la pratique, c'est un portail d'emplois. Je veux créer des ID uniques à 8 chiffres pour le travail qui seront visibles par l'utilisateur final. Les ID peuvent avoir des nombres et des alphabets. Le motif doit comporter 8 chiffres sans traits d'union ou tirets comme XXXXXXXX.{Python} {Django} {UUID} Comment créer un identifiant unique à 8 chiffres (XXXXXXXX) en python?

Je sais qu'il y a une chose UUID en python. Mais ils semblent générer l'ID dans leur format spécifique. Est-il possible d'obtenir l'identifiant dans mon format requis? Si non, quelqu'un peut-il me guider sur la façon de s'y prendre?

Je sais qu'il y a un fil similaire How can I generate a unique ID in Python?; mais cela ne répond pas spécifiquement à ma question. Cela n'a pas répondu à ce que j'essayais d'accomplir.

Merci d'avance.

+0

fiche éhontée: utiliser mon générateur de code promo chez https://github.com/scardine/coupon-encode –

+0

double possible de [Comment puis-je générer un identifiant unique en Python?] (Http: // stackoverflow .com/questions/1210458/how-can-i-generate-a-unique-id-in-python) – Morishiri

Répondre

3

Eh bien, vous pouvez utiliser uuid.hex

import uuid 
uuid.uuid4().hex[:8] 

Ou Django a également la fonction d'aide get_random_string qui accepte deux paramètres length(valeur par défaut = 12) et allowed_chars:

from django.utils.crypto import get_random_string 
get_random_string(8).lower() 
+0

Peut-être vaut-il la peine de mentionner que l'uuid4 ne comporterait que des caractères alphabétiques. La fonction d'assistance de Django serait un meilleur choix. – wim

+0

L'utilisation de '.lower()' crée un biais, car les lettres minuscules sont deux fois plus susceptibles de se produire que les chiffres. Il vaudrait mieux utiliser le paramètre 'allowed_chars' si vous ne voulez que des chiffres en minuscule. – knbk

+0

La fonction d'aide de Django a fait l'affaire que je cherchais. Merci. –

0

Utilisez os.urandom pour les données , et base64 le codent;

In [1]: import os 

In [2]: import base64 

In [3]: base64.b64encode(os.urandom(6)).decode('ascii') 
Out[3]: '6Amtry80'