logo

Како генерисати УУИД у Питхон-у

У овом водичу ћемо разговарати о томе како да генеришемо УУИД у Питхон-у користећи модул ууид. Пре него што уђемо у ову тему, хајде да разумемо основни концепт УУИД-а.

Увод

УУИД је назив скраћеница од универзално јединствени идентификатори познат и као ГУИД, односно глобално јединствени идентификатор. То је 128 бита дугачак ИД број за јединствено дефинисање докумената, корисника, ресурса или информација. Постоје различите верзије УУИД-а; о свима ћемо разговарати у наредном одељку.

  • УУИД се користи за дефинисање јединствених идентификатора у простору и времену. Простор и време значе да када се УУИД генерише у складу са стандардом, идентификатори не могу да дуплирају постојеће ресурсе.
  • УУИД је најпогоднија опција када се захтева јединственост.
  • Он игра суштинску улогу у криптографији и примени хеширања.

Када користити УУИД

УУИД модул се може користити у следећим сценаријима.

У веб апликацији -

  • УУИД нам помаже да управљамо стањем генерисањем јединствени ИД сесије.
  • Генерално, користимо вредности аутоматског повећања за генерисање корисничких ИД-ова. То је прилично директан приступ и лако га је погодити. Међутим, УУИД-ове је тешко погодити јер се не креирају узастопно.

У систему базе података

јава ретурн низ
  • Пружа значајну предност у бази података јер је УУИД независан од окружења. То значи да можемо да креирамо УУИД на било којој машини користећи било коју апликацију.
  • Већина апликација зависи од сервера базе података да генерише јединствени или примарни кључ. УУИД је добра опција за генерисање јединственог кључа базе података који нам помаже да променимо приступ генерисања кључева у бази података.
  • УУИД је стварна вредност, а не псеудо вредност као број у СКЛ табели.

Питхон ууид модул

Питхон ууид модул је имплементиран према РФЦ 4122, стандарду и ауторским правима © интернет друштва. Уз помоћ Питхон УУИД модула, можемо генерисати УУИД-ове у различитим типовима као што су УУИД-ови верзије 1, 3, 4 и 5. Питхон модул подржава следеће верзије УУИД-а.

    УУИД1 -Генерише јединствени број користећи МАЦ адресу и компоненту тренутног времена.УУИД4 -Користи генераторе псеудо-случајних бројева за генерисање УУИД-ова, а такве типове УУИД-ова је добро користити у безбедносне сврхе.УУИД3 и УУИД5 -Користи криптографско хеширање и текстуалне низове које даје апликација за генерисање УУИД-а.

Генеришите УУИД користећи Питхон УУИД модул

Хајде да генеришемо УУИД-ове различитих верзија користећи Питхон ууид модул.

Коришћење ууид1() - Да бисмо генерисали ууид, морамо увести модул ууид, а затим позвати методу ууид1(). Хајде да разумемо следећи пример.

Пример - 1

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

Излаз:

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

Структура УУИД-а

Као што видимо да постоји пет компоненти у горњем УУИД-у и свака компонента има исту дужину. Структура УУИД-а је у формату '8-4-4-4-12'.

ин.нект јава

УУИД стринг представљање је дато у наставку -

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

Хајде да разложимо горња поља УУИД-ова

    тиме_лов -То је прва 32 бита ИД-а.време_средина -То је следећих 16 битова ИД-а.тиме_хигх_анд_версион -То је следећих 16 битова ИД-а.цлоцк_сек_хи_вариант :То је следећих 8 битова ИД-а.цлоцк_сек_лов :То је следећих 8 битова ИД-а.чвор:То је последњих 48 битова ИД-а.време :То је поље временске компоненте ид.цлоцк_сек :То је 14-битни редни број.

Хајде да разумемо још један пример генерисања УУИД-а у различитим форматима као што су бајтови, инт и хексадецимални.

Пример - 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) 

Излаз:

 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 

Недостаци УУИД1

УУИД1 је повезан са МАЦ адресом рачунара и стога може представљати претњу приватности. Међутим, пружа потпуну јединственост.

Метод 2: коришћење ууид4()

Овај метод генерише насумичне бројеве са гаранцијом за сигурност приватности. Хајде да разумемо следећи пример.

Пример -

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

Излаз:

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

ууид1() против ууид4

