génération aléatoire python

Génération aléatoire d’un identifiant en Python

  • Dernière modification de la publication :29 avril 2021
  • Temps de lecture :6 min de lecture
  • Commentaires de la publication :0 commentaire

Loading

Génération aléatoire d’un identifiant en Python. Vous le savez peut-être si vous consultez souvent ce site, j’adore générer automatiquement (voir cet article ou encore celui-ci). Dans cet article, je vais parler de génération aléatoire d’identifiant (unique et multiple) en Python.

Générer un identifiant simple

Nous avons besoin du module random et de sa fonction choice(liste), qui permet de choisir aléatoirement un élément dans la liste mise en argument.

Dans un premier temps, il nous faut construire un alphabet, c’est-à-dire une liste de caractères dans laquelle nous choisirons les composants de l’identifiant. J’ai choisi de construire cet alphabet de la manière suivante:

alphabet = [ chr(i) for i in range(33,126) if i != 92 and i != 96 ]

qui donne la liste suivante :

['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', ']', '^', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}']

Notez que j’ai choisi d’enlever les caractères de codes ASCII 92 et 96 (à savoir les caractères ‘\’ et ‘`’ que je ne trouve pas très lisibles).

il suffit ensuite de déterminer le longueur de l’identifiant et de construire ce dernier en fonction de la longueur choisie:

from random import choice

# fonction de génération
def generate_id(n, alphabet):
    id = ''
    for i in range(n):
        id += choice( alphabet )
        
    return id
 
 
alphabet = [ chr(i) for i in range(33,126) if i != 92 and i != 96 ]
    
print( generate_id(100,alphabet) )

On voit alors s’afficher par exemple:

Z7+Gzr3F&)FNe2CQEC9_=f+vA/0Io^ME!PTtuP2owlQLVmr3,76a;zIE3A}et+OWY("4C}C1K*uB.[e4vOK.%&Z3v!!PN1kvH9+S

Génération d’un identifiant formaté

On souhaite que l’identifiant ait un certain formatage, par exemple:

XXXXX-XXXXX-XXXXX-XXXXX

où « X » représente un chiffre, une lettre majuscule ou une lettre minuscule (donc exit les caractères cheloux !). Il faudra alors changer l’alphabet et en faisant par exemple:

from random import choice

# fonction de génération
def generate_id(n, alphabet):
    id = ''
    for i in range(n):
        id += choice( alphabet )
        
    return id

# fonction génération id formaté
def generate_id_formated(alphabet):
    id = ''
    for i in range(4):
        if id != '':
            id += '-'
        for j in range(5):
            id += choice( alphabet )
            
    return id
 
alphabet = [ chr(i) for i in range(48,123) if i <= 57 or (i >= 65 and i <=90) or (i >= 97) ]
    
print( generate_id_formated(alphabet) )

On voit alors apparaître par exemple:

rnvnz-a0CAD-phjpA-5tYaU

Génération aléatoire d’un dictionnaire d’identifiants uniques en Python

Voici le but ultime de cet article : générer un dictionnaire. Les clés seront des noms (par exemple) et les valeurs, des identifiants formatés uniques. Genre:

{
  'Jean' : 'rnvnz-a0CAD-phjpA-5tYaU',
  'Paul' : 'lDRVD-WTgLu-W4EPi-suIuT',
  'Inès' : 'xwGqW-1O9vy-KXJMD-yOmsg'
}

On peut alors imaginer un programme ressemblant à celui-ci:

from random import choice

# fonction de génération
def generate_id(n, alphabet):
    id = ''
    for i in range(n):
        id += choice( alphabet )
        
    return id

# fonction génération id formaté
def generate_id_formated(alphabet):
    id = ''
    for i in range(4):
        if id != '':
            id += '-'
        for j in range(5):
            id += choice( alphabet )
            
    return id
 
alphabet = [ chr(i) for i in range(48,123) if i <= 57 or (i >= 65 and i <=90) or (i >= 97) ]

id_dict = dict()
liste_noms = [ 'Jean' , 'Paul' , 'Inès']

for noms in liste_noms:
    identifiant = generate_id_formated(alphabet)
    presence = False
    for key,value in id_dict.items():
        if value == identifiant:
            presence == True
            
    if presence == False:
        id_dict[noms] = generate_id_formated(alphabet)
        
for key,value in id_dict.items():
    print('{} : {}'.format(key,value))

qui affiche:

Jean : OKCA2-55ktW-YSWLr-u7cKR
Paul : ypXap-EskMB-9uEvj-sJrPP
Inès : 8p1Jk-2GG5V-xAcs4-nefyL

Voilà ! Je pense que vous avez de bonnes bases pour laisser désormais place à votre imagination. Et si vous souhaitez quelque chose que vous n’arrivez pas à faire, peut-être pourriez-vous prendre un cours ?

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires