ULID Oluşturucu

Çevrim içi ULID'ler oluşturun: 48 bit zaman ve 80 rastgele bit içeren 26 karakterlik Crockford Base32 kimlikleri.

Biçim
Üretilen Kimlikler
Hazır. Tarayıcınızda ULID'ler oluşturun.

Bu kimlik (ID) nasıl oluşturulur?

Düzen
26 Crockford Base32 karakteri: 10 zaman karakterini takip eden 16 rastgele karakter.
Entropi
48 bitlik milisaniye zaman damgasından sonra 80 rastgele bit.
Zaman
Evet. İlk 10 karakter milisaniye cinsinden zamanı kodlar ve sözlüksel sıralama zamanı takip eder.
Çakışma riski
Rastgele kuyruk kısmı 80 bit içerir; risk esas olarak aynı milisaniye içinde kaç tane kimlik oluşturduğunuzla ilgilidir.
Örnek
01M12BRQRPMR7H38QEC6HRRG0H

Kimlikleriniz güçlü tarayıcı rastgeleliği ile yerel olarak üretilir. BroBroGo'ya hiçbir şey gönderilmez.

Sıkça Sorulan Sorular

ULID ne işe yarar?

ULID kompakt, URL dostu ve düz metin olarak zamana göre sıralanabilirdir; bu da günlükler (logs), nesne anahtarları ve oluşturulma zamanına göre sıralanması gereken kayıtlar için kullanışlıdır.

ULID, UUID v7 ile aynı şey mi?

Hayır. Her ikisi de milisaniye cinsinden zaman içerir, ancak ULID 26 karakter ve Crockford Base32 kullanırken, UUID v7 standart UUID onaltılık (hexadecimal) biçimini korur.

ULID Oluşturma Aracı: Yapısı, Kullanımı ve Teknik Özellikleri

Bu sayfa, ULID (Universally Unique Lexicographically Sortable Identifier) formatında benzersiz tanımlayıcılar üretir. Kullanıcı, ihtiyaç duyduğu ID sayısını (1 ile 100 arasında) seçer ve araç, her biri 26 karakter uzunluğunda, büyük/küçük harf duyarsız bir liste oluşturur. Oluşturulan her ULID, tek tıkla panoya kopyalanabilir veya tüm liste "Tümünü Kopyala" işleviyle alınabilir. Üretim işlemi tamamen tarayıcı içinde, crypto.getRandomValues() API'si kullanılarak gerçekleşir; hiçbir veri sunucuya gönderilmez.

ULID’i Diğer Formatlardan Ayıran Özellikler

UUID formatıyla karşılaştırıldığında ULID, 36 karakter yerine 26 karakterle daha kısa bir temsil sunar. Bunun nedeni, Crockford’un base32 alfabesini kullanmasıdır. Bu alfabe, 0-9 rakamları ile I, L, O, U harfleri dışındaki A-Z harflerini içerir. I, L, O, U harflerinin çıkarılma nedeni, 1, 0 ve diğer harflerle görsel karışıklığı önlemektir. Sonuç olarak ULID’ler büyük/küçük harf duyarsızdır ve tire içermez. URL’lerde yüzde kodlaması gerektirmez; tüm karakterleri RFC 3986 standardında ayrılmamış (unreserved) karakterlerdir.

ULID’in en önemli farkı, ilk 10 karakterin milisaniye hassasiyetinde bir zaman damgası kodlamasıdır. Bu sayede ULID’ler, oluşturulma zamanına göre sözlükbilimsel (lexicographic) olarak sıralanabilir. Aynı anda üretilen birden fazla ULID arasında zaman damgası aynı olacağı için kesin bir sıralama garantisi yoktur; sıralama yalnızca farklı milisaniyelerde üretilen ID’ler için geçerlidir.

Bu sayfada ULID için büyük harf veya tire geçiş anahtarı bulunmaz. Çünkü format zaten bu özellikleri varsayılan olarak sunar. Kullanıcının herhangi bir ek ayar yapması gerekmez.

ULID’in İç Yapısı: 128 Bitin Dağılımı