Тхе ууид1() пружа гаранцију да неће изазвати никакав судар. Можемо да направимо дупликате УУИД-ова креирањем више од 16384 ууид1 за мање од 100нс. Не пружа гаранцију за заштиту приватности. Тхе ууид1() се не препоручује ако не желите да видите МАЦ адресе своје машине.

Метод ууид4() генерише насумични УУИД коришћењем криптографски генерисаних генератора сигурних бројева. Генерише сигурније УУИД-ове. Препоручује се када УУИД-ови захтевају генерисање на одвојеним машинама.

УУИД 3 и УУИД 5 за креирање УУИД-а заснованог на имену

УУИД заснован на имену значи да можемо да генеришемо УУИД користећи верзију 3 или 5 УУИД.

Можемо да користимо имена и просторе имена за креирање серије јединствених УУИД-ова. Верзије 3 и 5 хеширају идентификатор простора имена са именом.

Тхе ууид3() метода генерише УУИД који се заснива на МД5 хешу идентификатора простора имена и стринга. С друге стране, метода ууид5() генерише УУИД на основу СХА-1 технике хеширања идентификатора простора имена.

Испод су идентификатори простора имена дефинисани помоћу ууид3() или ууид5().

поравнајте слику са цсс-ом
    НАМЕСПАЦЕ_ДНС -Представља традиционално име домена. На пример, хттпс://јаватпоинт.цом.НАМЕСПАЦЕ_УРЛ -Представља УРЛ.НАМЕСПАЦЕ_ОИД -Овај простор имена је специфициран низом ИСО ОИД.НАМЕСПАЦЕ_Кс500 -Када је овај простор имена специфициран, стринг имена је Кс.500 ДН у ДЕР или текстуални излазни формат.

Хајде да разумемо следећи пример за генерисање УУИД3 и УУИД5 помоћу различитих имена хоста и простора имена.

Пример -

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

Излаз:

 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: Генеришите УУИД 3 и УУИД 5 користећи другачији простор имена

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

Излаз:

 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 

Понашање ууид3 и ууид5

  • Упркос томе што су исти именски простор и исто име слични, УУИД-ови се генеришу у различито време.
  • Два различита именска простора у истом именском простору су различита, генерише јединствене ИД-ове.

Пример - 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')) 

Излаз:

 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 

Како претворити стринг у УУИД и УУИД у стринг у Питхон-у?

Тхе ууид.ууид1() метода враћа инстанцу УУИД класе. Можемо добити стринг репрезентацију УУИД-а користећи стр() методом. Одговарајући формат стринга се може користити у поређењу или манипулацији. Хајде да разумемо следећи пример.

јава како претворити стринг у инт

Пример -

 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) 

Излаз:

 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 

Сада ћемо креирати УУИД из Стринга.

Понекад добијамо УУИД у стринг формату. А наша апликација треба да је конвертује у инстанци класе УУИД за неке апликације. Хајде да разумемо следећи пример за конверзију УУИД формата у низу.

Пример -

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

Излаз:

колико градова у Сједињеним Америчким Државама
 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 

Пример - 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) 

Излаз:

 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 

Генеришите поновљиве УУИД-ове

Као што смо раније споменули, УУИД има различите атрибуте. Можемо користити исти УУИД користећи било који од његових атрибута. Помоћу ууид модул , можемо генерисати исто ууид било када користећи вредност семена. Сеед вредност се такође може користити за генерисање истог УУИД-а. Хајде да разумемо оба концепта.

Следећи улази се могу користити за креирање УУИД инстанце.

  • Низ
  • Битес
  • Битес_ле
  • Поља
  • инт

Користећи било коју од горе наведених вредности, УУИД се може генерисати. Хајде да видимо следећи пример где користимо све ове вредности истог УУИД-а.

Пример -

 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) 

Излаз:

 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 

Репродуцирајте УУИД са семеном

Као што му име говори, Факер модул генерише лажне податке за нас. Користили смо факер модул да генеришемо исти УУИД више пута. Хајде да разумемо следећи пример.

Пример -

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

Излаз:

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

Закључак

У овом туторијалу, детаљно смо разговарали о модулу ууид и разумели како можемо да генеришемо различите УУИД-ове. УУИД-ови нам помажу да дефинишемо јединственост у апликацији/бази података и такође помажу да дефинишемо идентификаторе за документе, хостове, апликацију, клијенте и друге ситуације.