logo

Hur man genererar UUID i Python

I den här handledningen kommer vi att diskutera hur man genererar UUID i Python med hjälp av modulen uuid. Innan vi dyker in i det här ämnet, låt oss förstå det grundläggande konceptet för UUID.

Introduktion

UUID är ett förkortningsnamn för universellt unika identifierare även känd som GUID, det vill säga Globally Unique Identifier. Det är ett 128 bitar långt ID-nummer för att unikt definiera dokument, användare, resurser eller information. Det finns olika versioner av UUID; vi kommer att diskutera dem alla i det kommande avsnittet.

  • UUID används för att definiera unika identifierare över rum och tid. Utrymme och tid innebär att när UUID har genererats enligt standarden kan identifierare inte dupliceras befintliga resurser.
  • UUID är det lämpligaste alternativet när unikhet krävs.
  • Det spelar en viktig roll i kryptografi och hashapplikationer.

När ska man använda UUID

UUID-modulen kan användas i följande scenarier.

I webbapplikation -

  • UUID hjälper oss att hantera staten genom att generera ett unikt sessions-id.
  • I allmänhet använder vi värdena för automatisk ökning för att generera användar-ID. Det är ett ganska okomplicerat tillvägagångssätt och lätt att gissa. UUID är dock svåra att gissa eftersom de inte skapas i följd.

I databassystem

sortering tuplar python
  • Det ger en betydande fördel i databasen eftersom UUID är miljöoberoende. Det betyder att vi kan skapa ett UUID på vilken maskin som helst med vilken applikation som helst.
  • De flesta applikationer är beroende av databasservern för att generera den unika eller primära nyckeln. UUID är ett bra alternativ för att generera en unik databasnyckel som hjälper oss att ändra nyckelgenereringsmetoden i databasen.
  • UUID är ett verkligt värde, inte ett pseudovärde som ett tal i en SQL-tabell.

Python uuid-modul

Python uuid-modulen är implementerad enligt RFC 4122, en standard och Copyright © för internetsamhället. Med hjälp av Python UUID-modulen kan vi generera UUID i olika typer såsom 1, 3, 4 och 5 version UUID. Python-modulen stöder följande versioner av UUID.

    UUID1 -Den genererar det unika numret med hjälp av MAC-adressen och aktuell tidskomponent.UUID4 -Den använder pseudo-slumptalsgeneratorer för att generera UUID, och sådana typer UUID är bra att använda för säkerhetsändamål.UUID3 och UUID5 -Den använder kryptografisk hashning och applikationsförsedda textsträngar för att generera UUID.

Generera UUID med Python UUID Module

Låt oss generera UUID för olika versioner med Python uuid-modulen.

Använder uuid1() - För att generera uuid måste vi importera uuid-modulen och sedan anropa metoden uuid1(). Låt oss förstå följande exempel.

Exempel - 1

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

Produktion:

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

UUID:s struktur

Som vi kan se att det finns fem komponenter i ovanstående UUID och varje komponent har samma längd. Strukturen för UUID är i formatet '8-4-4-4-12'.

UUID-strängrepresentationen ges nedan -

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

Låt oss dela upp ovanstående fält av UUID

ladda ner youtube-videor på vlc
    time_low -Det är de första 32 bitarna av id.time_mid -Det är nästa 16 bitar av id.time_high_and_version -Det är nästa 16 bitar av id.clock_seq_hi_variant :Det är nästa 8 bitar av id.clock_seq_low :Det är nästa 8 bitar av id.nod:Det är de sista 48 bitarna av id.tid:Det är ett tidskomponentfält för id.clock_seq :Det är ett 14 bitars sekvensnummer.

Låt oss förstå ett annat exempel på att generera UUID i olika format som bytes, int och hex.

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

Produktion:

 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 

Nackdelar med UUID1

UUID1 är associerad med datorns MAC-adress och kan därför vara ett hot mot integriteten. Det ger dock fullständig unikhet.

Metod 2: använder uuid4()

Denna metod genererar de slumpmässiga siffrorna med garanti för säker integritet. Låt oss förstå följande exempel.

Exempel -

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

Produktion:

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

