logo

Як згенерувати UUID на Python

У цьому посібнику ми обговоримо, як створити UUID у Python за допомогою модуля uuid. Перш ніж заглибитися в цю тему, давайте розберемося з основною концепцією UUID.

вступ

UUID — це абревіатура універсальні унікальні ідентифікатори також відомий як GUID, тобто глобально унікальний ідентифікатор. Це 128-бітний ідентифікаційний номер для унікального визначення документів, користувачів, ресурсів або інформації. Існують різні версії UUID; ми обговоримо їх усі в наступному розділі.

  • UUID використовується для визначення унікальних ідентифікаторів у просторі та часі. Простір і час означають, що як тільки UUID буде згенеровано відповідно до стандарту, ідентифікатори не можуть дублювати існуючі ресурси.
  • UUID є найбільш прийнятним варіантом, коли потрібна унікальність.
  • Він відіграє важливу роль у криптографії та застосуванні хешування.

Коли використовувати UUID

Модуль UUID можна використовувати в наведених нижче сценаріях.

У веб-додатку -

  • UUID допомагає нам керувати станом шляхом генерації унікальний ідентифікатор сеансу.
  • Зазвичай ми використовуємо значення автоматичного збільшення для створення ідентифікаторів користувачів. Це досить простий підхід, і його легко здогадатися. Однак UUID важко вгадати, оскільки вони не створюються послідовно.

У системі баз даних

groovy комп'ютерна мова
  • Це забезпечує значну перевагу в базі даних, оскільки UUID не залежить від середовища. Це означає, що ми можемо створити UUID на будь-якій машині за допомогою будь-якої програми.
  • Для створення унікального або первинного ключа більшість програм залежить від сервера бази даних. UUID — це хороший варіант для створення унікального ключа бази даних, який допомагає нам змінити підхід до створення ключів у базі даних.
  • UUID — це реальне значення, а не псевдозначення, як число в таблиці SQL.

Модуль uuid Python

Модуль uuid Python реалізовано згідно з RFC 4122, стандартом і авторським правом © Інтернет-спільноти. За допомогою модуля UUID Python ми можемо генерувати UUID різних типів, наприклад UUID версій 1, 3, 4 і 5. Модуль Python підтримує такі версії UUID.

    UUID1 -Він генерує унікальний номер, використовуючи MAC-адресу та компонент поточного часу.UUID4 -Він використовує генератори псевдовипадкових чисел для створення UUID, і такі типи UUID добре використовувати з метою безпеки.UUID3 і UUID5 -Для створення UUID він використовує криптографічне хешування та текстові рядки, надані програмою.

Згенеруйте UUID за допомогою модуля Python UUID

Давайте згенеруємо UUID різних версій за допомогою модуля uuid Python.

Використання uuid1() - Щоб згенерувати uuid, ми повинні імпортувати модуль uuid, а потім викликати метод uuid1(). Давайте розберемося в наступному прикладі.

Приклад - 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 

Структура UUID

Як ми бачимо, у наведеному вище UUID є п’ять компонентів, і кожен компонент має однакову довжину. Структура UUID має формат '8-4-4-4-12'.

Представлення рядка UUID наведено нижче -

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

Давайте розберемо наведені вище поля UUID

    time_low -Це перші 32 біти ідентифікатора.time_mid -Це наступні 16 біт ідентифікатора.time_high_and_version -Це наступні 16 біт ідентифікатора.clock_seq_hi_variant :Це наступні 8 біт ідентифікатора.clock_seq_low :Це наступні 8 біт ідентифікатора.вузол:Це останні 48 біт ідентифікатора.час:Це поле часової складової id.clock_seq :Це 14-бітний порядковий номер.

Давайте розберемо інший приклад генерації UUID у різних форматах, таких як bytes, int і hex.

Приклад - 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 

Недоліки UUID1

актриса Зінат Аман

UUID1 пов’язаний з MAC-адресою комп’ютера і, отже, може становити загрозу конфіденційності. Однак це забезпечує повну унікальність.

Спосіб 2: використання uuid4()

