logo

Comment générer un UUID en Python

Dans ce didacticiel, nous verrons comment générer l'UUID en Python à l'aide du module uuid. Avant d’aborder ce sujet, comprenons le concept de base de l’UUID.

Introduction

UUID est une abréviation de identifiants universellement uniques également connu sous le nom de GUID, c'est-à-dire Globally Unique Identifier. Il s'agit d'un numéro d'identification de 128 bits permettant de définir de manière unique des documents, des utilisateurs, des ressources ou des informations. Il existe différentes versions d'UUID ; nous en discuterons tous dans la section suivante.

  • L'UUID est utilisé pour définir des identifiants uniques dans l'espace et dans le temps. L'espace et le temps font qu'une fois l'UUID généré selon la norme, les identifiants ne peuvent pas dupliquer les ressources existantes.
  • L'UUID est l'option la plus appropriée lorsque l'unicité est requise.
  • Il joue un rôle essentiel dans les applications de cryptographie et de hachage.

Quand utiliser l'UUID

Le module UUID peut être utilisé dans les scénarios suivants.

Dans l'application Web -

  • L'UUID nous aide à gérer l'état en générant un identifiant de session unique.
  • Généralement, nous utilisons les valeurs d'auto-incrémentation pour générer des identifiants utilisateur. C'est une approche assez simple et facile à deviner. Cependant, les UUID sont difficiles à deviner car ils ne sont pas créés consécutivement.

Dans le système de base de données

qu'est-ce que GB
  • Cela offre un avantage significatif dans la base de données car l'UUID est indépendant de l'environnement. Cela signifie que nous pouvons créer un UUID sur n'importe quelle machine en utilisant n'importe quelle application.
  • La plupart des applications dépendent du serveur de base de données pour générer la clé unique ou primaire. L'UUID est une bonne option pour générer une clé de base de données unique qui nous aide à changer l'approche de génération de clé dans la base de données.
  • L'UUID est une valeur réelle et non une pseudo-valeur comme un nombre dans une table SQL.

Module uuid Python

Le module Python uuid est implémenté conformément à la RFC 4122, une norme et Copyright © de la société Internet. Avec l'aide du module Python UUID, nous pouvons générer des UUID de différents types tels que les UUID des versions 1, 3, 4 et 5. Le module Python prend en charge les versions suivantes d'UUID.

    UUID1 -Il génère le numéro unique en utilisant l'adresse MAC et le composant d'heure actuelle.UUID4 -Il utilise des générateurs de nombres pseudo-aléatoires pour générer des UUID, et ces types d'UUID sont bons à utiliser à des fins de sécurité.UUID3 et UUID5 -Il utilise le hachage cryptographique et les chaînes de texte fournies par l'application pour générer l'UUID.

Générer un UUID à l'aide du module Python UUID

Générons les UUID de différentes versions à l'aide du module Python uuid.

Utilisation de uuid1() - Pour générer l'uuid, nous devons importer le module uuid puis appeler la méthode uuid1(). Comprenons l'exemple suivant.

Exemple 1

 import uuid # Printing random id using uuid1() print ('The random generated uuid is : ', uuid.uuid1()) 

Sortir:

 The random id using uuid1() is : ab2d0fc0-7224-11ec-8ef2-b658b885fb3 

Structure de l'UUID

Comme nous pouvons le voir, il y a cinq composants dans l'UUID ci-dessus et chaque composant a la même longueur. La structure de l'UUID est au format : '8-4-4-4-12'.

La représentation sous forme de chaîne UUID est donnée ci-dessous -

 UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node. 

Décomposons les champs ci-dessus des UUID

    time_low -Il s'agit d'un premier identifiant de 32 bits.heure_milieu -Ce sont les 16 prochains bits d'identification.time_high_and_version -Il s'agit des 16 bits suivants d'identification.clock_seq_hi_variant :Il s'agit des 8 bits suivants de l'identifiant.clock_seq_low :Il s'agit des 8 bits suivants de l'identifiant.noeud :Il s'agit des 48 derniers bits d'identité.temps :Il s'agit d'un champ de composante temporelle d'id.horloge_seq :Il s'agit d'un numéro de séquence de 14 bits.

