logo

Hoe UUID in Python te genereren

In deze tutorial bespreken we hoe je de UUID in Python kunt genereren met behulp van de uuid-module. Voordat we op dit onderwerp ingaan, moeten we eerst het basisconcept van de UUID begrijpen.

Invoering

UUID is een afkorting van universeel unieke identificatiegegevens ook bekend als GUID, dat wil zeggen Globally Unique Identifier. Het is een ID-nummer van 128 bits om documenten, gebruikers, bronnen of informatie op unieke wijze te definiëren. Er zijn verschillende versies van UUID's; we zullen ze allemaal bespreken in de komende sectie.

  • De UUID wordt gebruikt om unieke identificatiegegevens in ruimte en tijd te definiëren. Ruimte en tijd betekenen dat zodra de UUID volgens de standaard is gegenereerd, identificaties geen duplicaat van bestaande bronnen kunnen zijn.
  • De UUID is de meest geschikte optie wanneer uniciteit vereist is.
  • Het speelt een essentiële rol bij cryptografie en hashing.

Wanneer moet u UUID gebruiken?

De UUID-module kan in de volgende scenario's worden gebruikt.

In webapplicatie -

  • De UUID helpt ons de staat te beheren door te genereren een unieke sessie-ID.
  • Over het algemeen gebruiken we de waarden voor automatisch verhogen om gebruikers-ID's te genereren. Het is een vrij eenvoudige benadering en gemakkelijk te raden. UUID's zijn echter moeilijk te raden omdat ze niet opeenvolgend worden aangemaakt.

In databasesysteem

ambtstermijn berekenen in Excel
  • Het biedt een aanzienlijk voordeel in de database omdat UUID omgevingsonafhankelijk is. Het betekent dat we een UUID kunnen maken op elke machine en met elke applicatie.
  • De meeste toepassingen zijn afhankelijk van de databaseserver om de unieke of primaire sleutel te genereren. UUID is een goede optie om een ​​unieke databasesleutel te genereren, die ons helpt de aanpak voor het genereren van sleutels in de database te veranderen.
  • De UUID is een echte waarde, geen pseudowaarde zoals een getal in een SQL-tabel.

Python uuid-module

De Python uuid-module is geïmplementeerd volgens RFC 4122, een standaard en Copyright © van de internetmaatschappij. Met behulp van de Python UUID-module kunnen we UUID's in verschillende typen genereren, zoals UUID's met 1, 3, 4 en 5 versies. Python-module ondersteunt de volgende versies van UUID.

    UUID1 -Het genereert het unieke nummer met behulp van het MAC-adres en de huidige tijdcomponent.UUID4 -Het maakt gebruik van pseudo-willekeurige getalgeneratoren om UUID's te genereren, en dergelijke typen UUID's zijn goed te gebruiken voor veiligheidsdoeleinden.UUID3 en UUID5 -Het maakt gebruik van cryptografische hashing en door de applicatie geleverde tekstreeksen om UUID te genereren.

Genereer UUID met behulp van de Python UUID-module

Laten we de UUID's van verschillende versies genereren met behulp van de Python uuid-module.

Uuid1() gebruiken - Om de uuid te genereren, moeten we de uuid-module importeren en vervolgens de uuid1()-methode aanroepen. Laten we het volgende voorbeeld begrijpen.

Voorbeeld 1

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

Uitgang:

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

Structuur van UUID

Zoals we kunnen zien, zijn er vijf componenten in de bovenstaande UUID en heeft elke component dezelfde lengte. De structuur van UUID heeft het formaat van '8-4-4-4-12'.

De weergave van de UUID-reeks wordt hieronder gegeven:

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

Laten we de bovenstaande velden met UUID's opsplitsen

Java iteratie kaart
    time_low -Het zijn de eerste 32 bits ID.tijd_mid -Het zijn de volgende 16 bits ID.tijd_hoge_en_versie -Het zijn de volgende 16 bits ID.clock_seq_hi_variant:Het zijn de volgende 8 bits ID.klok_volg_laag:Het zijn de volgende 8 bits ID.knooppunt:Het zijn de laatste 48 bits ID.tijd :Het is een tijdcomponentveld van id.klok_seq:Het is een 14-bits volgnummer.

Laten we een ander voorbeeld bekijken van het genereren van UUID in verschillende formaten, zoals bytes, int en hex.

Voorbeeld - 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) 

Uitgang:

 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 

Nadelen van UUID1

De UUID1 is gekoppeld aan het MAC-adres van de computer en kan daarom een ​​bedreiging vormen voor de privacy. Het biedt echter volledige uniciteit.

Methode 2: uuid4() gebruiken

Deze methode genereert willekeurige getallen met de garantie dat de privacy wordt gewaarborgd. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

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

Uitgang:

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

uuid1() versus uuid4

