logo

Kā ģenerēt UUID programmā Python

Šajā apmācībā mēs apspriedīsim, kā Python ģenerēt UUID, izmantojot uuid moduli. Pirms iedziļināties šajā tēmā, sapratīsim UUID pamatjēdzienu.

Ievads

UUID ir nosaukuma saīsinājums universāli unikāli identifikatori pazīstams arī kā GUID, t.i., globāli unikālais identifikators. Tas ir 128 bitus garš ID numurs, lai unikāli definētu dokumentus, lietotājus, resursus vai informāciju. Ir dažādas UUID versijas; mēs tos visus apspriedīsim nākamajā sadaļā.

  • UUID tiek izmantots, lai definētu unikālus identifikatorus telpā un laikā. Telpa un laiks nozīmē, ka pēc UUID ģenerēšanas saskaņā ar standartu identifikatori nevar dublēt esošos resursus.
  • UUID ir vispiemērotākā iespēja, ja nepieciešama unikalitāte.
  • Tam ir būtiska loma kriptogrāfijā un jaukšanas lietojumprogrammās.

Kad lietot UUID

UUID moduli var izmantot šādos gadījumos.

Tīmekļa lietojumprogrammā -

  • UUID palīdz mums pārvaldīt stāvokli, ģenerējot unikāls sesijas ID.
  • Parasti mēs izmantojam automātiskās pieauguma vērtības, lai ģenerētu lietotāju ID. Tā ir diezgan vienkārša pieeja, un to ir viegli uzminēt. Tomēr UUID ir grūti uzminēt, jo tie netiek izveidoti secīgi.

Datu bāzes sistēmā

java krāsu kodi
  • Tas nodrošina ievērojamas priekšrocības datu bāzē, jo UUID ir neatkarīgs no vides. Tas nozīmē, ka mēs varam izveidot UUID jebkurā mašīnā, izmantojot jebkuru lietojumprogrammu.
  • Lielākā daļa lietojumprogrammu ir atkarīgas no datu bāzes servera, lai ģenerētu unikālo vai primāro atslēgu. UUID ir laba iespēja ģenerēt unikālu datu bāzes atslēgu, kas palīdz mums mainīt atslēgu ģenerēšanas pieeju datu bāzē.
  • UUID ir reāla vērtība, nevis pseidovērtība, piemēram, skaitlis SQL tabulā.

Python uuid modulis

Python uuid modulis ir ieviests saskaņā ar RFC 4122, standartu un interneta sabiedrības autortiesībām ©. Ar Python UUID moduļa palīdzību mēs varam ģenerēt dažāda veida UUID, piemēram, 1., 3., 4. un 5. versiju UUID. Python modulis atbalsta šādas UUID versijas.

    UUID1 -Tas ģenerē unikālo numuru, izmantojot MAC adresi un pašreizējā laika komponentu.UUID4 —Tas izmanto pseidogadījuma skaitļu ģeneratorus, lai ģenerētu UUID, un šāda veida UUID ir labi izmantot drošības nolūkos.UUID3 un UUID5 —Tas izmanto kriptogrāfisku jaukšanu un lietojumprogrammas nodrošinātas teksta virknes, lai ģenerētu UUID.

Ģenerējiet UUID, izmantojot Python UUID moduli

Ģenerēsim dažādu versiju UUID, izmantojot Python uuid moduli.

Izmantojot uuid1() - Lai ģenerētu uuid, mums ir jāimportē uuid modulis un pēc tam jāizsauc uuid1() metode. Sapratīsim šādu piemēru.

Piemērs - 1

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

Izvade:

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

UUID struktūra

Kā redzam, iepriekš minētajā UUID ir pieci komponenti un katram komponentam ir vienāds garums. UUID struktūra ir formātā '8-4-4-4-12'.

UUID virknes attēlojums ir norādīts tālāk -

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

Sadalīsim iepriekš minētos UUID laukus

    time_low -Tie ir pirmie 32 id biti.time_mid -Tie ir nākamie 16 ID biti.time_high_and_version —Tie ir nākamie 16 ID biti.clock_seq_hi_variant :Tie ir nākamie 8 ID biti.clock_seq_low:Tie ir nākamie 8 ID biti.mezgls:Tie ir pēdējie 48 ID biti.laiks :Tas ir laika komponenta lauks ID.clock_seq:Tas ir 14 bitu kārtas numurs.

Sapratīsim vēl vienu piemēru UUID ģenerēšanai dažādos formātos, piemēram, baitos, int un hex.

Piemērs — 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) 

Izvade:

pawandeep rajan
 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 

UUID1 trūkumi

UUID1 ir saistīts ar datora MAC adresi un tādējādi var apdraudēt privātumu. Tomēr tas nodrošina pilnīgu unikalitāti.

2. metode: izmantojiet uuid4()

Šī metode ģenerē nejaušus skaitļus, garantējot konfidencialitāti. Sapratīsim šādu piemēru.

Piemērs -

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

Izvade:

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

uuid1() pret uuid4

