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

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ération aléatoire d’identifiants 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é

Si 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 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 ou les clés sont des noms (par exemple) et où les valeurs sont 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 afin de faire évoluer ce programme. Et si vous souhaitez quelque chose que vous n’arrivez pas à faire, peut-être pourriez-vous prendre un cours par webcam avec moi ?

Evariste_Galois1973

Laissez votre message

Supportscreen tag