logo

Hogyan lehet UUID-t létrehozni Pythonban

Ebben az oktatóanyagban megvitatjuk, hogyan állíthatjuk elő az UUID-t Pythonban az uuid modul használatával. Mielőtt belemerülnénk ebbe a témába, ismerjük meg az UUID alapkoncepcióját.

Bevezetés

Az UUID a név rövidítése univerzálisan egyedi azonosítók más néven GUID, azaz Globally Unique Identifier. Ez egy 128 bites azonosítószám, amely egyedileg határozza meg a dokumentumokat, felhasználókat, erőforrásokat vagy információkat. Az UUID-nek többféle változata létezik; mindegyikről szó lesz a következő részben.

  • Az UUID egyedi azonosítók meghatározására szolgál térben és időben. A tér és az idő azt jelenti, hogy az UUID szabvány szerinti előállítása után az azonosítók nem duplikálhatják a meglévő erőforrásokat.
  • Az UUID a legmegfelelőbb lehetőség, ha egyediségre van szükség.
  • Alapvető szerepet játszik a kriptográfiában és a hash alkalmazásban.

Mikor kell használni az UUID-t?

Az UUID modul a következő forgatókönyvekben használható.

Webes alkalmazásban -

  • Az UUID generálással segít az állapot kezelésében egyedi munkamenet-azonosító.
  • Általában az automatikus növekedési értékeket használjuk a felhasználói azonosítók generálásához. Ez egy nagyon egyszerű megközelítés, és könnyen kitalálható. Az UUID-ket azonban nehéz kitalálni, mert nem egymás után jönnek létre.

Adatbázis rendszerben

mekkora a számítógép képernyőjének mérete
  • Jelentős előnyt jelent az adatbázisban, mivel az UUID környezetfüggetlen. Ez azt jelenti, hogy bármilyen alkalmazással bármilyen gépen létrehozhatunk UUID-t.
  • A legtöbb alkalmazás az adatbázis-kiszolgálótól függ az egyedi vagy elsődleges kulcs létrehozásához. Az UUID jó lehetőség egyedi adatbáziskulcs létrehozására, amely segít megváltoztatni a kulcsgenerálási megközelítést az adatbázisban.
  • Az UUID valódi érték, nem pedig pszeudoérték, mint egy szám az SQL-táblázatban.

Python uuid modul

A Python uuid modul az RFC 4122 szabvány szerint van megvalósítva, amely az internetes társadalom szabványa és Copyright ©. A Python UUID modul segítségével különféle típusú UUID-ket állíthatunk elő, például 1, 3, 4 és 5 verziójú UUID-ket. A Python modul az UUID következő verzióit támogatja.

    UUID1 -Az egyedi számot a MAC-cím és az aktuális időkomponens használatával állítja elő.UUID4 -Pszeudo-véletlen számgenerátorokat használ az UUID-k generálásához, és az ilyen típusú UUID-ket jó használni biztonsági célokra.UUID3 és UUID5 -Az UUID létrehozásához kriptográfiai kivonatot és alkalmazás által biztosított szöveges karakterláncokat használ.

UUID létrehozása a Python UUID modul segítségével

A Python uuid modul segítségével állítsuk elő a különböző verziók UUID-jét.

Az uuid1() használata - Az uuid generálásához importálnunk kell az uuid modult, majd meg kell hívnunk az uuid1() metódust. Értsük meg a következő példát.

Példa - 1

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

Kimenet:

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

Az UUID felépítése

Amint látjuk, a fenti UUID-ben öt komponens van, és mindegyik komponens azonos hosszúságú. Az UUID szerkezete a következő formátumú „8-4-4-4-12”.

Az UUID karakterlánc reprezentációja alább látható -

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

Bontsuk fel az UUID fenti mezőit

    time_low -Ez az azonosító első 32 bitje.time_mid -Ez az azonosító következő 16 bitje.time_high_and_version -Ez egy következő 16 bites azonosító.clock_seq_hi_variant:Ez egy következő 8 bites azonosító.clock_seq_low:Ez egy következő 8 bites azonosító.csomópont:Ez az azonosító utolsó 48 bitje.idő :Ez az id időkomponens mezője.clock_seq:Ez egy 14 bites sorszám.

Nézzünk meg egy másik példát az UUID generálására különféle formátumokban, például bájtokban, intben és hexa számokban.

Példa - 2:

készítsen végrehajthatóvá egy sh scriptet
 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) 

Kimenet:

 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 

Az UUID1 hátrányai

Az UUID1 a számítógép MAC-címéhez van társítva, és ezért veszélyt jelenthet a magánéletre. Azonban teljes egyediséget biztosít.

2. módszer: az uuid4()

Ez a módszer véletlen számokat generál, garantálva a magánélet védelmét. Értsük meg a következő példát.

