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 ?