Ücretsiz UUID Oluşturucu - V1 ve V4 UUID'leri Anında Oluşturun
Ücretsiz UUID oluşturucumuzla benzersiz tanımlayıcıları anında oluşturun. Veritabanları, API'ler ve dağıtık sistemler için Versiyon 1 (zamana dayalı) ve Versiyon 4 (rastgele) UUID'ler oluşturun.
UUID Oluşturucu
Belgeler
UUID oluşturucu
UUID oluşturucu, Evrensel Olarak Benzersiz Tanımlayıcı veya UUID adı verilen, bir veri parçasını etiketlemek için kullanılan ve herhangi bir yerdeki başka bir öğenin aynı etiketi taşıma olasılığı düşük olan 128 bitlik kodu oluşturan bir araçtır. Bu sayfa Sürüm 1 (zaman tabanlı) ve Sürüm 4 (rastgele) UUID'ler oluşturur.
UUID nedir?
UUID, 32 onaltılık basamak olarak yazılan 128 bitlik bir sayıdır (0–9 ve a-f karakterleri). Kısa çizgilerle ayrılmış beş gruba bölünür ve düzeni 8-4-4-4-12 şeklindedir; toplam 36 karakter içerir. Örnek bir UUID şöyledir:
1550e8400-e29b-41d4-a716-446655440000
2UUID'ler, Mayıs 2024'te İnternet Mühendisliği Görev Gücü tarafından yayımlanan RFC 9562 ile tanımlanır; bu belge, 2005 tarihli eski RFC 4122'nin yerini almıştır. Her iki belge de aynı 128 bitlik biçimi açıklar. Yazılımlar, merkezi bir yetkilinin numara dağıtmasına gerek kalmadan veritabanı satırlarını, dosyaları, kullanıcı oturumlarını ve diğer kayıtları tanımlamak için UUID'leri kullanır. Olası UUID'lerin uzayı çok büyük olduğundan iki bilgisayar UUID'leri bağımsız olarak aynı anda oluşturabilir ve neredeyse hiçbir zaman aynı UUID'yi üretmez.
UUID biçimi ve yapısı
Bir UUID'nin 128 biti, adlandırılmış alanlara bölünür. Her alan sabit sayıda bit kaplar:
time_low- 32 bittime_mid- 16 bittime_hi_and_version- 16 bitclock_seq_hi_and_reserved- 8 bitclock_seq_low- 8 bitnode- 48 bit
time_hi_and_version içindeki dört bit UUID'nin sürüm numarasını, clock_seq_hi_and_reserved içindeki iki bit ise yazılıma alanların geri kalanını nasıl okuyacağını bildiren varyantı taşır. Sekiz sürüm tanımlanmıştır.
Yukarıdaki alan adları, bu alanların gerçekten bir zaman ve düğüm değeri taşıdığı Sürüm 1'den gelir. Diğer sürümler aynı 8-4-4-4-12 düzenini ve aynı alan sınırlarını korur, ancak bitlerin çoğunu rastgele verilerle doldurur. Sürüm 4 UUID'sinde time_low olarak etiketlenen grup zaman değil, rastgeledir.
Bu araçla UUID oluşturma
- Bir sürüm seçin: Sürüm 1 (zaman tabanlı) veya Sürüm 4 (rastgele).
- Sonuç kutusundaki UUID'yi okuyun. Sayfa yüklenir yüklenmez veya sürüm değiştiğinde yeni bir UUID görünür.
- Bir tane daha oluşturmak için "Oluştur"u seçin.
- Sonucu panoya kopyalamak için "Kopyala"yı seçin; ardından sonucu koda, veritabanına veya yapılandırma dosyasına yapıştırın.
Sonucun altındaki panel, UUID'yi beş alanına ayırır ve her birini adlandırır; böylece sürüm basamağı ile varyant basamağı kolayca bulunabilir.
Sürüm 4, ne zaman veya nerede oluşturulduğuna ilişkin bilgi taşımadığı için veritabanı anahtarları ve oturum belirteçleri dahil çoğu iş için uygundur. Sürüm 1 ise günlük girdileri gibi, oluşturulma zamanının tanımlayıcının kendisinden geri alınması gereken kayıtlar için uygundur.
UUID sürüm 1 ile sürüm 4 karşılaştırması
Sürüm 1, geçerli zaman damgasını, rastgele seçilmiş bir saat sırasını ve düğüm değerini kodlar. Standart, düğüm değerinin bilgisayarın gerçek ağ (MAC) adresi olmasına izin verir; ancak gizliliği koruyan bir seçenek olarak rastgele oluşturulmuş düğüm değerine de izin verir. Bu araç her zaman rastgele seçeneği kullanır: Sürüm 1 UUID'leri gerçek bir MAC adresini hiçbir zaman okumaz veya açığa çıkarmaz. Standart ayrıca rastgele bir düğüm değerinde düğüm alanının ilk baytının en düşük bitinin 1 olarak ayarlanmasını gerektirir ve bu araç da bunu yapar. Gerçek ağ kartlarında bu bit hiçbir zaman ayarlanmadığından rastgele bir düğüm gerçek bir düğümle karıştırılamaz. Bu nedenle bu sayfadan oluşturulan Sürüm 1 UUID'sinde beşinci grubun ikinci onaltılık basamağı her zaman tektir: 1, 3, 5, 7, 9, b, d veya f.
Sürüm 1 UUID'sinin içindeki zaman damgası geri okunabilir; böylece kayıtlar oluşturulma sırasına konabilir. UUID metninin kendisini sıralamak bunu sağlamaz, çünkü ilk grup zaman damgasının en düşük 32 bitini içerir ve bu bitler yaklaşık her 7 dakikada bir devreder. RFC 9562 ile eklenen Sürüm 6, aynı zaman damgasını en yüksek bitler önce gelecek şekilde depolar; böylece düz metin sıralaması işe yarar.
Sürüm 4, sürümü ve varyantı işaretlemek üzere sabitlenen birkaç bit dışında rastgele bitlerden oluşur. Zaman damgası veya makineye özgü veri taşımaz; bu nedenle ne zaman ya da nerede oluşturulduğuna ilişkin hiçbir bilgi açığa çıkarmaz. Oluşturulma sırasına göre sıralanamaz.
Standartta altı sürüm daha bulunur, ancak bu araç bunları oluşturmaz: Sürüm 2 (DCE Security, nadiren kullanılır); bir ad alanı ile adın MD5 veya SHA-1 kullanılarak özütlenmesiyle oluşturulan Sürüm 3 ve Sürüm 5; aynı girdinin her zaman aynı UUID'yi üretmesini sağlayan bu sürümlere ek olarak, sıralanabilir ve özel tanımlayıcılar için 2024 içinde RFC 9562 ile eklenen Sürüm 6, 7 ve 8.
UUID nasıl hesaplanır (formül)
Sürüm 4:
- 128 rastgele bit oluşturun.
- Sürümün dört bitini, üçüncü grubun ilk onaltılık basamağını,
0100olarak ayarlayın (onaltılık4). - Dördüncü grubun en yüksek iki bitini
10olarak ayarlayın (böylece grubun ilk onaltılık basamağı8,9,aveyabolur).
128 bitin yalnızca 122 tanesi gerçekten rastgeledir; çünkü 6 bit, 2 ve 3. adımlarda sabitlenir. Bu da olası Sürüm 4 UUID'lerinin sayısını 2^122, yani yaklaşık 5,3 × 10^36 yapar.
Sürüm 1:
- Geçerli zamanı, Gregoryen takvim reformunun tarihi olan 15 Ekim 1582 tarihinden bu yana geçen 100 nanosaniyelik aralıkların sayısı olarak alın. Uygulamada bu, milisaniye cinsinden olağan Unix zamanı artı 12.219.292.800.000 değerinin 10.000 ile çarpılmasıdır.
- Bu 60 bitlik sayıyı üç alana bölün: en düşük 32 bit
time_lowalanına, sonraki 16 bittime_midalanına ve en yüksek 12 bittime_hi_and_versionalanına gider. - Sistem saati geriye alınırsa çakışmaları önlemek için kullanılan 14 bitlik bir saat dizisi oluşturun.
- 48 bitlik bir düğüm değeri oluşturun ve ilk baytının en düşük bitini 1 olarak ayarlayın.
- Sürüm bitlerini
0001, varyant bitlerini10olarak ayarlayın.
Tüm UUID sürümlerinde, tam 128 bitlik alan 2^128, yani yaklaşık 3,4 × 10^38 olası değer içerir. Bu sayı o kadar büyüktür ki rastgele çakışmalar pratikte kaygı oluşturmaz.
Çözümlü örnek
Sürüm 4 UUID'sini okuma. Daha önceki örneği alın: 550e8400-e29b-41d4-a716-446655440000.
- Üçüncü grup,
41d4: ilk basamak4olduğundan bunun bir Sürüm 4 UUID'si olduğunu gösterir. - Dördüncü grup,
a716: ilk basamak olana(ikilik1010), gerekli varyant bitleri olan10ile başlar. - Kalan onaltılık basamaklar rastgele veriyi oluşturur.
Bu UUID'yi okuyan bir program, biçimi doğrulamak için 4 ve 10 örüntüsünü denetler, ardından geri kalanı opak bir rastgele değer olarak ele alır.
Sürüm 1 UUID'si oluşturma. Saatin 1.700.000.000.000 milisaniyelik Unix zamanını gösterdiğini varsayalım; bu, UTC 22:13:20'de 14 Kasım 2023 tarihidir.
- Ofseti ekleyin: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
- 100 nanosaniyelik aralıkları elde etmek için 10.000 ile çarpın: 139,192,928,000,000,000. Onaltılık olarak bu değer
01EE833B04AFC000olur. - Dilimleyin:
time_low=04AFC000(en düşük 8 onaltılık basamak),time_mid=833B(sonraki 4 basamak) ve en yüksek 12 bit1EEolur. - Sürüm basamağı
1'i1EE'nin önüne koyaraktime_hi_and_version=11EEelde edin.
UUID daha sonra 04afc000-833b-11ee- ile başlar; bunu saat dizisi ve düğüm değeri izler. Yazılım, tanımlayıcıdan 14 Kasım 2023 tarihini geri almak için bu dört adımı tersine çevirebilir.
UUID'lerin yaygın kullanım alanları
- Veritabanlarında birincil anahtarlar; özellikle birden fazla sunucu birbirleriyle iletişim kurmadan aynı anda kayıt oluşturduğunda.
- Genellikle sağladığı gizlilik nedeniyle Sürüm 4 kullanılan oturum belirteçleri ve API anahtarları.
- Mikro hizmetler gibi dağıtık sistemlerde dosyalar, olaylar ve kaynaklar için tanımlayıcılar.
- Her cihazın kendi kimliğini çevrimdışı oluşturabildiği büyük IoT ağlarındaki cihaz kimlikleri.
Temel ödün boyuttur: Bir UUID, basit bir tamsayı sayacı için gereken 4 veya 8 bayta kıyasla 16 bayt depolama alanı kaplar ve bazı veritabanları UUID'leri ardışık tamsayılardan daha yavaş indeksler.
UUID'lere alternatifler
Otomatik artan tamsayılar daha küçük ve basittir, ancak birden fazla sunucunun kimlikleri bağımsız olarak dağıtması gerektiğinde iyi çalışmaz. Twitter tarafından geliştirilen Snowflake kimlikleri, dağıtık bir sistem genelinde kompakt ve sıralanabilir tanımlayıcılar üretmek için zaman damgasını işçi kimliğiyle birleştirir. ULID'ler (Evrensel Olarak Benzersiz Sözlük Sıralı Tanımlayıcılar), standart Sürüm 4 UUID'sinin aksine hem rastgele hem de oluşturulma zamanına göre sıralanabilir olacak şekilde tasarlanmış daha yeni bir biçimdir.
UUID standardının tarihi
UUID kavramı, 1980'lerde Apollo Computer'da, şirketin Network Computing System'inin bir parçası olarak ortaya çıktı. Open Software Foundation daha sonra bu biçimi Distributed Computing Environment için benimsedi. İnternet Mühendisliği Görev Gücü, 2005'te RFC 4122'yi yayımladı ve bunu Mayıs 2024'te RFC 9562 ile değiştirdi. RFC 9562, önceki tüm sürümlerin değişiklik olmadan çalışmasını korur ve Sürüm 6, 7 ve 8'i ekler.
Sık sorulan sorular
UUID oluşturucu ne için kullanılır? Veritabanları, dağıtık sistemler, oturum belirteçleri, API anahtarları ve cihaz kimlikleri için benzersiz tanımlayıcılar oluşturur; böylece hiçbir iki kaydın aynı tanımlayıcıyı paylaşması gerekmez.
UUID v1 ile v4 arasındaki fark nedir? Sürüm 1, yazılımın okuyarak oluşturulma zamanını geri alabileceği bir zaman damgasını kodlar. Sürüm 4 tamamen rastgeledir ve zaman damgası taşımaz. Bu aracın Sürüm 1 çıktısı gerçek bir MAC adresi yerine rastgele oluşturulmuş bir düğüm değeri kullanır; dolayısıyla makineyi tanımlayan bilgileri de açığa çıkarmaz.
Sürüm 1 MAC adresimi açığa çıkarır mı? Bu araçla hayır. Standart, Sürüm 1 UUID'sinin düğüm alanının gerçek bir MAC adresi taşımasına izin verir; ancak bu oluşturucu alanı her zaman rastgele bitlerle doldurur ve değerin gerçek bir ağ adresi olmadığını belirten biti ayarlar.
UUID'lerin benzersiz olması garanti edilir mi? Hiçbir tanımlayıcı düzeni mutlak benzersizliği garanti edemez; ancak 128 bitlik alan yaklaşık 3,4 × 10^38 olası değer içerir ve Sürüm 4 UUID'si yaklaşık 5,3 × 10^36 olası rastgele değere sahiptir. Yinelenen bir değer oluşma olasılığı, neredeyse her pratik kullanım için göz ardı edilebilecek kadar küçüktür.
UUID'yi veritabanı birincil anahtarı olarak kullanabilir miyim? Evet. UUID'ler, dağıtık sistemlerde birincil anahtar olarak iyi çalışır; çünkü herhangi bir düğüm, merkezi bir sunucuya danışmadan UUID oluşturabilir. Bedeli, anahtar başına 16 bayt depolama alanıdır; bu, tipik bir tamsayıdan fazladır ve çok büyük tablolarda dizin performansı daha yavaş olabilir.
UUID ile GUID aynı şey midir? Evet. GUID (Küresel Olarak Benzersiz Tanımlayıcı), Microsoft'un RFC 4122'de UUID olarak tanımlanan aynı kavram için kullandığı addır.
Sürüm 4 UUID'leri oluşturulma zamanına göre sıralanabilir mi? Hayır. Sürüm 4 UUID'leri rastgeledir; bu nedenle oluşturuldukları zamana ilişkin kayıt taşımaz. Sürüm 1 UUID'si böyle bir kayıt taşır, ancak önce kodunun çözülmesi gerekir; metni sıralamak oluşturulma sırasını vermez. Sürüm 6, Sürüm 7 ve ULID'ler doğrudan metin olarak sıralanacak şekilde tasarlanmıştır.
Kaynaklar
- Davis, K., Peabody, B. ve Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. ve Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Evrensel olarak benzersiz tanımlayıcı. Wikipedia içinde. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake kimliği. Wikipedia içinde. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID belirtimi. GitHub. https://github.com/ulid/spec