У овом водичу ћемо разговарати о томе како да генеришемо УУИД у Питхон-у користећи модул ууид. Пре него што уђемо у ову тему, хајде да разумемо основни концепт УУИД-а.
Увод
УУИД је назив скраћеница од универзално јединствени идентификатори познат и као ГУИД, односно глобално јединствени идентификатор. То је 128 бита дугачак ИД број за јединствено дефинисање докумената, корисника, ресурса или информација. Постоје различите верзије УУИД-а; о свима ћемо разговарати у наредном одељку.
- УУИД се користи за дефинисање јединствених идентификатора у простору и времену. Простор и време значе да када се УУИД генерише у складу са стандардом, идентификатори не могу да дуплирају постојеће ресурсе.
- УУИД је најпогоднија опција када се захтева јединственост.
- Он игра суштинску улогу у криптографији и примени хеширања.
Када користити УУИД
УУИД модул се може користити у следећим сценаријима.
У веб апликацији -
- УУИД нам помаже да управљамо стањем генерисањем јединствени ИД сесије.
- Генерално, користимо вредности аутоматског повећања за генерисање корисничких ИД-ова. То је прилично директан приступ и лако га је погодити. Међутим, УУИД-ове је тешко погодити јер се не креирају узастопно.
У систему базе података
јава ретурн низ
- Пружа значајну предност у бази података јер је УУИД независан од окружења. То значи да можемо да креирамо УУИД на било којој машини користећи било коју апликацију.
- Већина апликација зависи од сервера базе података да генерише јединствени или примарни кључ. УУИД је добра опција за генерисање јединственог кључа базе података који нам помаже да променимо приступ генерисања кључева у бази података.
- УУИД је стварна вредност, а не псеудо вредност као број у СКЛ табели.
Питхон ууид модул
Питхон ууид модул је имплементиран према РФЦ 4122, стандарду и ауторским правима © интернет друштва. Уз помоћ Питхон УУИД модула, можемо генерисати УУИД-ове у различитим типовима као што су УУИД-ови верзије 1, 3, 4 и 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.
Хајде да разложимо горња поља УУИД-ова
Хајде да разумемо још један пример генерисања УУИД-а у различитим форматима као што су бајтови, инт и хексадецимални.
Пример - 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().
поравнајте слику са цсс-ом
Хајде да разумемо следећи пример за генерисање УУИД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
Закључак
У овом туторијалу, детаљно смо разговарали о модулу ууид и разумели како можемо да генеришемо различите УУИД-ове. УУИД-ови нам помажу да дефинишемо јединственост у апликацији/бази података и такође помажу да дефинишемо идентификаторе за документе, хостове, апликацију, клијенте и друге ситуације.