De uuid1() biedt de zekerheid dat er geen botsing ontstaat. We kunnen duplicaten van UUID's maken door meer dan 16384 uuid1 in minder dan 100 ns te maken. Het biedt geen garantie om de privacy te waarborgen. De uuid1() wordt niet aanbevolen als u de MAC-adressen van uw machine niet wilt zien.

De uuid4()-methode genereert willekeurige UUID door gebruik te maken van de cryptografisch gegenereerde beveiligde nummergeneratoren. Het genereert veiliger UUID's. Dit wordt aanbevolen wanneer UUID's op afzonderlijke machines moeten worden gegenereerd.

UUID 3 en UUID 5 om een ​​op naam gebaseerde UUID te maken

De op naam gebaseerde UUID betekent dat we UUID's kunnen genereren met behulp van versie 3 of 5 UUID.

We kunnen namen en naamruimten gebruiken om een ​​reeks unieke UUID's te maken. Versie 3 en 5 hashen de naamruimte-ID met een naam.

De uuid3() methode genereert een UUID die is gebaseerd op de MD5-hash van de naamruimte-ID en een tekenreeks. Aan de andere kant genereert de uuid5()-methode UUID op basis van de SHA-1-hashtechniek van een naamruimte-identificator.

Hieronder staan ​​de naamruimte-ID's gedefinieerd door uuid3() of uuid5().

    NAMESPACE_DNS -Het vertegenwoordigt een traditionele domeinnaam. Bijvoorbeeld https://javatpoint.com.NAMESPACE_URL -Het vertegenwoordigt een URL.NAMESPACE_OID -Deze naamruimte wordt gespecificeerd als de tekenreeks ISO OID.NAMESPACE_X500 -Wanneer deze naamruimte is opgegeven, is de naamreeks een X.500 DN in DER of een tekstuitvoerformaat.

Laten we het volgende voorbeeld begrijpen om UUID3 en UUID5 te genereren met behulp van de verschillende hostnamen en naamruimten.

Voorbeeld -

kmp-algoritme
 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() 

Uitgang:

 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 

Voorbeeld - 2: Genereer UUID 3 en UUID 5 met een andere naamruimte

 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() 

Uitgang:

 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 

Het gedrag van uuid3 en uuid5

  • Ondanks dat dezelfde naamruimte en dezelfde naam vergelijkbaar zijn, worden UUID's op verschillende tijdstippen gegenereerd.
  • Twee verschillende naamruimten in dezelfde naamruimte zijn verschillend, het genereert de unieke ID's.

Voorbeeld - 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')) 

Uitgang:

 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 

Hoe string naar UUID en UUID naar string in Python te converteren?

De uuid.uuid1() methode retourneert het exemplaar van de UUID-klasse. We kunnen een stringrepresentatie van UUID krijgen met behulp van de str() methode. Het overeenkomstige tekenreeksformaat kan worden gebruikt ter vergelijking of manipulatie. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

 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) 

Uitgang:

 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 

Nu gaan we UUID maken van String.

Soms krijgen we de UUID in stringformaat. En onze applicatie moet deze voor sommige applicaties converteren naar de UUID-klasse-instantie. Laten we het volgende voorbeeld begrijpen om string-geformatteerde UUID te converteren.

wat is uitzonderingsafhandeling in Java

Voorbeeld -

 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() 

Uitgang:

Java Lambda-expressies
 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 

Voorbeeld - 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) 

Uitgang:

 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 

Genereer reproduceerbare UUID's

Zoals we eerder vermeldden, heeft UUID verschillende attributen. We kunnen dezelfde UUID gebruiken met elk van zijn attributen. De ... gebruiken uuid-module , kunnen we hetzelfde genereren uuid op elk gewenst moment met behulp van de zaadwaarde. De startwaarde kan ook worden gebruikt om dezelfde UUID te genereren. Laten we beide concepten begrijpen.

De volgende invoer kan worden gebruikt om een ​​UUID-instantie te maken.

  • Snaar
  • Bytes
  • Bytes_le
  • Velden
  • int

Met behulp van een van de bovenstaande waarden kan de UUID worden gegenereerd. Laten we het volgende voorbeeld bekijken waarin we al deze waarden van dezelfde UUID gebruiken.

Voorbeeld -

 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) 

Uitgang:

 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 

Reproduceer UUID met zaad

Zoals de naam al doet vermoeden, genereert de Faker-module valse gegevens voor ons. We hebben de faker-module gebruikt om herhaaldelijk dezelfde UUID te genereren. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

 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()) 

Uitgang:

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

Conclusie

In deze tutorial hebben we de uuid-module in detail besproken en begrijpen we hoe we de verschillende UUID's kunnen genereren. UUID's helpen ons bij het definiëren van het unieke karakter van de applicatie/database en helpen ook bij het definiëren van identificatiegegevens voor documenten, hosts, applicaties, clients en andere situaties.