UUID v2 Generator

Menghasilkan UUID v2 DCE Security dengan domain lokal dan ID

Klik Buat untuk membuat UUID
Catatan:UUID v2 mengkodekan domain lokal dan ID ke dalam struktur UUID
Note:UUID v2 adalah format warisan yang didefinisikan untuk konteks DCE Security. UUID v2 jarang dibutuhkan dalam aplikasi modern. Untuk ID unik tujuan umum, UUID v4 direkomendasikan.

Apa itu UUID v2?

UUID v2 adalah versi UUID DCE Security, yang distandarisasi sebagai bagian dari spesifikasi Distributed Computing Environment (DCE) dan direferensikan dalam RFC 4122.

Strukturnya mirip dengan UUID v1, tetapi field time_low 32-bit digantikan oleh identifier lokal 32-bit (misalnya POSIX UID).

UUID v2 sangat jarang dalam perangkat lunak modern. Sebagian besar pengembang tidak akan pernah perlu membuatnya.

Struktur UUID v2

UUID v2 memiliki format 128-bit bertanda hubung yang sama seperti versi UUID lainnya. Field-nya berbeda dari UUID v1 sebagai berikut:

FieldBitTujuan
local_id32<code>local_id</code> — identifier domain lokal 32-bit (misalnya POSIX UID dari <code>/etc/passwd</code>), menggantikan field time_low UUID v1
time_mid16<code>time_mid</code> — 16 bit tengah dari timestamp UUID v1 yang terpotong
time_hi+version16<code>time_hi_and_version</code> — 12 bit timestamp atas dengan nibble versi disetel ke <code>2</code>
variant+clock_hi8<code>clock_seq_hi_and_reserved</code> — bit varian plus bagian tinggi urutan jam
local_domain8<code>local_domain</code> — identifier domain: <code>0</code> = Pengguna POSIX (UID), <code>1</code> = Grup POSIX (GID), <code>2</code> = Organisasi
node48<code>node</code> — alamat MAC 48-bit dari host yang menghasilkan

Contoh: 000003e8-92e0-21ef-8000-325096b39f47 — local_id 0x000003e8 = UID 1000, local_domain 0x00 = Pengguna POSIX

Note:Karena field local_id menggantikan field time_low, timestamp dalam UUID v2 hanya selebar 28 bit. Ini mengurangi presisi timestamp menjadi sekitar 7,2 menit.

Nilai Domain Lokal

Byte local_domain menentukan tipe identifier lokal yang tertanam dalam UUID:

0POSIX_UID
ID Pengguna POSIX — UID numerik dari <code>/etc/passwd</code>, dapat diperoleh melalui <code>os.getuid()</code>
1POSIX_GID
ID Grup POSIX — GID numerik dari <code>/etc/group</code>, dapat diperoleh melalui <code>os.getgid()</code>
2ORG
Organisasi — identifier organisasi 32-bit kustom; semantiknya ditentukan oleh aplikasi

Nilai domain didefinisikan oleh spesifikasi DCE. Nilai 3–255 dicadangkan. Dalam praktiknya, hanya domain 0 (Orang/UID) yang umum ditemui.

Mengapa UUID v2 Jarang Digunakan

Tiga karakteristik membuat UUID v2 tidak praktis untuk sebagian besar aplikasi modern:

Resolusi Timestamp Kasar

Timestamp terpotong menjadi 28 bit (granularitas sekitar 7,2 menit).

Tidak Ada Dukungan Library Standar

Tidak seperti UUID v1 dan v4, UUID v2 tidak didukung oleh sebagian besar library UUID.

Semantik Khusus POSIX

Konsep domain lokal (UID/GID) secara inheren khusus POSIX dan tidak diterjemahkan secara bermakna ke Windows atau lingkungan cloud.

Warning:Jangan gunakan UUID v2 untuk proyek baru. Format ini tidak memberikan keunggulan atas UUID v4 atau v7. Gunakan UUID v4.

Konteks Historis

UUID v2 didefinisikan sebagai bagian dari Distributed Computing Environment (DCE/RPC) Open Software Foundation pada awal 1990-an.

Model keamanan DCE mengasumsikan lingkungan POSIX yang homogen di mana setiap node berpartisipasi dalam namespace UID/GID bersama.

  • Internet beralih dari lingkungan POSIX homogen ke arsitektur cloud heterogen
  • Otentikasi modern menggunakan token (JWT, OAuth) bukan UID yang tertanam dalam identifier
  • UUID v4 (sepenuhnya acak) dan UUID v7 (berurutan waktu) mencakup kasus penggunaan praktis untuk identifier unik
  • DCE/RPC sendiri sudah tidak banyak digunakan

RFC 4122 (2005) menyertakan UUID v2 dengan referensi ke spesifikasi DCE.

RFC 9562 (2024) mempertahankan UUID v2 untuk kelengkapan historis.

