logo

Jak wygenerować UUID w Pythonie

W tym samouczku omówimy, jak wygenerować UUID w Pythonie za pomocą modułu uuid. Zanim zagłębimy się w ten temat, przyjrzyjmy się podstawowej koncepcji UUID.

Wstęp

UUID to skrót od uniwersalne, unikalne identyfikatory znany również jako GUID, tj. globalnie unikalny identyfikator. Jest to 128-bitowy numer identyfikacyjny, który jednoznacznie definiuje dokumenty, użytkowników, zasoby lub informacje. Istnieją różne wersje identyfikatorów UUID; omówimy je wszystkie w nadchodzącej sekcji.

  • UUID służy do definiowania unikalnych identyfikatorów w przestrzeni i czasie. Przestrzeń i czas powodują, że po wygenerowaniu UUID zgodnie ze standardem identyfikatory nie mogą duplikować istniejących zasobów.
  • UUID jest najodpowiedniejszą opcją, gdy wymagana jest unikalność.
  • Odgrywa zasadniczą rolę w zastosowaniach kryptograficznych i haszujących.

Kiedy używać UUID

Modułu UUID można użyć w następujących scenariuszach.

W aplikacji internetowej —

  • UUID pomaga nam zarządzać stanem poprzez generowanie unikalny identyfikator sesji.
  • Ogólnie rzecz biorąc, używamy wartości automatycznego zwiększania do generowania identyfikatorów użytkowników. Jest to dość proste podejście i łatwe do odgadnięcia. Jednak identyfikatory UUID są trudne do odgadnięcia, ponieważ nie są tworzone kolejno.

W systemie baz danych

skaner skanuj Java
  • Zapewnia znaczną przewagę w bazie danych, ponieważ UUID jest niezależny od środowiska. Oznacza to, że możemy utworzyć identyfikator UUID na dowolnym komputerze przy użyciu dowolnej aplikacji.
  • Większość aplikacji polega na generowaniu klucza unikalnego lub podstawowego przez serwer bazy danych. UUID to dobra opcja do wygenerowania unikalnego klucza bazy danych, co pomaga nam zmienić podejście do generowania kluczy w bazie danych.
  • UUID to wartość rzeczywista, a nie pseudowartość, jak liczba w tabeli SQL.

Moduł uuid Pythona

Moduł uuid Pythona jest zaimplementowany zgodnie z RFC 4122, standardem i prawem autorskim © społeczeństwa internetowego. Za pomocą modułu Python UUID możemy generować identyfikatory UUID różnych typów, takie jak identyfikatory UUID w wersji 1, 3, 4 i 5. Moduł Python obsługuje następujące wersje identyfikatora UUID.

    UUID1 -Generuje unikalny numer na podstawie adresu MAC i składnika bieżącego czasu.UUID4 -Wykorzystuje generatory liczb pseudolosowych do generowania identyfikatorów UUID, a tego typu identyfikatory UUID są dobre w użyciu ze względów bezpieczeństwa.UUID3 i UUID5 -Do generowania UUID wykorzystuje szyfrowanie kryptograficzne i ciągi tekstowe dostarczane przez aplikację.

Wygeneruj UUID za pomocą modułu UUID Pythona

Wygenerujmy identyfikatory UUID różnych wersji za pomocą modułu uuid Pythona.

Używanie uuid1() - Aby wygenerować uuid, musimy zaimportować moduł uuid, a następnie wywołać metodę uuid1(). Rozumiemy następujący przykład.

Przykład 1

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

Wyjście:

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

Struktura UUID

Jak widzimy, w powyższym identyfikatorze UUID znajduje się pięć komponentów, a każdy komponent ma tę samą długość. Struktura UUID ma format „8-4-4-4-12”.

Poniżej podano reprezentację ciągu UUID -

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

Podzielmy powyższe pola identyfikatorów UUID

    czas_niski -Jest to pierwsze 32 bity identyfikatora.środek czasu -To kolejne 16 bitów identyfikatora.czas_wysoki_i_wersja -Jest to kolejnych 16 bitów identyfikatora.clock_seq_hi_variant :Jest to kolejne 8 bitów identyfikatora.clock_seq_low :Jest to kolejne 8 bitów identyfikatora.węzeł:Jest to ostatnie 48 bitów identyfikatora.czas :Jest to pole składnika czasu identyfikatora.zegar_sekw.:Jest to 14-bitowy numer sekwencyjny.

Rozważmy inny przykład generowania identyfikatora UUID w różnych formatach, takich jak bajty, int i hex.

Przykład - 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) 

Wyjście:

 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 

Wady UUID1

UUID1 jest powiązany z adresem MAC komputera i dlatego może stanowić zagrożenie dla prywatności. Zapewnia jednak pełną wyjątkowość.

Metoda 2: użycie uuid4()

mysql wstaw do

Ta metoda generuje liczby losowe z gwarancją ochrony prywatności. Rozumiemy następujący przykład.

Przykład -

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

Wyjście:

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

uuid1() kontra uuid4