Példa -

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

Kimenet:

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

uuid1() vs uuid4

A uuid1() biztosítékot ad arra, hogy ne okozzon ütközést. Létrehozhatjuk az UUID-k másolatait, ha több mint 16384 uuid1-et hozunk létre 100ns-nál rövidebb idő alatt. Nem garantálja a magánélet védelmét. A uuid1() nem ajánlott, ha nem szeretné látni gépe MAC-címeit.

Az uuid4() metódus véletlenszerű UUID-t generál a kriptográfiailag előállított biztonságos számgenerátorok használatával. Biztonságosabb UUID-ket generál. Akkor ajánlott, ha az UUID-k külön gépeken generálnak.

UUID 3 és UUID 5 név alapú UUID létrehozásához

A név alapú UUID azt jelenti, hogy a 3. vagy 5. verziójú UUID használatával tudunk UUID-ket generálni.

Neveket és névtereket használhatunk egyedi UUID-k sorozatának létrehozására. A 3-as és 5-ös verzió a névtér-azonosítót névvel kivonatolja.

A uuid3() metódus létrehoz egy UUID-t, amely a névtér-azonosító és egy karakterlánc MD5-kivonatán alapul. Másrészt az uuid5() metódus UUID-t generál egy névtér-azonosító SHA-1 kivonatolási technikája alapján.

Alább láthatók az uuid3() vagy uuid5() által meghatározott névterek azonosítói.

    NAMESPACE_DNS -Ez egy hagyományos domain nevet képvisel. Például: https://javatpoint.com.NAMESPACE_URL -Ez egy URL-t jelent.NAMESPACE_OID -Ez a névtér az ISO OID karakterlánc.NAMESPACE_X500 -Ha ez a névtér meg van adva, a névkarakterlánc X.500 DN a DER-ben vagy szöveges kimeneti formátum.

Nézzük meg a következő példát az UUID3 és UUID5 generálására a különböző gazdagépnevek és névterek használatával.

Példa -

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

Kimenet:

 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 

2. példa: UUID 3 és UUID 5 létrehozása egy másik névtér használatával

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

Kimenet:

 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 

Az uuid3 és uuid5 viselkedése

  • Annak ellenére, hogy ugyanaz a névtér és ugyanaz a név hasonló, az UUID-k eltérő időpontokban jönnek létre.
  • Ugyanabban a névtérben két különböző névtér különbözik, ez generálja az egyedi azonosítókat.

Példa - 3

scan.next java
 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')) 

Kimenet:

 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 

Hogyan lehet átalakítani a karakterláncot UUID-re és az UUID-t karakterláncra a Pythonban?

A uuid.uuid1() metódus az UUID osztály példányát adja vissza. Az UUID karakterlánc-ábrázolását a str() módszer. A megfelelő karakterlánc-formátum összehasonlításra vagy manipulációra használható. Értsük meg a következő példát.

Példa -

 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) 

Kimenet:

 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 

Most létrehozzuk az UUID-t a Stringből.

Néha az UUID-t karakterlánc formátumban kapjuk meg. És az alkalmazásunknak konvertálnia kell az UUID osztálypéldányba egyes alkalmazásokhoz. Nézzük meg a következő példát a karakterlánc-formátumú UUID konvertálására.

Példa -

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

Kimenet:

képek központosítása css-ben
 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 

Példa - 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) 

Kimenet:

 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 

Reprodukálható UUID-k létrehozása

Mint korábban említettük, az UUID-nek számos attribútuma van. Ugyanazt az UUID-t használhatjuk bármelyik attribútumával. Használni a uuid modul , ugyanazt generálhatjuk uuid bármikor a magérték használatával. Az alapérték felhasználható ugyanazon UUID generálására is. Értsük meg mindkét fogalmat.

A következő bemenetek használhatók UUID-példány létrehozására.

  • Húr
  • Bájtok
  • Bytes_le
  • Mezők
  • int

A fenti értékek bármelyikével előállítható az UUID. Lássuk a következő példát, ahol ugyanannak az UUID-nek az összes értékét használjuk.

Példa -

 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) 

Kimenet:

 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 

Az UUID reprodukálása maggal

Ahogy a neve is sugallja, a Faker modul hamis adatokat generál számunkra. A faker modult használva ugyanazt az UUID-t ismételten generáltuk. Értsük meg a következő példát.

Példa -

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

Kimenet:

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

Következtetés

Ebben az oktatóanyagban részletesen tárgyaltuk az uuid modult, és megértettük, hogyan hozhatjuk létre a különböző UUID-ket. Az UUID-k segítenek meghatározni az alkalmazás/adatbázis egyediségét, valamint segítenek meghatározni a dokumentumok, gazdagépek, alkalmazások, ügyfelek és egyéb helyzetek azonosítóit.