Bir ULID, toplam 128 bit (16 bayt) uzunluğundadır. Bu bitler iki ana bölüme ayrılır:

  • Zaman damgası (48 bit): İlk 10 karakter, milisaniye cinsinden Unix zamanını kodlar. 48 bit ile yaklaşık 8.925 yıl boyunca benzersiz zaman değerleri ifade edilebilir. Bu, ULID’lerin 10889 yılına kadar sorunsuz çalışabileceği anlamına gelir.

  • Rastgele bileşen (80 bit): Kalan 16 karakter, 80 bitlik rastgele bir değer taşır. Bu rastgelelik, aynı milisaniye içinde üretilen ULID’lerin çakışma olasılığını en aza indirir.

Zaman damgası ve rastgele bileşen, Crockford base32 ile kodlanır. Base32, her 5 biti bir karaktere dönüştürür. 128 bit / 5 bit = 25,6 karakter. Ondalık kısım atıldığında 25 karakter yeterli olmaz; bu nedenle 130 bit kullanılır (10 karakter × 5 bit = 50 bit zaman, 16 karakter × 5 bit = 80 bit rastgele, toplam 130 bit). Fazladan 2 bit, zaman damgası bölümüne eklenir. Pratikte bu, zaman damgasının 48 bit değil 50 bit olarak kodlandığı anlamına gelir. Ancak gerçek hassasiyet yine milisaniyedir; fazla bitler gelecekteki zaman aralığını genişletmek için kullanılır.

Karşılaştırma: ULID, UUID v4 ve UUID v7

Özellik ULID UUID v4 UUID v7
Karakter uzunluğu 26 36 36
Tire sayısı 0 4 4
Büyük/küçük harf duyarlılığı Duyarsız Duyarlı (çoğunlukla küçük) Duyarlı (çoğunlukla küçük)
Zaman damgası 48 bit (milisaniye) Yok 48 bit (milisaniye)
Rastgele bit 80 bit 122 bit 74 bit
Sıralanabilirlik Evet (sözlükbilimsel) Hayır Evet (zaman bazlı)
URL güvenliği Evet (kodlama gerekmez) Hayır (tire ve büyük harf sorunu) Hayır (tire ve büyük harf sorunu)

UUID v7, ULID’e benzer bir zaman damgası yapısı sunar ancak daha uzun karakter temsili ve tireler nedeniyle URL’lerde kullanımı daha zordur. ULID, 26 karakterle hem daha kısa hem de doğrudan URL’lerde kullanılabilir.

Çarpışma Olasılığı ve İstatistiksel Güvenlik

ULID’in 80 bitlik rastgele bileşeni, aynı milisaniye içinde üretilen ID’ler arasında çakışma olasılığını belirler. 80 bit, yaklaşık 1,2 × 10^24 olası değer demektir. Bir milisaniyede 1.000 ULID üretilse bile, çarpışma olasılığı ihmal edilebilir düzeydedir (yaklaşık 2^-80). Pratikte, aynı milisaniyede 100’den fazla ID üretmek bu aracın sınırlarını aşar; çünkü maksimum 100 ID üretilebilir. Bu nedenle çarpışma riski yok denecek kadar azdır.

Ancak ULID’lerin tamamen rastgele olmadığı unutulmamalıdır. Zaman damgası kısmı tahmin edilebilirdir. Rastgele bileşen kriptografik olarak güçlü olduğu için ID’lerin tahmin edilmesi zordur, ancak tamamen rastgele UUID v4’e göre daha düşük entropiye sahiptir (80 bit vs 122 bit). Güvenlik açısından kritik uygulamalarda (örneğin erişim tokenları) ULID yerine UUID v4 tercih edilmelidir.

Veritabanı İndeksleme Performansına Etkisi

Veritabanlarında birincil anahtar olarak rastgele UUID kullanmak, B-ağacı indekslerinde sayfa bölünmelerine (page split) ve düzensiz ekleme performansına yol açar. ULID’ler zaman damgası içerdiğinden, sırayla eklenen kayıtlar yaklaşık olarak artan bir düzende indekse yazılır. Bu, yeni verilerin mevcut indeksteki son sayfalara eklenmesini sağlar ve sayfa bölünme sayısını azaltır.

