logo

Как да генерирате UUID в Python

В този урок ще обсъдим как да генерираме UUID в Python с помощта на модула uuid. Преди да се потопим в тази тема, нека разберем основната концепция на UUID.

Въведение

UUID е съкращение от универсални уникални идентификатори известен също като GUID, т.е. глобално уникален идентификатор. Това е 128-битов идентификационен номер за еднозначно дефиниране на документи, потребители, ресурси или информация. Има различни версии на UUID; ще обсъдим всички тях в следващия раздел.

  • UUID се използва за дефиниране на уникални идентификатори в пространството и времето. Пространството и времето означават, че след като UUID бъде генериран съгласно стандарта, идентификаторите не могат да дублират съществуващи ресурси.
  • UUID е най-подходящата опция, когато се изисква уникалност.
  • Той играе съществена роля в криптографията и приложението за хеширане.

Кога да използвате UUID

UUID модулът може да се използва в следните сценарии.

В уеб приложение -

  • UUID ни помага да управляваме състоянието чрез генериране уникален идентификатор на сесия.
  • Обикновено използваме стойностите за автоматично нарастване, за да генерираме потребителски идентификатори. Това е доста ясен подход и лесен за отгатване. UUID обаче са трудни за отгатване, защото не се създават последователно.

В системата за бази данни

нарязване на масиви java
  • Той осигурява значително предимство в базата данни, тъй като UUID е независим от средата. Това означава, че можем да създадем UUID на всяка машина, използвайки всяко приложение.
  • Повечето приложения зависят от сървъра на базата данни за генериране на уникален или първичен ключ. UUID е добра опция за генериране на уникален ключ за база данни, който ни помага да променим подхода за генериране на ключове в базата данни.
  • UUID е реална стойност, а не псевдо стойност като число в SQL таблица.

Python uuid модул

Модулът uuid на Python е внедрен съгласно RFC 4122, стандарт и Copyright © на интернет обществото. С помощта на модула UUID на Python можем да генерираме UUID в различни типове като 1, 3, 4 и 5 версия UUID. Модулът 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 бита от id.time_mid -Това са следващите 16 бита от id.време_високо_и_версия -Това са следващите 16 бита идентификатор.clock_seq_hi_variant:Това са следващите 8 бита идентификатор.clock_seq_low:Това са следващите 8 бита идентификатор.възел:Това са последните 48 бита от id.време:Това е поле за времеви компонент на id.clock_seq:Това е 14-битов пореден номер.

Нека разберем друг пример за генериране на UUID в различни формати като байтове, 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

нулева проверка в java

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 ns. Той не предоставя гаранция за осигуряване на поверителност. The uuid1() не се препоръчва, ако не желаете да виждате MAC адресите на вашето устройство.

Методът uuid4() генерира случаен UUID чрез използване на криптографски генерирани генератори на сигурни номера. Той генерира по-сигурни UUID. Препоръчва се, когато UUID изискват генериране на отделни машини.

факториел в c

UUID 3 и UUID 5 за създаване на базиран на име UUID

Базираният на име UUID означава, че можем да генерираме UUID с помощта на версия 3 или 5 UUID.

Можем да използваме имена и пространства от имена, за да създадем поредица от уникални 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) 

Изход:

връщане на масив java
 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() 

Изход:

unordered_map c++
 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 ни помагат да дефинираме уникалността в приложението/базата данни и също така ни помагат да дефинираме идентификатори за документи, хостове, приложения, клиенти и други ситуации.