Δημιουργός UUID
Ένας επαγγελματίας εργαλείο δημιουργίας και επικύρωσης UUID που υποστηρίζει πολλαπλές εκδόσεις UUID, συμπεριλαμβανομένου του v1 (χρονοσήμανση), του v4 (τυχαία), του v5 (βάσει ονόματος) και του v7 (Unix time + τυχαίο). Παρέχει δημιουργία παρτίδας με προσαρμόσιμο αριθμό, ευέλικτες επιλογές μορφοποίησης συμπεριλαμβανομένης μετατροπής σε κεφαλαία γράμματα, αφαίρεσης παύλων και προσθήκης παρενθέσεων. Περιλαμβάνει ενσωματωμένο επικυρωτή UUID με εντοπισμό έκδοσης και παρέχει παραδείγματα κώδικα για πολλαπλές γλώσσες. Κατάλληλο για αναγνώριση εγγραφών βάσης δεδομένων, ανίχνευση αρχείων καταγραφής, διεπαφές συστημάτων μεταξύ τους και άλλες περιπτώσεις. Όλες οι εργασίες εκτελούνται τοπικά στο πρόηγημα περιήγησής σας, διασφαλίζοντας απόρρητο και ασφάλεια.
Οδηγός Χρήσης
Χαρακτηριστικά
- Υποστηρίζει UUID v1, v4, v5 και v7
- Ομαδική παραγωγή με προσαρμόσιμο αριθμό
- Εύκαμπτη μορφοποίηση: κεφαλαία, αφαίρεση παυλών, προσθήκη αγκυλών
- Ενσωματωμένος επαληθευτής με αυτόματη ανίχνευση έκδοσης
- Πλήρης υποστήριξη διεθνοποίησης και πολλαπλών θεμάτων
Τι είναι ένα UUID;
Τα UUID είναι αναγνωριστικά 128 bit, συνήθως αντιπροσωπεύονται ως συμβολοσειρές 36 χαρακτήρων με παύλες.
UUID v1: Βασίζεται στην χρονοσήμανση και την διεύθυνση MAC. Ταξινομούνται ανά χρόνο, αλλά μπορεί να αποκαλύψουν πληροφορίες χρονοσήμανσης ή τοποθεσίας.
UUID v4: Τυχαία παραγόμενο; πιο ευρέως χρησιμοποιούμενο, παρέχει ισχυρή μοναδικότητα και ιδιωτικότητα.
UUID v7: Βασισμένο σε χιλιοστά δευτερολέπτου Unix + τυχαία bit; φυσικά ταξινομήσιμο και αποφεύγει τα ζητήματα ιδιωτικότητας του v1.
UUID v5: Παράγεταιdeterministically από ένα UUID χώρου ονομάτων και όνομα χρησιμοποιώντας SHA-1; ίδιες εισόδους παράγουν πάντα την ίδια έξοδο.
UUID Συνήθεις Περίπτωσεις Χρήσης
- Μοναδικά αναγνωριστικά για εγγραφές βάσεων δεδομένων ή πόρους
- Αναγνωριστικά ιχνηλάτησης για καταγραφή δεδομένων και ιχνηλάτηση συμβάντων
- Απροβλέψιμα δημόσια αναγνωριστικά
- Συνεπή αναγνωριστικά σε συστημικές ενσωματώσεις
UUID Συχνές Ερωτήσεις & Παγίδες
- v1 και Ιδιωτικότητα: Το v1 μπορεί να αποκαλύψει χρονικές σφραγίδες ή υλικές θέσεις; προτιμήστε το v4 για χρήσεις ευαίσθητες στην ιδιωτικότητα.
- Ευαισθησία πεζών/κεφαλαίων: Η αντιστοίχιση UUID δεν είναι ευαίσθητη στην πεζοκεφαλαία.
- Οι παύλες είναι καθαρά για ευαναγνωσία; διατηρήστε τις εκτός αν περιορίζεστε από παλαιότερα συστήματα.
- Η μορφή με αγκύλες (π.χ. {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) γίνεται δεκτή σε ορισμένα περιβάλλοντα (π.χ. Μητρώο Windows).
- Το v5 είναι deterministik: ίδιος χώρος ονομάτων + όνομα => ίδιο UUID. Ιδανικό για idempotent λειτουργίες; αποφύγετε όταν απαιτείται απροβλεψιμότητα.
Πώς να Χρησιμοποιήσετε UUID σε Γλώσσες Προγραμματισμού
// 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 */ }