The uuid1() zapewnia, że ​​nie dojdzie do żadnej kolizji. Możemy utworzyć duplikaty identyfikatorów UUID, tworząc ponad 16384 uuid1 w czasie krótszym niż 100 ns. Nie gwarantuje ochrony prywatności. The uuid1() nie jest zalecane, jeśli nie chcesz widzieć adresów MAC swojego urządzenia.

Metoda uuid4() generuje losowy identyfikator UUID przy użyciu kryptograficznie generowanych generatorów bezpiecznych liczb. Generuje bezpieczniejsze identyfikatory UUID. Jest to zalecane, gdy identyfikatory UUID wymagają wygenerowania na oddzielnych komputerach.

UUID 3 i UUID 5, aby utworzyć identyfikator UUID oparty na nazwie

UUID oparty na nazwie oznacza, że ​​możemy generować identyfikatory UUID przy użyciu identyfikatora UUID w wersji 3 lub 5.

Możemy używać nazw i przestrzeni nazw, aby utworzyć serię unikalnych identyfikatorów UUID. Wersje 3 i 5 mieszają identyfikator przestrzeni nazw z nazwą.

Algorytm sortowania sterty

The uuid3() Metoda generuje identyfikator UUID na podstawie skrótu MD5 identyfikatora przestrzeni nazw i ciągu znaków. Z drugiej strony metoda uuid5() generuje UUID w oparciu o technikę mieszania SHA-1 identyfikatora przestrzeni nazw.

Poniżej znajdują się identyfikatory przestrzeni nazw zdefiniowane przez uuid3() lub uuid5().

    NAMESPACE_DNS —Reprezentuje tradycyjną nazwę domeny. Na przykład https://javatpoint.com.NAMESPACE_URL -Reprezentuje adres URL.NAMESPACE_OID —Ta przestrzeń nazw jest określona ciągiem ISO OID.NAMESPACE_X500 -Jeśli określono tę przestrzeń nazw, ciągiem nazwy jest nazwa wyróżniająca X.500 w formacie DER lub w formacie tekstowym.

Przyjrzyjmy się poniższemu przykładowi, aby wygenerować identyfikatory UUID3 i UUID5 przy użyciu różnych nazw hostów i przestrzeni nazw.

Przykład -

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

Wyjście:

 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 

Przykład - 2: Wygeneruj identyfikatory UUID 3 i UUID 5 przy użyciu innej przestrzeni nazw

obiekt do jsonobject Java
 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() 

Wyjście:

 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 

Zachowanie uuid3 i uuid5

  • Pomimo tej samej przestrzeni nazw i tej samej nazwy, identyfikatory UUID są generowane w różnym czasie.
  • Dwie różne przestrzenie nazw w tej samej przestrzeni nazw są różne, generują unikalne identyfikatory.

Przykład - 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')) 

Wyjście:

 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 

Jak przekonwertować ciąg na UUID i UUID na ciąg w Pythonie?

The uuid.uuid1() Metoda zwraca instancję klasy UUID. Możemy uzyskać ciąg znaków reprezentujący UUID za pomocą str() metoda. Odpowiedni format ciągu można wykorzystać do porównania lub manipulacji. Rozumiemy następujący przykład.

Przykład -

 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) 

Wyjście:

 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 

Teraz utworzymy UUID z String.

Czasami otrzymujemy UUID w formacie ciągu. A nasza aplikacja musi przekonwertować go w instancji klasy UUID dla niektórych aplikacji. Przyjrzyjmy się poniższemu przykładowi, aby przekonwertować UUID w formacie ciągu.

Przykład -

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

Wyjście:

ile miast jest w nas
 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 

Przykład - 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) 

Wyjście:

 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 

Generuj powtarzalne identyfikatory UUID

Jak wspomnieliśmy wcześniej, UUID ma różne atrybuty. Możemy użyć tego samego UUID, używając dowolnego z jego atrybutów. Używając moduł uuid , możemy wygenerować to samo uuid w dowolnym momencie, używając wartości początkowej. Wartości początkowej można również użyć do wygenerowania tego samego identyfikatora UUID. Rozumiemy oba pojęcia.

Do utworzenia instancji UUID można użyć następujących danych wejściowych.

  • Strunowy
  • Bajty
  • Bajty_le
  • Pola
  • wew

Używając dowolnej z powyższych wartości, można wygenerować identyfikator UUID. Zobaczmy następujący przykład, w którym używamy wszystkich wartości tego samego UUID.

Przykład -

 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) 

Wyjście:

 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 

Odtwórz UUID za pomocą materiału siewnego

Jak sama nazwa wskazuje, moduł Faker generuje dla nas fałszywe dane. Użyliśmy modułu fałszywego, aby wielokrotnie wygenerować ten sam UUID. Rozumiemy następujący przykład.

Przykład -

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

Wyjście:

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

Wniosek

W tym samouczku szczegółowo omówiliśmy moduł uuid i zrozumieliśmy, w jaki sposób możemy wygenerować różne identyfikatory UUID. UUID pomagają nam zdefiniować unikalność aplikacji/bazy danych, a także pomagają zdefiniować identyfikatory dokumentów, hostów, aplikacji, klientów i innych sytuacji.