UUID (Evrensel Benzersiz Tanımlayıcı), uluslararası IETF RFC 4122 ve RFC 9562 (ayrıca ITU-T X.667) standartları tarafından tanımlanmış 128 bitlik bir ikili tanımlayıcıdır. UUID’lerin temel amacı, dağıtık bilişim sistemlerinin merkezi bir kayıt otoritesine veya veritabanı koordinasyonuna ihtiyaç duymadan küresel ölçekte benzersiz anahtarlar üretmesini sağlamaktır. Standart metin biçiminde bir UUID, dört adet tire işaretiyle 8-4-4-4-12 düzeninde gruplanmış 32 onaltılık basamak olarak temsil edilir (örneğin: 550e8400-e29b-41d4-a716-446655440000) ve toplam 36 ASCII karakterinden oluşur.
Bir UUID’nin Onaltılık (Hex) Temsili Nedir?
Bir UUID matematiksel olarak tam olarak 128 bitten (16 sekizli veya bayt) oluştuğundan, doğrudan ve bire bir tam olarak 32 onaltılık basamağa karşılık gelir (her onaltılık basamak [0-9a-f] tam olarak 4 biti veya bir nibble’ı kodlar: 128 / 4 = 32). Bir UUID’nin onaltılık temsili, yapısal tire işaretleri olmaksızın bu 32 karakterin ardışık dizisidir. Örneğin, kanonik 550e8400-e29b-41d4-a716-446655440000 UUID’si, 550e8400e29b41d4a716446655440000 biçimindeki ardışık onaltılık değişmeze dönüşür. Bu 32 karakterlik kompakt biçim; ikili ağ veri yüklerinde, ilişkisel veritabanlarının kompakt birincil anahtarlarında ve alt düzey programlama değişkenlerinde yaygın olarak tercih edilir.
Adım Adım UUID’yi Onaltılığa Dönüştürme
- Girilen UUID’nin kanonik 8-4-4-4-12 düzeninde, süslü parantezli GUID veya URN önekli biçimde 32 geçerli onaltılık basamak içerdiğini doğrulayın.
- Sayısal değeri olmayan tüm yapısal biçimlendirme karakterlerini temizleyin: tireleri (-), süslü parantezleri ({, }), köşeli parantezleri veya "urn:uuid:" önekini kaldırın.
- Elde edilen 32 karakterlik dizeyi veritabanınızın veya hedef programlama dilinizin kurallarına göre küçük veya büyük harfe dönüştürün.
- Değeri bir kod sabitine atıyorsanız isteğe bağlı olarak "0x" programlama önekini ekleyin veya bellek analizi ve hata ayıklama amacıyla 16 bayt çiftini boşluklarla ayırın.
UUID’den Onaltılığa Pratik Dönüşüm Örneği
RFC 4122 standardının klasik örnek UUID’sini ele alalım: 550e8400-e29b-41d4-a716-446655440000. Dört adet tire ayracı kaldırıldığında, 5 gruplanmış veri bölümü (8 karakter, 4 karakter, 4 karakter, 4 karakter ve 12 karakter) kusursuz bir şekilde 32 karakterlik kesintisiz onaltılık dizeye birleşir: 550e8400e29b41d4a716446655440000. İkili inceleme için bayt boşluklu biçimde ise 55 0e 84 00 e2 9b 41 d4 a7 16 44 66 55 44 00 00 olarak gösterilir. Her iki temsil de orijinal tanımlayıcının 128 bitlik veri bütünlüğünü eksiksiz olarak korur.
Kanonik UUID ile Ham Onaltılık: Teknik Karşılaştırma
Tire işaretli kanonik UUID (36 karakter); insan tarafından okunabilirlik, sistem günlüklerinde hata ayıklama ve RFC 4122 / RFC 9562 standartlarına tam uyum sağlamak üzere tasarlanmıştır. Buna karşılık, 32 karakterlik ardışık onaltılık dize daha kompakttır; düz metin saklamada kayıt başına 4 bayt tasarruf sağlar ve yüksek performanslı veri hatlarında ayraç ayrıştırma yükünü ortadan kaldırır. Yerel ikili sütunlarda depolama yaparken (MySQL’de BINARY(16) veya Oracle’da RAW(16) gibi), mühendisler veriyi ham baytlara paketlemeden önce neredeyse her zaman 32 karakterlik onaltılık dizeyle işlem yaparlar.
Bir UUID Neden Onaltılığa Dönüştürülür?
Birçok eski veritabanı altyapısı, düşük gecikmeli ağ protokolü ve kriptografik kütüphane, tireli dizeler yerine 32 karakterlik ham onaltılık özetler veya "0x" değişmezleri bekler. UUID’lerin onaltılığa dönüştürülmesi; CHAR(32) veya VARCHAR(32) sütunlarında depolamayı kolaylaştırır, tire ayrıştırma maliyeti olmadan doğrudan dize karşılaştırmalarını hızlandırır, fazladan karma işlemine gerek kalmadan indeks aramalarını hızlandırır ve C, C++, Rust veya Assembly gibi doğrudan bellek düzenleriyle çalışan dillerle entegrasyonu basitleştirir.
Onaltılığı Yeniden UUID’ye Çevirme (Hex → UUID)
32 karakterlik saf bir onaltılık dizeden standart kanonik UUID’yi yeniden oluşturmak için standartlaştırılmış ofset konumlarına dört tire işaretini yeniden eklemeniz gerekir: ilk tireyi 8. karakterden sonra, ikincisini 12. karakterden sonra (+4), üçüncüsünü 16. karakterden sonra (+4) ve dördüncüsünü 20. karakterden sonra (+4) yerleştirin. Bu işlem 8-4-4-4-12 düzenini (8 kar - 4 kar - 4 kar - 4 kar - 12 kar) eksiksiz olarak geri getirir. Aracımız esnek girdileri destekler; 0x öneklerini, bayt boşluklarını, iki nokta üst üste işaretlerini ve büyük/küçük harf farklarını otomatik olarak ayıklar.
Yazılım Mühendisliğinde Pratik Kullanım Senaryoları
UUID ve onaltılık temsiller arasındaki iki yönlü dönüşüm şu alanlarda yaygın olarak kullanılır: 1) UNHEX() ve HEX() fonksiyonları kullanılarak UUID’lerin BINARY(16) sütunlarında saklandığı MySQL ve MariaDB veritabanı optimizasyonları; 2) OpenTelemetry veya W3C TraceContext izleme kimliklerinin kompakt 32 karakterlik onaltılık dize gerektirdiği mikroservis gözlemlenebilirliği; 3) Bant genişliği ve bellek kısıtlarının gereksiz biçimlendirme ayraçlarına izin vermediği gömülü sistemler ve IoT mimarileri; ve 4) UUID’lerin ham bayt görünümlerinde yer aldığı bellek dökümü adli bilişim analizleri ve entegrasyon testleri.
UUID’den Onaltılığa Dönüştürme Hakkında Sıkça Sorulan Sorular
UUID ile 32 karakterlik onaltılık dizesi arasındaki fark nedir?
Kanonik bir UUID, 8-4-4-4-12 ofsetlerinde yer alan 4 tire dahil 36 ASCII karakterinden oluşur. Onaltılık temsil ise tireler olmadan bire bir aynı 32 onaltılık basamağı barındırır (her ikisi de tam olarak aynı 128 bitlik bilgiyi taşır).
UUID’yi onaltılığa dönüştürmek veri kaybına yol açar mı?
Kesinlikle hayır. Bu dönüştürme işlemi %100 kayıpsızdır ve tamamen geri döndürülebilirdir. Hiçbir ikili veri değişmez; yalnızca görsel ayraçlar (tireler) kaldırılır veya yeniden eklenir.
Python’da UUID onaltılığa nasıl dönüştürülür?
Python’da yerleşik uuid modülünü kullanın: "import uuid; u = uuid.UUID('550e8400-e29b-41d4-a716-446655440000'); hex_str = u.hex". .hex özelliği kesintisiz 32 karakterlik küçük harfli onaltılık dizeyi döndürür.
JavaScript/TypeScript’te UUID onaltılığa nasıl dönüştürülür?
Modern JavaScript’te normal ifade kullanarak tireleri kaldırabilirsiniz: "const hex = uuid.replace(/-/g, '');". Önek eklemek için: "const prefixed = '0x' + hex;".
MySQL’de UUID BINARY(16) türüne nasıl dönüştürülür?
MySQL 8.0+ sürümlerinde yerleşik "UUID_TO_BIN('550e8400-e29b-41d4-a716-446655440000')" işlevini kullanın. Önceki sürümlerde "UNHEX(REPLACE('550e8400-e29b-41d4-a716-446655440000', '-', ''))" kullanabilirsiniz. Geri okumak için: "BIN_TO_UUID(col)" veya "LOWER(HEX(col))".
Bu araç UUID v7 ve UUID v4 sürümlerini destekliyor mu?
Evet! RFC 4122 ve RFC 9562 standartlarındaki tüm UUID sürümleri (v1, v2, v3, v4, v5, v6, v7, v8, Nil UUID ve Max UUID) tam olarak 128 bit ve 32 onaltılık basamaktan oluşur ve %100 desteklenmektedir.
0x öneki dönüştürülen değeri etkiler mi?
"0x" öneki, programlama dillerinde (C, Java, Python, JavaScript) 16 tabanını belirtmek için kullanılan bir sözdizimi kuralıdır. 128 bitlik tanımlayıcının kendi parçası değildir ancak aracımız kod yazımını kolaylaştırmak için bu biçimi girdi ve çıktılarda destekler.
UUID’lerim ve onaltılık değerlerim bir sunucuya gönderiliyor mu?
Hayır. Tüm doğrulama, dize işleme ve çift yönlü dönüştürme işlemleri yerel JavaScript ile %100 tarayıcınız içinde gerçekleşir. Hiçbir veri kaydedilmez veya internet üzerinden iletilmez.