Цей метод генерує випадкові числа з гарантією конфіденційності. Давайте розберемося в наступному прикладі.

приклад -

 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 

uuid1() проти uuid4

The uuid1() гарантує відсутність зіткнень. Ми можемо створити дублікати UUID, створивши понад 16384 uuid1 менш ніж за 100 нс. Це не забезпечує гарантії конфіденційності. The uuid1() не рекомендується, якщо ви не бажаєте бачити MAC-адреси свого пристрою.

Метод uuid4() генерує випадковий UUID за допомогою криптографічно створених генераторів захищених чисел. Він створює більш безпечні UUID. Рекомендується, коли UUID потрібно генерувати на окремих машинах.

константи Java

UUID 3 і UUID 5 для створення UUID на основі імен

UUID на основі імені означає, що ми можемо генерувати UUID за допомогою UUID версії 3 або 5.

Ми можемо використовувати імена та простори імен для створення серії унікальних UUID. Версії 3 і 5 хешують ідентифікатор простору імен з назвою.

The uuid3() генерує UUID на основі хешу MD5 ідентифікатора простору імен і рядка. З іншого боку, метод uuid5() генерує UUID на основі техніки хешування SHA-1 ідентифікатора простору імен.

Нижче наведено ідентифікатори просторів імен, визначені uuid3() або uuid5().

    NAMESPACE_DNS -Це традиційне доменне ім'я. Наприклад, https://javatpoint.com.NAMESPACE_URL -Він представляє URL-адресу.NAMESPACE_OID -Цей простір імен визначається рядком ISO OID.NAMESPACE_X500 -Якщо вказано цей простір імен, рядок імені є X.500 DN у DER або текстовому форматі виводу.

Давайте розберемо наступний приклад для генерації UUID3 і UUID5 з використанням різних імен хостів і просторів імен.

приклад -

 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: Створіть UUID 3 та UUID 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 

Поведінка uuid3 і uuid5

  • Незважаючи на те, що той самий простір імен і ім’я подібні, UUID згенеровані в різний час.
  • Два різних простори імен в одному просторі імен відрізняються, це генерує унікальні ідентифікатори.

Приклад - 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 

Як перетворити рядок на UUID і UUID на рядок у Python?

The uuid.uuid1() метод повертає екземпляр класу UUID. Ми можемо отримати рядкове представлення UUID за допомогою str() метод. Відповідний формат рядка можна використовувати для порівняння або маніпуляції. Давайте розберемося в наступному прикладі.

приклад -

 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) 

Вихід:

комбінації клавіш linux
 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 

Тепер ми створимо UUID з String.

Іноді ми отримуємо UUID у форматі рядка. І нашій програмі потрібно перетворити його в екземпляр класу UUID для деяких програм. Розглянемо наступний приклад перетворення UUID у форматі рядка.

приклад -

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

Вихід:

оператори javascript
 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 

Створення відтворюваних UUID

Як ми згадували раніше, UUID має різні атрибути. Ми можемо використовувати той самий UUID, використовуючи будь-які його атрибути. Використовуючи модуль uuid , ми можемо створити те саме uuid у будь-який час, використовуючи початкове значення. Початкове значення також можна використовувати для створення того самого UUID. Давайте розберемося в обох поняттях.

Наступні вхідні дані можна використовувати для створення екземпляра UUID.

  • Рядок
  • Байти
  • Bytes_le
  • поля
  • внутр

UUID можна створити за допомогою будь-якого з наведених вище значень. Давайте розглянемо наступний приклад, де ми використовуємо всі ці значення одного UUID.

приклад -

 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 

Відтворити UUID за допомогою початкового числа

Як випливає з назви, модуль Faker створює для нас підроблені дані. Ми неодноразово використовували модуль faker для створення того самого UUID. Давайте розберемося в наступному прикладі.

приклад -

 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 

Висновок

У цьому посібнику ми детально обговорили модуль uuid і зрозуміли, як ми можемо генерувати різні UUID. UUID допомагають нам визначити унікальність програми/бази даних, а також допомагають визначити ідентифікатори для документів, хостів, програм, клієнтів та інших ситуацій.