The uuid1() nodrošina pārliecību, ka netiks izraisīta sadursme. Mēs varam izveidot UUID dublikātus, izveidojot vairāk nekā 16384 uuid1 mazāk nekā 100 ns. Tas negarantē privātuma drošību. The uuid1() nav ieteicams, ja nevēlaties redzēt savas iekārtas MAC adreses.

js komplekts

Metode uuid4 () ģenerē nejaušu UUID, izmantojot kriptogrāfiski ģenerētus drošo numuru ģeneratorus. Tas ģenerē drošākus UUID. Tas ir ieteicams, ja UUID ir jāģenerē atsevišķās iekārtās.

UUID 3 un UUID 5, lai izveidotu uz nosaukumiem balstītu UUID

Uz nosaukumu balstīts UUID nozīmē, ka mēs varam ģenerēt UUID, izmantojot 3. vai 5. UUID versiju.

Mēs varam izmantot nosaukumus un nosaukumvietas, lai izveidotu unikālu UUID sēriju. Versijā 3 un 5 ir jaukta nosaukumvietas identifikators ar nosaukumu.

The uuid3() metode ģenerē UUID, kas balstās uz nosaukumvietas identifikatora MD5 hash un virkni. No otras puses, metode uuid5() ģenerē UUID, pamatojoties uz nosaukumvietas identifikatora SHA-1 jaukšanas paņēmienu.

Tālāk ir norādīti nosaukumvietu identifikatori, ko definē uuid3() vai uuid5().

    NAMESPACE_DNS —Tas ir tradicionāls domēna vārds. Piemēram, https://javatpoint.com.NAMESPACE_URL —Tas apzīmē URL.NAMESPACE_OID —Šī nosaukumvieta ir norādīta virknē ISO OID.NAMESPACE_X500 —Kad šī nosaukumvieta ir norādīta, nosaukuma virkne ir X.500 DN DER vai teksta izvades formāts.

Sapratīsim šo piemēru, lai ģenerētu UUID3 un UUID5, izmantojot dažādus resursdatora nosaukumus un nosaukumvietu.

Piemērs -

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

Izvade:

sākas ar java
 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. piemērs: ģenerējiet UUID 3 un UUID 5, izmantojot citu nosaukumvietu

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

Izvade:

 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 

uuid3 un uuid5 uzvedība

  • Neskatoties uz to, ka viena un tā pati nosaukumvieta un nosaukums ir līdzīgi, UUID tiek ģenerēti dažādos laikos.
  • Divas dažādas nosaukumvietas vienā nosaukumvietā atšķiras, tā ģenerē unikālos ID.

Piemērs - 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')) 

Izvade:

 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 

Kā Python pārvērst virkni par UUID un UUID par virkni?

The uuid.uuid1() metode atgriež UUID klases gadījumu. Mēs varam iegūt UUID virknes attēlojumu, izmantojot str() metodi. Atbilstošo virknes formātu var izmantot salīdzināšanai vai manipulācijām. Sapratīsim šādu piemēru.

Piemērs -

 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) 

Izvade:

 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 

Tagad mēs izveidosim UUID no virknes.

Dažreiz mēs saņemam UUID virknes formātā. Un mūsu lietojumprogrammai tas ir jāpārvērš UUID klases instancē dažām lietojumprogrammām. Sapratīsim šo piemēru, lai pārvērstu virknes formatētu UUID.

Piemērs -

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

Izvade:

kas ir lietotājvārds
 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 

Piemērs — 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) 

Izvade:

 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 

Ģenerējiet reproducējamus UUID

Kā jau minējām iepriekš, UUID ir dažādi atribūti. Mēs varam izmantot to pašu UUID, izmantojot jebkuru no tā atribūtiem. Izmantojot uuid modulis , mēs varam ģenerēt to pašu uuid jebkurā laikā, izmantojot sēklas vērtību. Sēklas vērtību var izmantot arī tā paša UUID ģenerēšanai. Sapratīsim abus jēdzienus.

Lai izveidotu UUID gadījumu, var izmantot šādas ievades.

  • Stīga
  • Baiti
  • Bytes_le
  • Lauki
  • starpt

Izmantojot jebkuru no iepriekš minētajām vērtībām, var ģenerēt UUID. Apskatīsim šādu piemēru, kur mēs izmantojam visas šīs viena un tā paša UUID vērtības.

Piemērs -

 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) 

Izvade:

 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 

Reproducēt UUID ar sēklām

Kā norāda tā nosaukums, Faker modulis ģenerē mums viltotus datus. Mēs esam izmantojuši viltus moduli, lai atkārtoti ģenerētu vienu un to pašu UUID. Sapratīsim šādu piemēru.

Piemērs -

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

Izvade:

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

Secinājums

Šajā apmācībā mēs esam detalizēti apsprieduši uuid moduli un sapratuši, kā mēs varam ģenerēt dažādus UUID. UUID palīdz mums definēt lietojumprogrammas/datu bāzes unikalitāti, kā arī palīdz definēt identifikatorus dokumentiem, resursdatoriem, lietojumprogrammām, klientiem un citām situācijām.