Örneğin, bir PostgreSQL tablosunda PRIMARY KEY olarak UUID v4 kullanmak, ortalama %30-40 daha fazla indeks sayfası yazımına neden olabilir. ULID veya UUID v7 gibi zaman sıralı identifikatörler, bu yükü azaltır. Ancak ULID’in 26 karakterlik metin temsili, 16 baytlık ikili UUID’den daha fazla depolama alanı kaplar (26 bayt UTF-8). Veritabanında uuid türü yerine metin sütunu kullanıldığında bu fark önemli hale gelir. Yine de çoğu uygulama için bu ek alan kabul edilebilir düzeydedir.

Gizlilik ve Yerel Üretim

Bu araç, tüm ULID’leri tarayıcıda, crypto.getRandomValues() API’si aracılığıyla üretir. Bu API, işletim sistemi düzeyinde kriptografik olarak güçlü rastgele sayı üreteçlerini kullanır. Üretim sırasında hiçbir veri ağ üzerinden gönderilmez; sunucu tarafı işlem yoktur. Bu, hassas verilerin (örneğin kullanıcı kimlikleri, oturum anahtarları) yalnızca yerel makinede kalmasını sağlar.

Gizlilik bilincine sahip geliştiriciler için bu önemli bir avantajdır. Çevrimiçi ID üreteçlerinin bir kısmı, üretilen ID’leri sunucuda günlüğe kaydedebilir veya üçüncü taraflarla paylaşabilir. Bu araçta böyle bir risk yoktur.

Sıkça Sorulan Sorular

S: ULID’ler ne kadar süre boyunca benzersiz kalır?
C: Zaman damgası 48 bit olduğu için yaklaşık 8.925 yıl sonra taşma meydana gelir. Bu süre sonunda aynı zaman damgası değerleri tekrarlanabilir. Ancak pratikte bu süre, herhangi bir uygulamanın ömrünün çok ötesindedir.

S: Aynı milisaniyede üretilen ULID’lerin sıralaması güvenilir mi?
C: Hayır. Aynı milisaniyede üretilen ULID’lerin zaman damgası aynıdır; sıralama yalnızca rastgele bileşene göre yapılır. Bu nedenle kesin bir kronolojik sıra beklenmemelidir. Farklı milisaniyelerde üretilenler ise zaman damgasına göre doğru sıralanır.

S: ULID’ler neden büyük/küçük harf duyarsızdır?
C: Crockford base32 alfabesi, görsel olarak karışabilecek karakterleri (I/1, L/1, O/0, U/V) kaldırdığı için büyük ve küçük harfler aynı değere karşılık gelir. Bu sayede kullanıcılar ID’leri yazarken harf büyüklüğü konusunda endişelenmez.

S: 100’den fazla ULID üretebilir miyim?
C: Bu araçta üst sınır 100’dür. Daha fazla sayıda ID’ye ihtiyacınız varsa, birden çok kez üretim yapabilir veya doğrudan bir kitaplık kullanarak kendi kodunuzda sınırsız sayıda ULID oluşturabilirsiniz.

S: ULID ile UUID arasında performans farkı var mı?
C: Veritabanı indeksleme açısından ULID, rastgele UUID’den daha iyi performans gösterir. Ancak 26 karakterlik metin depolaması, 16 baytlık ikili UUID’den daha fazla alan kaplar. Uygulamanızın gereksinimlerine göre seçim yapılmalıdır.

S: ULID’ler kriptografik olarak güvenli midir?
C: Rastgele bileşen kriptografik olarak güçlü olsa da, toplam entropi UUID v4’e göre düşüktür (80 bit vs 122 bit). Ayrıca zaman damgası tahmin edilebilir olduğu için, ULID’ler gizli anahtar veya oturum kimliği olarak kullanılmamalıdır. Bu tür amaçlar için UUID v4 veya daha yüksek entropili formatlar tercih edilmelidir.