Pembuat UUID
Alat pembuatan dan validasi UUID profesional yang mendukung beberapa versi UUID termasuk v1 (timestamp), v4 (acak), v5 (berbasis nama), dan v7 (Unix time + acak). Menawarkan pembuatan batch dengan jumlah yang dapat disesuaikan, opsi format fleksibel termasuk konversi huruf besar, penghapusan tanda hubung, dan penambahan kurung kurawal. Termasuk validator UUID bawaan dengan deteksi versi dan menyediakan contoh kode multi-bahasa. Cocok untuk identifikasi rekaman database, pelacakan log, antarmuka lintas sistem, dan skenario lainnya. Semua operasi dilakukan secara lokal di browser Anda, memastikan privasi dan keamanan.
Panduan Penggunaan
Fitur
- Mendukung UUID v1, v4, v5, dan v7
- Pembuatan massal dengan jumlah yang dapat disesuaikan
- Pemformatan fleksibel: huruf besar, hapus tanda hubung, tambah kurung kurawal
- Validator bawaan dengan deteksi versi otomatis
- Dukungan penuh untuk internasionalisasi dan multi-tema
Apa itu UUID?
UUID adalah pengidentifikasi 128-bit, umumnya direpresentasikan sebagai string 36 karakter dengan tanda hubung.
UUID v1: Berdasarkan timestamp dan alamat MAC; berurutan waktu tetapi dapat membocorkan informasi waktu atau lokasi.
UUID v4: Dibuat secara acak; paling umum digunakan, menawarkan keunikan dan privasi yang kuat.
UUID v7: Berdasarkan milidetik Unix + bit acak; dapat diurutkan secara alami dan menghindari masalah privasi pada v1.
UUID v5: Dibuat secara deterministik dari UUID namespace dan nama menggunakan SHA-1; input yang sama selalu menghasilkan output yang sama.
UUID Kasus Penggunaan Umum
- Pengidentifikasi unik untuk catatan database atau sumber daya
- Trace ID untuk pencatatan log dan pelacakan peristiwa
- Pengidentifikasi publik yang tidak dapat diprediksi
- Pengidentifikasi konsisten di seluruh integrasi sistem
UUID FAQ & Jebakan
- v1 dan Privasi: v1 dapat mengekspos stempel waktu atau lokasi perangkat keras; utamakan v4 untuk kasus penggunaan yang sensitif terhadap privasi.
- Sensitivitas huruf: Pencocokan UUID tidak membedakan huruf besar dan kecil.
- Tanda hubung hanya untuk keterbacaan; pertahankan kecuali dibatasi oleh sistem lama.
- Format dengan kurung kurawal (misalnya, {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) diterima di beberapa lingkungan (misalnya, Windows Registry).
- v5 bersifat deterministik: namespace + nama yang sama => UUID yang sama. Ideal untuk operasi idempoten; hindari ketika ketidakprediksian diperlukan.
Cara Menggunakan UUID dalam Bahasa Pemrograman
// UUID v4 (simple)
function uuidv4(){
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
const id = uuidv4();
// UUID v7 (Unix ms + randomness)
function uuidv7(){
const cryptoObj = (globalThis.crypto || globalThis.msCrypto);
const rb = n => { const a = new Uint8Array(n); cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(a) : a.forEach((_,i)=>a[i]=Math.random()*256|0); return a; };
const hex = b => Array.from(b).map(x=>x.toString(16).padStart(2,'0')).join('');
const ts = BigInt(Date.now()).toString(16).padStart(12,'0');
const ver = rb(2); ver[0] = (ver[0] & 0x0f) | 0x70; // set version 7
const vrn = rb(2); vrn[0] = (vrn[0] & 0x3f) | 0x80; // RFC4122 variant
const tail = rb(6);
return `${ts.slice(0,8)}-${ts.slice(8,12)}-${hex(ver)}-${hex(vrn)}-${hex(tail)}`;
}
const id7 = uuidv7();
const re=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
re.test(id); // true/false
<?php
// v4 using random_bytes
function uuidv4(){
$data = random_bytes(16);
$data[6] = chr((ord($data[6]) & 0x0f) | 0x40);
$data[8] = chr((ord($data[8]) & 0x3f) | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
$id = uuidv4();
<?php
// composer require ramsey/uuid:^4.7
use Ramsey\Uuid\Uuid;
$uuid7 = Uuid::uuid7();
<?php
$re = '/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
preg_match($re, $id) === 1; // true/false
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
# pip install uuid6
from uuid6 import uuid7
uid7 = uuid7()
import re
re_uuid = re.compile(r'^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', re.I)
bool(re_uuid.match(str(uid)))
// go get github.com/google/uuid
import "github.com/google/uuid"
id := uuid.New() // v4
id1 := uuid.NewUUID() // v1 (may return error)
// go get github.com/gofrs/uuid/v5
import (
uuid "github.com/gofrs/uuid/v5"
)
id7, err := uuid.NewV7()
import "github.com/google/uuid"
_, err := uuid.Parse(id.String()) // err == nil means valid
// Cargo.toml: uuid = { version = "1", features = ["v4", "v1"] }
use uuid::Uuid;
let v4 = Uuid::new_v4();
// v1 requires a context/ts, often via external crate; shown for completeness
// Cargo.toml: uuid = { version = "1", features = ["v7"] }
use uuid::Uuid;
let v7 = Uuid::now_v7();
use uuid::Uuid;
let ok = Uuid::parse_str(v4.to_string().as_str()).is_ok();
import java.util.UUID;
UUID id = UUID.randomUUID(); // v4
// Maven: com.github.f4b6a3:uuid-creator
import com.github.f4b6a3.uuid.UuidCreator;
UUID v7 = UuidCreator.getTimeOrderedEpoch(); // UUIDv7
import java.util.UUID;
try { UUID.fromString(id.toString()); /* valid */ } catch (IllegalArgumentException ex) { /* invalid */ }