logo

Python'da UUID Nasıl Oluşturulur

Bu dersimizde uuid modülünü kullanarak Python'da UUID'nin nasıl oluşturulacağını tartışacağız. Bu konuya dalmadan önce UUID'nin temel konseptini anlayalım.

giriiş

UUID, kısaltma adıdır evrensel olarak benzersiz tanımlayıcılar GUID, yani Global Benzersiz Tanımlayıcı olarak da bilinir. Belgeleri, kullanıcıları, kaynakları veya bilgileri benzersiz şekilde tanımlayan 128 bit uzunluğunda bir kimlik numarasıdır. UUID'lerin çeşitli versiyonları vardır; Gelecek bölümde hepsini tartışacağız.

  • UUID, uzay ve zaman boyunca benzersiz tanımlayıcıları tanımlamak için kullanılır. Uzay ve zaman, UUID standarda göre oluşturulduktan sonra tanımlayıcıların mevcut kaynakların kopyası olamayacağı anlamına gelir.
  • Benzersizliğin gerekli olduğu durumlarda UUID en uygun seçenektir.
  • Kriptografi ve hash uygulamasında önemli bir rol oynar.

UUID ne zaman kullanılır?

UUID modülü aşağıdaki senaryolarda kullanılabilir.

Web Uygulamasında -

  • UUID, durumu oluşturarak durumu yönetmemize yardımcı olur. benzersiz bir oturum kimliği.
  • Genellikle kullanıcı kimliklerini oluşturmak için otomatik artış değerlerini kullanırız. Oldukça basit bir yaklaşımdır ve tahmin edilmesi kolaydır. Ancak UUID'ler art arda oluşturulmadıkları için tahmin edilmesi zordur.

Veritabanı Sisteminde

android'de engellenen numaraları bulma
  • UUID ortamdan bağımsız olduğundan veri tabanında önemli bir avantaj sağlar. Bu, herhangi bir uygulamayı kullanarak herhangi bir makinede UUID oluşturabileceğimiz anlamına gelir.
  • Çoğu uygulama, benzersiz veya birincil anahtarı oluşturmak için veritabanı sunucusuna bağlıdır. UUID, veritabanındaki anahtar oluşturma yaklaşımını değiştirmemize yardımcı olan benzersiz bir veritabanı anahtarı oluşturmak için iyi bir seçenektir.
  • UUID, SQL tablosundaki bir sayı gibi sahte bir değer değil, gerçek bir değerdir.

Python kullanıcı kimliği Modülü

Python uuid modülü, internet toplumunun bir standardı ve Telif Hakkı © olan RFC 4122'ye uygun olarak uygulanır. Python UUID modülü yardımıyla 1, 3, 4 ve 5 versiyonlu UUID'ler gibi çeşitli tiplerde UUID'ler üretebiliriz. Python modülü aşağıdaki UUID sürümlerini destekler.

    UUID1 -MAC adresini ve geçerli zaman bileşenini kullanarak benzersiz numarayı üretir.UUID4 -UUID'ler oluşturmak için sözde rastgele sayı üreteçleri kullanır ve bu tür UUID'lerin güvenlik amacıyla kullanılması iyidir.UUID3 ve UUID5 -UUID oluşturmak için kriptografik karma ve uygulama tarafından sağlanan metin dizelerini kullanır.

Python UUID Modülünü kullanarak UUID oluşturun

Python uuid modülünü kullanarak çeşitli versiyonların UUID'lerini oluşturalım.

uuid1() kullanma - Uuid'yi oluşturmak için uuid modülünü içe aktarmalı ve ardından uuid1() yöntemini çağırmalıyız. Aşağıdaki örneği anlayalım.

Örnek 1

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

Çıktı:

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

UUID'nin Yapısı

Gördüğümüz gibi yukarıdaki UUID'de beş bileşen var ve her bileşen aynı uzunluğa sahip. UUID'nin yapısı şu formattadır: '8-4-4-4-12'.

UUID dize gösterimi aşağıda verilmiştir -

boolean'a Java dizesi
 UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node. 

Yukarıdaki UUID alanlarını parçalayalım

    time_low -Bu, kimliğin ilk 32 bitidir.time_mid -Bu, kimliğin sonraki 16 bitidir.time_high_and_version -Bu bir sonraki 16 bitlik kimliktir.watch_seq_hi_variant:Bu, kimliğin sonraki 8 bitidir.watch_seq_low:Bu, kimliğin sonraki 8 bitidir.düğüm:Bu, kimliğin son 48 bitidir.zaman :Kimliğin zaman bileşeni alanıdır.saat_seq:14 bitlik bir sıra numarasıdır.

Bayt, int ve hex gibi çeşitli formatlarda UUID oluşturmanın başka bir örneğini anlayalım.

Örnek - 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) 

Çıktı:

 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'in dezavantajları

UUID1, bilgisayarın MAC adresiyle ilişkilidir ve bu nedenle gizlilik açısından tehdit oluşturabilir. Ancak tam bir benzersizlik sağlar.

Yöntem 2: uuid4()'u kullanma

Bu yöntem, gizliliği koruma garantisiyle rastgele sayılar üretir. Aşağıdaki örneği anlayalım.

Örnek -

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

Çıktı:

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

uuid1() vs uuid4