Comprenons un autre exemple de génération d'UUID dans divers formats tels que bytes, int et hex.

Exemple - 2 :

 import uuid id = uuid.uuid1() # Representations of uuid1() print ('The byte Representations of uuid1() are : ') print (repr(id.bytes)) print ('Integer Value Representation: ',end='') print(id.int) print ('hex Value Representation : ',end='') print (id.hex) print('
') # The components of uuid1() print ('The components of uuid1() are : ') print ('Version : ',end='') print (id.version) print ('Variant : ',end='') print (id.variant) print('
') # Fields of uuid1() print ('The Fields of uuid1() are : ') print ('Fields : ',end='') print (id.fields) print('UUID.fields :', id.fields) print('Prining each field seperately') print('UUID.time_low : ', id.time_low) print('UUID.time_mid : ', id.time_mid) print('UUID.time_hi_version : ', id.time_hi_version) print('UUID.clock_seq_hi_variant: ', id.clock_seq_hi_variant) print('UUID.clock_seq_low : ', id.clock_seq_low) print('UUID.node : ', id.node) print('UUID.time : ', id.time) print('UUID.clock_seq : ', id.clock_seq) print('UUID.SafeUUID : ', id.is_safe) print('
') # The time Component of uuid1() print ('The time Component of uuid1() is : ') print ('Time component : ',end='') print (id.node) 

Sortir:

 The byte Representations of uuid1() are : b'xb9xeaxb88sx0ex11xecxbfvx86xa0;xe4`x12' int Representation : 247125913120858544596828814248071421970 hex Representation : b9eab838730e11ecbf7686a03be46012 The Components of uuid1() are : Version : 1 Variant : specified in RFC 4122 The Fields of uuid1() are : Fields : (3119167544, 29454, 4588, 191, 118, 148022757711890) The time Component of uuid1() is : Time component : 148022757711890 UUID.time_mid : 29460 UUID.time_hi_version : 4588 UUID.clock_seq_hi_variant: 186 UUID.clock_seq_low : 100 UUID.node : 90979746151630 UUID.time : 138612218401246920 UUID.clock_seq : 14948 UUID.SafeUUID : SafeUUID.unsafe 

Inconvénients de l'UUID1

L'UUID1 est associé à l'adresse MAC de l'ordinateur et peut donc constituer une menace pour la vie privée. Cependant, il offre une unicité totale.

Méthode 2 : utiliser uuid4()

programmes python

Cette méthode génère des nombres aléatoires avec la garantie de sécuriser la confidentialité. Comprenons l'exemple suivant.

Exemple -

 import uuid id = uuid.uuid4() # Id generated using uuid4() print ('The id generated using uuid4() : ',end='') print (id) 

Sortir:

 The id generated using uuid4() : 53967be6-71e9-4ee9-9912-60d02d2d9b0a 

uuid1() contre uuid4

Le uuid1() fournit l’assurance de ne produire aucune collision. Nous pouvons créer des doublons d'UUID en créant plus de 16 384 uuid1 en moins de 100 ns. Il ne fournit pas la garantie de garantir la confidentialité. Le uuid1() n'est pas recommandé si vous ne souhaitez pas voir les adresses MAC de votre machine.

La méthode uuid4() génère un UUID aléatoire en utilisant les générateurs de numéros sécurisés générés cryptographiquement. Il génère des UUID plus sécurisés. Ceci est recommandé lorsque les UUID doivent être générés sur des machines distinctes.

UUID 3 et UUID 5 pour créer un UUID basé sur le nom

L'UUID basé sur le nom signifie que nous pouvons générer des UUID en utilisant la version 3 ou 5 de l'UUID.

Nous pouvons utiliser des noms et des espaces de noms pour créer une série d'UUID uniques. Les versions 3 et 5 hachent l'identifiant de l'espace de noms avec un nom.

exemples de programmes Java

Le uuid3() La méthode génère un UUID basé sur le hachage MD5 de l’identifiant de l’espace de noms et une chaîne. D'autre part, la méthode uuid5() génère un UUID basé sur la technique de hachage SHA-1 d'un identifiant d'espace de noms.

