Merhabalar herkese, bu yazımda Python’ın Built-In gelen modüllerinden olan UUID’ye bakacağız.

UUID > Universally Unique Identifiers

Kabaca “Evrensel Benzersiz Tanımlayıcı” diye çevrilebilir.

Türkçe’de buna yeni bir isim verdiler. “Evrensel Tekil Tanımlama Numarası” (kısaltması ETTN) UUID ile aynı anlama gelir.

UUID kodu aslında 128 bitlik binary (ikili) bir numaradır.

55d3bb18-9750-4c8e-815d-5a1f849be627 benzeri bir formatta gösterilir.

‘-‘ ayıraçları hariç her bir karakter 0->9 arasında ya da a->f arasında olabilen bir Hexadecimal (0->16 arası) sayıya denk düşer.

En yüksek UUID kodu olan ffffffff-ffff-ffff-ffff-ffffffffffff sayısı 2’nin 128’inci kuvveti olan

340282366920938463463374607431768211455 sayısına denk düşer.

Bunun ikili (Yani 0/1 ile gösterilen Binary) formatta yazımı 1111111.. şeklinde yan yana 128 tane 1 rakamı birleşik olarak ifade edilir.

Kentrilyon (1 milyar kere milyar) sayısı ile karşılaştırırsak 

340282366920938463463374607431768211455 sayısı 340282 kentrilyon kere kentrilyon sayısından daha büyük bir sayı yapar.

Niye Evrensel teklik (ya da Universally Unique) dendiğine gelince;

Rastgele oluşturulan bir UUID numarasının çakışma ihtimali 340282 Kentrilyon kere kentrilyon’dan daha düşük bir ihtimaldir.

Bu yüzden “Evrensel tekil” numara üretilebildiği yani rastgele işlemlerde çakışma ihtimalinin yok denecek kadar az olduğu kabul edilir.

Biz nerede kullanıyoruz?

Veri tabanına kaydettiğimiz belgelere, User’lara benzersizliği sağlamak adına Id değerleri veririz. Bu Id değerlerini Hexadecimal olarak üretmek istediğimizde UUID modülünü kullanabiliriz.

Sistemimizi ve verilerimizi güvenli hale getirmiş oluyoruz bir nevi aslında. Çünkü deneme yanılma yöntemiyle erişilip kırılamayacak bir değer üretmiş oluyoruz.

Python UUID modülü, RFC 4122’ye göre uygulanır.

RFC 4122, Internet Society’nin bir standardı ve Telif Hakkıdır (C). RFC 4122 spesifikasyonu, tüm sürümlerin Benzersiz Tanımlayıcılarını oluşturmak için tüm ayrıntıları ve algoritmaları içerir. RFC 4122 belgesi, UUID’ler oluşturmak için üç algoritma belirtir. Bu nedenle Python UUID modülünü kullanarak 1, 3, 4 ve 5 UUID sürümlerini oluşturabilirsiniz.

Bu modül kullanılarak oluşturulan UUID değişmezdir.

Python UUID modülü, aşağıdaki UUID sürümlerini destekler.

UUID1 – Bir Ana Bilgisayar MAC adresi, sıra numarası ve geçerli saati kullanarak UUID oluşturun. Bu sürüm, IEEE 802 MAC adreslerini kullanır.

UUID3 ve UUID5, UUID oluşturmak için kriptografik karma ve uygulama tarafından sağlanan metin dizelerini kullanır.

UUID3, MD5 karmasını kullanır ve UUID5, SHA-1 karmasını kullanır.

UUID4, UUID oluşturmak için sözde rastgele sayı üreteçlerini kullanır.

Python Örneği İle Bakalım.

Basit bir Python projesi oluşturdum.

UUID Python modülüdür. Aşağıdaki gibi modül tanımlaması import ile direkt kullanılır.

import uuid

1 UUID1 Kullanımı

Ana bilgisayar kimliğine ve geçerli zamana göre bir UUID oluşturalım ilk olarak. Bunu uuid1 ile yapabiliriz.

import uuid
id = uuid.uuid1()
print(id)

Her defasında yeni bir değer üretecektir.

2 UUID3 Kullanımı

Bir ad alanı UUID’sinin MD5 karmasını ve bir adı kullanarak bir UUID oluşturalım. Bunu uuid3 ile yapacağız.

id2 = uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
print(id2)

Burada belirlenen adrese göre her defasında aynı id’nin üretildiğidir. Burada benzersizliği sağlamak için string değeri değiştirmek yeterli olacaktır.

Bu arada mutlaka dns vermenize gerek yoktur. Herhangi bir string değer ile de ürettirilebilir.

id2 = uuid.uuid3(uuid.NAMESPACE_DNS, 'python')
print(id2)

3 UUID4 Kullanımı

Rastgele bir UUID oluşturalım. Bunun için uuid4 kullanmak gerekir.

id3 = uuid.uuid4()

print(id3)

4 UUID5 Kullanımı

Bir ad alanı UUID’sinin SHA-1 karmasını ve bir adı kullanarak bir UUID oluşturalım.

Bunun için uuid5 metodu kullanılır.

id4  = uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
print(id4)

5 UUID Kullanımı

Yine değeri farklı kılacak olan verilen String DNS değeridir. Mutlaka DNS değeri olmasına gerek yok. Herhangi bir String işinizi görecektir.

Bir dizi onaltılık rakamdan bir UUID oluşturalım. (parantezler ve kısa çizgiler yok sayılır)

Bunun için UUID metodu kullanılır.

id5  = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
print(id5)

6 UUID’yi Onaltılık Sisteme Dönüştür

Elimizdeki bir UUID’yi standart biçimde bir onaltılık basamak dizisine dönüştürelim.

id6= uuid.uuid4()
print(str(id6))

Bir UUID için onaltılık değer istiyorsanız, aşağıdakini yapabilirsiniz.

id7 = uuid.uuid4().hex
print(str(id7))

Bu kadardı. Bir sonraki yazımızda görüşmek üzere.

Kodların Github Linki : https://github.com/MuratBilginerSoft/Python-UUID-Module-Kullanimi


Murat Bilginer
21 Şubat 1992'de doğdum. Endüstri Mühendisi olarak lisansımı 2016 yılında tamamladım. Industryolog Akademi - NGenius oluşumlarının kurucusuyum. Şu anda kendi şirketim Brainy Tech ile Web ve Mobil Geliştirme, AWS, Google Cloud Platform Sistemleri için DevOps, Big Data Analiz ve Görselleştirme hizmetleri sunmakta ve Online Eğitimler vermekteyiz.