Εργαλείο Δημιουργίας UUID

Δημιουργία και επαλήθευση UUID (v1, v4, v5, v7), με υποστήριξη για μαζική παραγωγή και πολλές επιλογές μορφοποίησης, μαζί με παραδείγματα κώδικα σε πολλές γλώσσες.

Γεννήτρια UUID

Επιλογές Μορφοποίησης

Επαληθευτής UUID

Οδηγίες Χρήσης

Το UUID είναι ένας 128-bit αναγνωριστικός κωδικός, που αναπαρίσταται στην πρότυπη μορφή ως 36 χαρακτήρες με παύλες.
UUID v1: Βασισμένο σε χρονοσημάσματα και πληροφορίες δικτυακής κάρτας, ταξινομήσιμο με τον χρόνο, αλλά μπορεί να αποκαλύπτει χρόνο/τοποθεσία.
UUID v4: Βασισμένο σε τυχαίους αριθμούς, πιο συχνά χρησιμοποιούμενο, με καλή μοναδικότητα και ιδιωτικότητα.
UUID v7: Βασισμένο σε Unix χρόνο σε χιλιοστά δευτερολέπτων + τυχαίο, φυσικά ταξινομήσιμο, αποφεύγοντας τα προβλήματα ιδιωτικότητας του v1.
UUID v5: Βασισμένο σε έναν χώρο ονομάτων UUID και ένα όνομα, υπολογίζεται με SHA-1· το ίδιο είσοδο δίνει πάντα το ίδιο αποτέλεσμα.
Πρότυπη μορφή: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 χαρακτήρες).

Χαρακτηριστικά

  • Υποστήριξη UUID v1, v4, v5, v7
  • Υποστήριξη μαζικής παραγωγής με προσαρμοσμένο αριθμό
  • Εύκολη μορφοποίηση: κεφαλαία, αφαίρεση παύλων, προσθήκη αγκυλών
  • Ενσωματωμένος επαληθευτής και αναγνώριση έκδοσης
  • Πλήρης υποστήριξη διεθνοποίησης και πολλών θεμάτων

Τι είναι το UUID

Το UUID είναι ένας 128-bit αναγνωριστικός κωδικός, που αναπαρίσταται στην πρότυπη μορφή ως 36 χαρακτήρες με παύλες.

UUID v1: Βασισμένο σε χρονοσημάσματα και πληροφορίες δικτυακής κάρτας, ταξινομήσιμο με τον χρόνο, αλλά μπορεί να αποκαλύπτει χρόνο/τοποθεσία.

UUID v4: Βασισμένο σε τυχαίους αριθμούς, πιο συχνά χρησιμοποιούμενο, με καλή μοναδικότητα και ιδιωτικότητα.

UUID v7: Βασισμένο σε Unix χρόνο σε χιλιοστά δευτερολέπτων + τυχαίο, φυσικά ταξινομήσιμο, αποφεύγοντας τα προβλήματα ιδιωτικότητας του v1.

UUID v5: Βασισμένο σε έναν χώρο ονομάτων UUID και ένα όνομα, υπολογίζεται με SHA-1· το ίδιο είσοδο δίνει πάντα το ίδιο αποτέλεσμα.

UUID Γρήγορα Παραδείγματα

Πρότυπη μορφή:
550e8400-e29b-41d4-a716-446655440000
Με κεφαλαία:
550E8400-E29B-41D4-A716-446655440000
Χωρίς παύλες:
550e8400e29b41d4a716446655440000
Με αγκύλες:
{550e8400-e29b-41d4-a716-446655440000}

UUID Κοινές Χρήσεις

  • Μοναδικός αναγνωριστικός για εγγραφές βάσεων δεδομένων ή πόρους
  • Trace ID για καταγραφή και παρακολούθηση γεγονότων
  • Δημόσιοι αναγνωριστικοί που είναι δύσκολοι να προβλεφθούν
  • Ομοιόμορφος αναγνωριστικός για διασυστημικές διεπαφές

UUID Συχνές Ερωτήσεις & Παγίδες

  • Το v1 και η ιδιωτικότητα: Το v1 μπορεί να αποκαλύπτει χρόνο/θέση. Για προσοχή στην ιδιωτικότητα, προτείνεται η χρήση του v4.
  • Ισοδυναμία κεφαλαίων-πεζών: Η αναγνώριση είναι αδιάφορη στα κεφαλαία/πεζά γράμματα
  • Τα παύλες χρησιμοποιούνται μόνο για αναπαράσταση· προτείνεται να διατηρηθούν, εκτός αν υπάρχει περιορισμός
  • Η μορφή με αγκύλες είναι αποδεκτή σε ορισμένα περιβάλλοντα (π.χ. Windows Registry)
  • Το v5 είναι προσδιοριστικό (ίδιος χώρος ονομάτων + όνομα => ίδιο UUID). Κατάλληλο για σενάρια idempotency· όχι για σενάρια που απαιτούν απρόβλεπτα αποτελέσματα.

Πώς να χρησιμοποιήσετε το UUID σε γλώσσες προγραμματισμού

JavaScript
Δημιουργία
// 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 χρόνος + τυχαίο)
// 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
Δημιουργία
<?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();
UUID v7 (Unix χρόνος + τυχαίο)
<?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
Python
Δημιουργία
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
UUID v7 (Unix χρόνος + τυχαίο)
# 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
Δημιουργία
// go get github.com/google/uuid
import "github.com/google/uuid"

id := uuid.New()     // v4
id1 := uuid.NewUUID() // v1 (may return error)
UUID v7 (Unix χρόνος + τυχαίο)
// 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
Rust
Δημιουργία
// 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
UUID v7 (Unix χρόνος + τυχαίο)
// 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();
Java
Δημιουργία
import java.util.UUID;

UUID id = UUID.randomUUID(); // v4
UUID v7 (Unix χρόνος + τυχαίο)
// 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 */ }