Vous trouverez ci-dessous les identifiants des espaces de noms définis par uuid3() ou uuid5().

    NAMESPACE_DNS -Il représente un nom de domaine traditionnel. Par exemple, https://javatpoint.com.NAMESPACE_URL -Il représente une URL.NAMESPACE_OID -Cet espace de noms est spécifié par la chaîne ISO OID.NAMESPACE_X500 -Lorsque cet espace de noms est spécifié, la chaîne de nom est un DN X.500 en DER ou un format de sortie texte.

Comprenons l'exemple suivant pour générer UUID3 et UUID5 en utilisant les différents noms d'hôte et espaces de noms.

Exemple -

 import uuid host_names = ['javatpoint.com', 'tutorialandexample.com'] for host in host_names: print('Generate uuid 3 version using name as',host,' and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, host)) print('Generate uuid 5 version using name as', host, ' and namespace as uuid.NAMESPACE_DNS'), print(uuid.uuid5(uuid.NAMESPACE_DNS, host)) print() 

Sortir:

 Generate uuid 3 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate uuid 5 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 0fc2d4dd-7194-5200-8050-f0ca1dd04b3d Generate uuid 3 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 6f6fe445-1c4c-3874-854e-c79f617effe5 Generate uuid 5 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 781c3cc9-4965-5fdc-9c40-89bb0ea8ec0d 

Exemple - 2 : générer l'UUID 3 et l'UUID 5 en utilisant un espace de noms différent

convertir une chaîne en json java
 import uuid name_spaces = [uuid.NAMESPACE_DNS, uuid.NAMESPACE_URL, uuid.NAMESPACE_OID, uuid.NAMESPACE_X500] host_name = 'pynative.com' print('Generate uuid using namespace') for namespace in name_spaces: print('uuid 3 is', uuid.uuid3(namespace, host_name)) print('uuid 5 is', uuid.uuid5(namespace, host_name)) print() 

Sortir:

 Generate uuid using namespace uuid 3 is 6ddc8513-dc7b-3b37-b21b-a1ca9440fe14 uuid 5 is 8d6a1314-170a-559c-afe7-b68d1d7ee9ac uuid 3 is 5dcfef3e-bcc9-38bc-b989-4a7516a05974 uuid 5 is 3a4a6c31-8d6a-5583-8497-d2ed90b1f13a uuid 3 is 84d9730f-330f-3634-9542-4acfcdcd6c60 uuid 5 is 899f3d4b-6095-5ee6-9805-68e0c51dcb39 uuid 3 is b140fa3b-983a-3efe-85ef-92f07d5e09a0 uuid 5 is 73b723ef-5c5e-5eb4-8fcc-aabb5c4e7803 

Le comportement de uuid3 et uuid5

  • Bien que le même espace de noms et le même nom soient similaires, les UUID sont générés à des moments différents.
  • Deux espaces de noms différents dans le même espace de noms sont différents, cela génère des identifiants uniques.

Exemple - 3

 import uuid print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com')) print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com')) 

Sortir:

 Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb 

Comment convertir une chaîne en UUID et un UUID en chaîne en Python ?

Le uuid.uuid1() La méthode renvoie l’instance de la classe UUID. Nous pouvons obtenir une représentation sous forme de chaîne de l'UUID en utilisant le str() méthode. Le format de chaîne correspondant peut être utilisé en comparaison ou en manipulation. Comprenons l'exemple suivant.

Exemple -

 import uuid UUID1_VAL = uuid.uuid1() print('The version 1 UUID is ', UUID1_VAL) # convert a UUID to a string of hex digits in standard form print('The version 1 UUID in String format', str(UUID1_VAL)) # Use replace() method to remove dashes from string uuidString = str(UUID1).replace('-', '') print('Version 1 UUID in String removing dashes', uuidString) 

Sortir:

 The version 1 UUID is cdca7930-7488-11ec-a0c4-4984d2946471 UUID of version 1 in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String removing dashes cdca7930748811eca0c44984d2946471 

Maintenant, nous allons créer l'UUID à partir de String.

Parfois, nous obtenons l'UUID au format chaîne. Et notre application doit le convertir en instance de classe UUID pour certaines applications. Comprenons l'exemple suivant pour convertir l'UUID au format chaîne.