UUID v2 vs UUID v1

UUID v2 diturunkan dari UUID v1. Berikut perbandingannya:

AspekUUID v1UUID v2
Bit timestamp60 bit (presisi ~100ns)28 bit (presisi ~7,2 menit)
Identifier lokalTidak adaPOSIX UID/GID 32-bit
Domain lokalTidak ada0=UID, 1=GID, 2=Org
Field nodeAlamat MACAlamat MAC
Dukungan libraryDidukung secara luasJarang didukung
StandarRFC 4122 / RFC 9562Spesifikasi DCE (direferensikan oleh RFC 4122)
Penggunaan praktisID berurutan timestamp warisan (Cassandra)Hanya konteks DCE Security

UUID v2 tidak menawarkan apapun dibanding UUID v1 untuk penggunaan tujuan umum. Tidak ada alasan untuk memilih UUID v2 untuk pengembangan baru.

Contoh Kode

UUID v2 tidak memiliki dukungan native di library standar:

Python — implementasi manual

Python
import uuid, struct, time

def uuid_v2(local_id: int, local_domain: int = 0) -> str:
    """
    Generate a DCE Security UUID (v2).
    local_domain: 0 = POSIX UID, 1 = POSIX GID, 2 = Org
    local_id: 32-bit unsigned integer (e.g. os.getuid())
    """
    # Get a v1 UUID for the time and node fields
    v1 = uuid.uuid1()
    fields = list(v1.fields)  # [time_low, time_mid, time_hi_version, clock_seq_hi_variant, clock_seq_low, node]

    # Replace time_low with local_id
    fields[0] = local_id & 0xFFFFFFFF

    # Replace version nibble: clear lower 12 bits of time_hi, set version 2
    fields[2] = (fields[2] & 0x0FFF) | 0x2000

    # Replace clock_seq_low with local_domain
    fields[4] = local_domain & 0xFF

    return str(uuid.UUID(fields=tuple(fields)))


import os
print(uuid_v2(os.getuid(), local_domain=0))   # POSIX UID
print(uuid_v2(os.getgid(), local_domain=1))   # POSIX GID

Go — catatan

Go
// The standard "github.com/google/uuid" package does NOT support v2.
// You would need to implement it manually, similar to the Python example above.
// Most Go developers use v4 or v7 for new projects.
import "github.com/google/uuid"

v4 := uuid.New()          // v4 — recommended for most use cases
v7, _ := uuid.NewV7()     // v7 — time-ordered, ideal for database primary keys

JavaScript — ekstrak field

Untuk mengekstrak local_id dan domain dari string UUID v2 yang ada:

JavaScript
// Extracting fields from a UUID v2 string
const uuidStr = '000003e8-1234-2abc-8200-a1b2c3d4e5f6'
//               ^^^^^^^^ ^^^^ ^    ^^
//               local_id      ver  variant+clockSeqHi
//                                  ^^ = local_domain (00 = POSIX UID)

const parts = uuidStr.split('-')

const localId     = parseInt(parts[0], 16)       // → 1000 (0x3e8)
const version     = parseInt(parts[2][0], 16)    // → 2
const localDomain = parseInt(parts[3].slice(2), 16) // low byte of octet pair

const DOMAIN_NAMES = ['POSIX UID', 'POSIX GID', 'Org']
console.log(`Local ID: ${localId}`)                       // Local ID: 1000
console.log(`Version:  ${version}`)                       // Version:  2
console.log(`Domain:   ${DOMAIN_NAMES[localDomain]}`)     // Domain:   POSIX UID
Note:Paket Go google/uuid mendukung pembuatan UUID v2 melalui uuid.NewDCEGroup() dan uuid.NewDCEPerson().

Pertanyaan yang Sering Diajukan

Bisakah saya membuat UUID v2 di JavaScript?
Tidak ada library standar yang mendukung pembuatan UUID v2 di JavaScript. Anda perlu membuat byte secara manual.
Apa yang ada di field local_id?
local_id adalah integer tak bertanda 32-bit yang maknanya bergantung pada byte local_domain.
Apakah timestamp dalam UUID v2 dapat diandalkan?
Hanya sebagai indikator kasar. Karena hanya 28 dari 60 bit timestamp UUID v1 yang dipertahankan, presisi efektifnya adalah sekitar 7,2 menit.
Sistem mana yang masih menggunakan UUID v2?
UUID v2 terutama ditemui dalam sistem DCE/RPC warisan dari tahun 1990-an.
Mengapa RFC 4122 tidak menyertakan algoritme UUID v2?
RFC 4122 secara eksplisit menyatakan bahwa algoritme pembuatan UUID v2 didefinisikan oleh spesifikasi DCE, bukan IETF.
Apakah UUID v2 sama dengan GUID?
Tidak. GUID adalah nama Microsoft untuk konsep yang sama. UUID v2 tidak digunakan oleh infrastruktur Windows GUID.