uuid1() vs uuid4

De uuid1() ger försäkran att inte orsaka någon kollision. Vi kan skapa dubbletter av UUID genom att skapa fler än 16384 uuid1 på mindre än 100ns. Det ger ingen garanti för säker integritet. De uuid1() rekommenderas inte om du inte vill se din maskins MAC-adresser.

Metoden uuid4() genererar slumpmässigt UUID genom att använda kryptografiskt genererade säkra nummergeneratorer. Det genererar säkrare UUID. Det rekommenderas när UUID kräver generering på separata maskiner.

UUID 3 och UUID 5 för att skapa ett namnbaserat UUID

Det namnbaserade UUID betyder att vi kan generera UUID med version 3 eller 5 UUID.

Vi kan använda namn och namnutrymmen för att skapa en serie unika UUID. Version 3 och 5 hashas namnområdesidentifierare med ett namn.

De uuid3() metoden genererar ett UUID som är baserat på MD5-hash för namnområdesidentifierare och en sträng. Å andra sidan genererar metoden uuid5() UUID baserat på SHA-1-hashningstekniken för en namnområdesidentifierare.

Nedan finns namnutrymmesidentifierare som definieras av uuid3() eller uuid5().

    NAMESPACE_DNS -Det representerar ett traditionellt domännamn. Till exempel https://javatpoint.com.NAMESPACE_URL -Det representerar en URL.NAMESPACE_OID -Detta namnutrymme är specificerat strängen ISO OID.NAMESPACE_X500 -När detta namnområde anges är namnsträngen en X.500 DN i DER eller ett textutdataformat.

Låt oss förstå följande exempel för att generera UUID3 och UUID5 med de olika värdnamnen och namnrymden.

Exempel -

sökmotor och exempel
 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() 

Produktion:

 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 

Exempel - 2: Generera UUID 3 och UUID 5 med ett annat namnområde

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

Produktion:

 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 

Beteendet för uuid3 och uuid5

  • Trots att samma namnutrymme och samma namn liknar varandra, genereras UUID vid olika tidpunkter.
  • Två olika namnutrymmen i samma namnområde är olika, det genererar de unika Id:n.

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

Produktion:

 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 

Hur konverterar man sträng till UUID och UUID till sträng i Python?

De uuid.uuid1() metod returnerar instansen av UUID-klassen. Vi kan få strängrepresentation av UUID med hjälp av str() metod. Motsvarande strängformat kan användas i jämförelse eller manipulation. Låt oss förstå följande exempel.

Exempel -

 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) 

Produktion:

 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 kommer vi att skapa UUID från String.

Ibland får vi UUID i strängformat. Och vår applikation måste konvertera den i UUID-klassens instans för vissa applikationer. Låt oss förstå följande exempel för att konvertera strängformaterad UUID.

iskcon full form

Exempel -

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

Produktion:

js base64 avkoda
 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 

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

Produktion:

 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 

Generera reproducerbara UUID

Som vi nämnde tidigare har UUID olika attribut. Vi kan använda samma UUID med vilket som helst av dess attribut. Använda uuid modul , vi kan generera detsamma uuid när som helst genom att använda frövärdet. Frövärdet kan också användas för att generera samma UUID. Låt oss förstå båda begreppen.

Följande ingångar kan användas för att skapa UUID-instanser.

  • Sträng
  • Bytes
  • Bytes_le
  • Fält
  • int

Genom att använda något av ovanstående värden kan UUID genereras. Låt oss se följande exempel där vi använder alla dessa värden av samma UUID.

Exempel -

 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) 

Produktion:

 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 

Reproducera UUID med frö

Som namnet antyder genererar Faker-modulen falska data åt oss. Vi har använt faker-modulen för att generera samma UUID upprepade gånger. Låt oss förstå följande exempel.

Exempel -

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

Produktion:

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

Slutsats

I den här handledningen har vi diskuterat uuid-modulen i detalj och förstår hur vi kan generera de olika UUID:erna. UUID hjälper oss att definiera det unika i applikationen/databasen och hjälper oss också att definiera identifierare för dokument, värdar, applikationer, klienter och andra situationer.