Exemple -

 import uuid import uuid UUIDStrings = ['{c7c9de0a-d676-11e8-8d62-ccaf789d94a0}', '018c168c-d509-11e8-b096-ccaf789d94a0', 'urn:uuid:e5e9394c-daed-498e-b9f3-69228b44fbfa'] for string in UUIDStrings: # make a UUID from a string of hex digits (braces and hyphens ignored) myUUID = uuid.UUID(string) print('My UUID is', myUUID) print('My UUID time component is', myUUID.time) print() 

Sortir:

opérateurs javascript
 UUID is c7c9de0a-d676-11e8-8d62-ccaf789d94a0 Time component is 137595594281180682 UUID is 018c168c-d509-11e8-b096-ccaf789d94a0 Time component is 137594023292180108 UUID is e5e9394c-daed-498e-b9f3-69228b44fbfa Time component is 688728508333635916 

Exemple - 2 :

 import uuid def display(message, l): print(message) for v in l: print(v) print() string_uuids = [ 'urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b', '{417a5ebb-01f7-4ed5-aeac-3d56cd5037b0}', '2115773a-5bf1-11dd-ab48-001ec200d9e0', ] display('string UUID', string_uuids) uuids = [ uuid.UUID(s) for s in string_uuids ] display('converted to uuids', uuids) uuids.sort() display('sorted value', uuids) 

Sortir:

 string UUID urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b {417a5ebb-01f7-4ed5-aeac-3d56cd5037b0} 2115773a-5bf1-11dd-ab48-001ec200d9e0 converted to uuids f2f84497-b3bf-493a-bba9-7c68e6def80b 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 2115773a-5bf1-11dd-ab48-001ec200d9e0 sorted value 2115773a-5bf1-11dd-ab48-001ec200d9e0 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 f2f84497-b3bf-493a-bba9-7c68e6def80b 

Générer des UUID reproductibles

Comme nous l'avons mentionné précédemment, l'UUID possède divers attributs. Nous pouvons utiliser le même UUID en utilisant n'importe lequel de ses attributs. En utilisant le module uuid , nous pouvons générer la même chose uuide à tout moment en utilisant la valeur de départ. La valeur de départ peut également être utilisée pour générer le même UUID. Comprenons les deux concepts.

Les entrées suivantes peuvent être utilisées pour créer une instance UUID.

  • Chaîne
  • Octets
  • Octets_le
  • Des champs
  • int

En utilisant l’une des valeurs ci-dessus, l’UUID peut être généré. Voyons l'exemple suivant où nous utilisons toutes ces valeurs du même UUID.

Exemple -

 import uuid print('Generating UUID from int') UUID_x = uuid.UUID(int=236357465324988601727440242910546465952) print('UUID is', UUID_x) print('UUID from URN') UUID_x1 = uuid.UUID('urn:uuid:b1d0cac0-d50d-11e8-b57b-ccaf789d94a0') print('UUID is', UUID_x1) print('UUID from bytes') UUID_x2 = uuid.UUID(bytes=b'xb1xd0xcaxc0xd5
x11xe8xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x2) print('UUID from bytes_len') UUID_x3 = uuid.UUID(bytes_le=b'xc0xcaxd0xb1
xd5xe8x11xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x3) print('UUID from fields') UUID_x4 = uuid.UUID(fields=(2983250624, 54541, 4584, 181, 123, 225054014936224)) print('UUID is', UUID_x4) 

Sortir:

 Generating UUID from int UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from URN UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes_len UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from fields UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 

Reproduire l'UUID avec une graine

Comme son nom l’indique, le module Faker génère pour nous de fausses données. Nous avons utilisé le module faker pour générer le même UUID à plusieurs reprises. Comprenons l'exemple suivant.

Exemple -

 import uuid from faker import Faker fake_obj = Faker() fake_obj.seed(8754) print(faker_obj.uuid4()) fake_obj.seed(8754) print(fake_obj.uuid4()) 

Sortir:

 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 

Conclusion

Dans ce didacticiel, nous avons discuté en détail du module uuid et compris comment générer les différents UUID. Les UUID nous aident à définir le caractère unique de l'application/base de données et aident également à définir des identifiants pour les documents, les hôtes, l'application, les clients et d'autres situations.