Penjana UUID
Alat penjanaan dan pengesahan UUID profesional yang menyokong pelbagai versi UUID termasuk v1 (cap masa), v4 (rawak), v5 (berasaskan nama), dan v7 (masa Unix + rawak). Menawarkan penjanaan batch dengan bilangan boleh suai, pilihan pemformatan fleksibel termasuk penukaran huruf besar, penyingkiran tanda sempang, dan penambahan kurungan. Termasuk pengesah UUID terbina dalam dengan pengesanan versi dan menyediakan contoh kod pelbagai bahasa. Sesuai untuk pengenalan rekod pangkalan data, penjejakan log, antara muka silang sistem, dan senario lain. Semua operasi dilakukan secara tempatan dalam pelayar anda, memastikan privasi dan keselamatan.
Panduan Penggunaan
Ciri-ciri
- Menyokong UUID v1, v4, v5, dan v7
- Penjanaan kelompok dengan bilangan yang boleh disesuaikan
- Pemformatan fleksibel: huruf besar, buang tanda sempang, tambah kurungan
- Pengesah terbina dalam dengan pengesanan versi automatik
- Antarabangsa penuh dan sokongan pelbagai tema
Apakah UUID?
UUID ialah pengenal 128-bit, biasanya diwakili sebagai rentetan 36 aksara dengan tanda sempang.
UUID v1: Berasaskan cap masa dan alamat MAC; teratur mengikut masa tetapi mungkin mendedahkan maklumat masa atau lokasi.
UUID v4: Dijana secara rawak; paling kerap digunakan, menawarkan keunikan dan privasi yang kuat.
UUID v7: Berasaskan milisaat Unix + bit rawak; boleh disusun secara semula jadi dan mengelakkan isu privasi v1.
UUID v5: Dijana secara deterministik daripada UUID ruang nama dan nama menggunakan SHA-1; input yang sama sentiasa menghasilkan output yang sama.
UUID Kes Penggunaan Lazim
- Pengenal unik untuk rekod pangkalan data atau sumber
- ID jejak untuk log dan penjejakan peristiwa
- Pengenal awam yang tidak dapat diramalkan
- Pengenal konsisten merentas integrasi sistem
UUID Soalan Lazim & Kesilapan Umum
- v1 dan Privasi: v1 boleh mendedahkan cap masa atau lokasi perkakasan; utamakan v4 untuk kes penggunaan sensitif privasi.
- Kepekaan huruf: Padanan UUID tidak peka terhadap huruf besar/kecil.
- Tanda sempang hanya untuk kemudahan bacaan; kekalkan kecuali dikekang oleh sistem lama.
- Format berkuran (cth., {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) diterima dalam sesetengah persekitaran (cth., Pendaftaran Windows).
- v5 bersifat deterministik: ruang nama + nama yang sama => UUID yang sama. Sesuai untuk operasi idempoten; elakkan apabila ketidakterdugaan diperlukan.
Cara Menggunakan UUID dalam Bahasa Pengaturcaraan
// 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 */ }