uuid1() herhangi bir çarpışma yaratmama güvencesi sağlar. 100ns'den daha kısa sürede 16384 uuid1'den fazlasını oluşturarak UUID'lerin kopyalarını oluşturabiliriz. Gizliliği koruma garantisi vermez. uuid1() Makinenizin MAC adreslerinin görünmesini istemiyorsanız önerilmez.

uuid4() yöntemi, kriptografik olarak oluşturulan güvenli sayı oluşturucuları kullanarak rastgele UUID oluşturur. Daha güvenli UUID'ler oluşturur. UUID'lerin ayrı makinelerde oluşturulması gerektiğinde önerilir.

İsme Dayalı UUID Oluşturmak için UUID 3 ve UUID 5

İsme dayalı UUID, sürüm 3 veya 5 UUID'yi kullanarak UUID'ler oluşturabileceğimiz anlamına gelir.

Bir dizi benzersiz UUID oluşturmak için adları ve ad alanlarını kullanabiliriz. Sürüm 3 ve 5, ad alanı tanımlayıcısını bir adla karma hale getiriyor.

uuid3() yöntem, ad alanı tanımlayıcısının MD5 karmasını ve bir dizeyi temel alan bir UUID oluşturur. Öte yandan uuid5() yöntemi, bir ad alanı tanımlayıcısının SHA-1 karma tekniğini temel alarak UUID üretir.

Aşağıda uuid3() veya uuid5() tarafından tanımlanan ad alanı tanımlayıcıları bulunmaktadır.

    NAMESPACE_DNS -Geleneksel bir alan adını temsil eder. Örneğin, https://javatpoint.com.NAMESPACE_URL -Bir URL'yi temsil eder.NAMESPACE_OID -Bu ad alanı ISO OID dizesi ile belirtilir.NAMESPACE_X500 -Bu ad alanı belirtildiğinde, ad dizesi DER'deki bir X.500 DN veya bir metin çıktı biçimidir.

Çeşitli ana bilgisayar adı ve ad alanını kullanarak UUID3 ve UUID5 oluşturmak için aşağıdaki örneği anlayalım.

vb ve vb net

Örnek -

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

Çıktı:

 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 

Örnek - 2: Farklı bir ad alanı kullanarak UUID 3 ve UUID 5'i oluşturun

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

Çıktı:

betiği çalıştırılabilir yap
 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 ve uuid5'in Davranışı

  • Aynı ad alanı ve aynı adın benzer olmasına rağmen, UUID'ler farklı zamanlarda oluşturulmuştur.
  • Aynı ad alanındaki iki farklı ad alanı farklıdır, benzersiz kimlikleri oluşturur.

Örnek - 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')) 

Çıktı:

 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 

Python'da dizeyi UUID'ye ve UUID'yi dizeye nasıl dönüştürebilirim?

uuid.uuid1() yöntemi UUID sınıfının örneğini döndürür. UUID'nin dize gösterimini aşağıdakileri kullanarak alabiliriz: dizi() yöntem. Karşılık gelen dize formatı karşılaştırma veya değiştirme amacıyla kullanılabilir. Aşağıdaki örneği anlayalım.

Örnek -

 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) 

Çıktı:

 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 

Şimdi String'den UUID oluşturacağız.

Bazen UUID'yi dize biçiminde alırız. Ve bazı uygulamalar için uygulamamızın bunu UUID sınıfı örneğine dönüştürmesi gerekiyor. Dize biçimli UUID'yi dönüştürmek için aşağıdaki örneği anlayalım.

Örnek -

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

Çıktı:

4 ayda bir
 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 

Örnek - 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) 

Çıktı:

 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 

Tekrarlanabilir UUID'ler Oluşturun

Daha önce de belirttiğimiz gibi UUID'nin çeşitli özellikleri vardır. Aynı UUID'yi niteliklerinden herhangi birini kullanarak kullanabiliriz. Kullanmak kullanıcı kimliği modülü , aynısını üretebiliriz kullanıcı kimliği tohum değerini kullanarak istediğiniz zaman. Tohum değeri aynı UUID'yi oluşturmak için de kullanılabilir. Her iki kavramı da anlayalım.

UUID örneği oluşturmak için aşağıdaki girişler kullanılabilir.

  • Sicim
  • Bayt
  • Bayt_le
  • Alanlar
  • int

Yukarıdaki değerlerden herhangi biri kullanılarak UUID oluşturulabilir. Aynı UUID'nin tüm bu değerlerini kullandığımız aşağıdaki örneğe bakalım.

Örnek -

 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) 

Çıktı:

 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'yi tohumla yeniden üretin

Adından da anlaşılacağı gibi Faker modülü bizim için sahte veriler üretiyor. Aynı UUID'yi tekrar tekrar oluşturmak için faker modülünü kullandık. Aşağıdaki örneği anlayalım.

Örnek -

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

Çıktı:

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

Çözüm

Bu derste uuid modülünü detaylı olarak ele aldık ve çeşitli UUID'leri nasıl oluşturabileceğimizi anladık. UUID'ler uygulama/veritabanındaki benzersizliği tanımlamamıza yardımcı olur ve ayrıca belgeler, ana bilgisayarlar, uygulama, istemciler ve diğer durumlar için tanımlayıcıları tanımlamamıza yardımcı olur.