UUID Generator | Genereer Online Universeel Unieke ID's

Wat is UUID?

UUID (Universally Unique Identifier) is een 128-bits identificatie die in computersystemen wordt gebruikt voor het uniek identificeren van informatie. UUID is gestandaardiseerd volgens RFC 4122 en garandeert, dankzij zijn enorme entropie, een praktisch nul kans op botsingen – wat betekent dat twee onafhankelijk gegenereerde UUID’s vrijwel zeker uniek zullen zijn.

UUID heeft een standaardformaat: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, waarbij elke x een hexadecimaal cijfer is (0-9, a-f), M de UUID-versie aangeeft en N de variant.

UUID Versies

UUID v1 (Tijdstempel + MAC-adres)

UUID v1 is gebaseerd op de huidige tijdstempel en een willekeurige waarde (in de browser in plaats van het MAC-adres). Het gebruikt 100-nanoseconde-intervallen vanaf 15 oktober 1582 (Gregoriaanse kalender).

Gebruik:

  • Situaties waarin u chronologische sortering van UUID’s nodig heeft
  • Debugging en logging (UUID bevat informatie over de aanmaaktijd)
  • Gedistribueerde systemen met tijdssynchronisatie

Voorbeeld: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

Voordelen:

  • UUID’s kunnen chronologisch worden gesorteerd op aanmaaktijd
  • Handig voor auditing en debugging
  • Bevat tijdstempel informatie

Nadelen:

  • Potentieel beveiligingsrisico – bevat tijdstempel
  • Bevat geen echt MAC-adres in de browser (vervangen door een willekeurige waarde)
  • Slechte DB-locatie (tijdstempel bevindt zich in de low-order bits)

UUID v3 (MD5-hash)

UUID v3 wordt gegenereerd met behulp van een MD5-hash van de UUID-naamruimte en de naam. Deterministisch – dezelfde naamruimte + naam genereert altijd dezelfde UUID.

Gebruik:

  • Conversie van URL’s, DNS-namen of andere identificaties naar UUID
  • Situaties waarin u reproduceerbare UUID’s nodig heeft
  • Mapping tussen verschillende identificatiesystemen

Voorbeeld: a3bb189e-8bf9-3888-9912-ace4e6543002

Voordelen:

  • Deterministisch (zelfde invoer = zelfde uitvoer)
  • Ideaal voor de conversie van bekende identificaties
  • Geen botsingen voor verschillende invoeren

Nadelen:

  • MD5 is een verouderd algoritme (geef de voorkeur aan v5)
  • Vereist naamruimte en naam
  • Kan de oorspronkelijke invoer niet herstellen

UUID v4 (Willekeurig) - AANBEVOLEN

De meest gebruikte UUID-versie. UUID v4 wordt puur willekeurig gegenereerd met behulp van een cryptografisch veilige generator voor willekeurige getallen (crypto.getRandomValues()).

Gebruik:

  • Primaire sleutels voor databases
  • Sessie-identificaties (session ID’s)
  • Unieke bestandsnamen
  • API-tokens
  • Algemene doeleinden, waar u een gegarandeerd unieke ID nodig heeft

Voorbeeld: f47ac10b-58cc-4372-a567-0e02b2c3d479

Voordelen:

  • Maximale entropie en veiligheid
  • Geen afhankelijkheid van tijd of systeemparameters
  • Eenvoudigste implementatie

Kans op botsing: Bij het genereren van 1 miljard UUID’s per seconde gedurende 100 jaar is de kans op een botsing ongeveer 0,00000006%.

UUID v5 (SHA-1-hash)

UUID v5 is hetzelfde als v3, maar gebruikt SHA-1 in plaats van MD5. Een moderner en veiliger alternatief voor v3.

Gebruik:

  • Hetzelfde als v3, maar met betere beveiliging
  • Te verkiezen boven v3 voor nieuwe projecten
  • Genereren van UUID’s uit URL’s, DNS-namen, OID’s, X.500 DN

Voorbeeld: 886313e1-3b8a-5372-9b90-0c9aee199e5d

Voordelen:

  • Deterministisch
  • SHA-1 is robuuster dan MD5
  • Geschikt voor mapping tussen systemen

Nadelen:

  • SHA-1 wordt ook als verouderd beschouwd (maar nog steeds veiliger dan MD5)
  • Vereist naamruimte en naam

UUID v6 (Gesorteerde tijdstempel)

UUID v6 is een verbeterde versie van v1 met opnieuw gerangschikte tijdsbits voor betere DB-indexering. Ontworpen om problemen met locatie in databases op te lossen.

Gebruik:

  • Primaire sleutels voor databases met tijdssortering
  • Systemen die chronologische sortering en DB-prestaties vereisen
  • Moderner alternatief voor v1

Voorbeeld: 1ec9414c-232a-6b00-b3c8-9e6bdeced846

Voordelen:

  • Betere DB-locatie dan v1 (tijdstempel in high-order bits)
  • Chronologische sortering
  • Compatibel met de UUID-standaard

Nadelen:

  • Minder gebruikt dan v1/v4
  • Bevat nog steeds tijdsinformatie (beveiligingsrisico)

UUID v7 (Unix tijdstempel)

UUID v7 gebruikt de Unix tijdstempel (milliseconden sinds 1970) + willekeurige bits. De nieuwste UUID-versie met de beste DB-locatie.

Gebruik:

  • Moderne primaire sleutels voor databases
  • Systemen die prestaties + tijdssortering vereisen
  • Vervanging voor v1/v6 in nieuwe projecten

Voorbeeld: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f

Voordelen:

  • Beste DB-locatie van alle versies
  • Unix tijdstempel is standaard
  • Combineert de voordelen van willekeurigheid en tijdssortering

Nadelen:

  • Relatief nieuwe specificatie (RFC 4122bis)
  • Minder ondersteund in oudere systemen

Welke UUID-versie moet u gebruiken?

Beslisgids

Heeft u maximale veiligheid en willekeurigheid nodig? → Gebruik UUID v4 (meest gangbare keuze)

Heeft u tijdssortering en DB-prestaties nodig? → Gebruik UUID v7 (modern) of UUID v6 (standaard)

Heeft u reproduceerbare UUID’s nodig uit bestaande identificaties? → Gebruik UUID v5 (SHA-1) of UUID v3 (MD5, verouderd)

Heeft u een tijdstempel en audittrail nodig? → Gebruik UUID v1 (verouderd, slechtere DB-prestaties)

Databases

Voor nieuwe projecten: UUID v7 of v4

  • v7 is ideaal voor tijdssortering + prestaties
  • v4 voor maximale willekeurigheid zonder tijdsinformatie

Voor oudere systemen: UUID v1 of v6

  • v6 heeft een betere DB-locatie dan v1
  • v1 wordt breed ondersteund

Voordelen van UUID als primaire sleutel:

  • Globale uniciteit – U kunt gegevens uit verschillende databases samenvoegen zonder conflicten
  • Beveiliging – In tegenstelling tot sequentiële ID’s (1, 2, 3…) kunnen de volgende waarden niet worden geraden
  • Gedistribueerde systemen – UUID’s kunnen onafhankelijk op meerdere servers worden gegenereerd zonder coördinatie
  • Database samenvoegen – Bij het samenvoegen van twee databases ontstaan er geen conflicten

Nadelen:

  • Grotere omvang (16 bytes vs 4-8 bytes voor integer)
  • Langzamere indexering in sommige databases (gebruik v6/v7 voor betere prestaties)
  • Minder leesbaar voor mensen

API en Web Services

  • REST API – Unieke identificaties voor resources
  • GraphQL – Globale identificaties voor nodes
  • Webhooks – Tracking van verzoeken en antwoorden
  • Tokens – Sessie-ID’s, refresh-tokens

Bestanden en Opslag

  • Bestandsnamen – Voorkomen van botsingen bij het uploaden
  • S3/Cloud Storage – Unieke paden naar objecten
  • Cache keys – Identificaties in cachesystemen

Frontend Toepassingen

  • React/Vue componenten – Unieke keys voor lijsten
  • Tijdelijke ID’s – ID’s voordat ze in de database worden opgeslagen
  • Lokale opslag – Sleutels voor opgeslagen gegevens
  • Offline-first applicaties – Genereren van ID’s zonder serververbinding

Geavanceerde Functies van de Generator

UUID genereren met een aangepaste tijd

Voor tijdsgebaseerde versies (v1, v6, v7) kunt u elke tijdstempel selecteren met behulp van de datum-tijdkiezer. Dit is handig voor:

Testen:

  • Simuleren van in het verleden aangemaakte UUID’s
  • Testen van tijdssortering in databases
  • Reproduceren van UUID’s voor debugging

Datamigratie:

  • Genereren van UUID’s met historische tijdstempels
  • Backfilling van gegevens met correcte tijdstempelwaarden
  • Importeren van gegevens uit verschillende tijdsperioden

Auditing en compliance:

  • Reconstructie van UUID’s op basis van de aanmaaktijd van een record
  • Retroactief genereren van identificaties

Voorbeeld van gebruik:

  1. Selecteer versie v1, v6 of v7
  2. Stel de datum en tijd in met de datum-tijdkiezer
  3. Genereer UUID met uw eigen tijdstempel

Hash-gebaseerde UUID (v3, v5)

Voor deterministische UUID’s kunt u versie v3 (MD5) of v5 (SHA-1) gebruiken:

Hoe te gebruiken:

  1. Selecteer de naamruimte op basis van het type van uw identificatie
  2. Voer de naam/waarde in
  3. Genereer de UUID

Voorbeelden:

NaamruimteNaam (invoer)Gebruik
DNSexample.comConversie van domeinnaam naar UUID
DNSgoogle.comElke website heeft een unieke UUID
URLhttps://example.com/pageConversie van URL naar UUID
URLhttps://api.example.com/users/123API-eindpunt als UUID
OID1.3.6.1.4.1.343Object Identifier naar UUID
X.500CN=John Doe,O=CompanyDistinguished Name naar UUID

Belangrijke kenmerken:

  • Deterministisch: Zelfde invoer = altijd dezelfde UUID
  • Reproduceerbaar: U kunt de UUID altijd opnieuw aanmaken
  • Consistent: Dezelfde UUID in verschillende systemen
  • Kan niet worden gedecodeerd: Uit de UUID kan de oorspronkelijke naam niet worden herleid
  • ℹ️ Eén UUID: Voor v3/v5 wordt altijd slechts één UUID gegenereerd (zelfde invoer = zelfde uitvoer)

Praktisch gebruik:

// Voorbeeld: Conversie van URL naar UUID v5
Naamruimte: URL
Naam: https://example.com/api/users/123
Resultaat: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Zelfde invoer = altijd dezelfde UUID
Naamruimte: DNS
Naam: google.com
Resultaat: altijd dezelfde UUID voor google.com

Hoe UUID veilig te gebruiken?

Cryptografische Beveiliging

Onze generator gebruikt crypto.getRandomValues(), wat een cryptografisch veilige generator voor willekeurige getallen is. In tegenstelling tot Math.random(), dat voorspelbaar is en ongeschikt voor beveiligingsdoeleinden, biedt crypto.getRandomValues() echte entropie die geschikt is voor:

  • Genereren van beveiligingstokens
  • Sessie-ID’s
  • API-sleutels
  • Cryptografische toepassingen

Vergelijking van UUID-versies

VersieBasisBotsingenTijdssorteringDB-prestatiesGebruik
v1Tijdstempel + MACLaag✅ Ja❌ SlechterVerouderd, audit
v3MD5-hashGeen (deterministisch)❌ Nee⚠️ GemiddeldConversies (verouderd)
v4WillekeurigExtreem laag❌ Nee⚠️ GemiddeldAlgemeen gebruik
v5SHA-1-hashGeen (deterministisch)❌ Nee⚠️ GemiddeldConversies (aanbevolen)
v6Gesorteerde tijdstempelLaag✅ Ja✅ BeterModerne DB met tijd
v7Unix tijdstempelLaag✅ Ja✅ BesteNieuwe projecten

UUID vs andere identificaties

TypeGrootteBotsingenTijdssorteringGebruik
Auto-increment ID4-8 bytesGegarandeerd uniek binnen tabelEenvoudige toepassingen, lokale DB
UUID v416 bytesPraktisch onmogelijkGedistribueerde systemen, API
UUID v716 bytesPraktisch onmogelijkModerne DB met prestaties
ULID16 bytesPraktisch onmogelijkUUID + lexicografische sortering
Snowflake ID8 bytesGegarandeerd uniek bij juiste configuratieTwitter, gedistribueerde systemen
NanoIDConfigureerbaarAfhankelijk van lengteURL-vriendelijke ID’s

Implementatie in verschillende talen

JavaScript/TypeScript

// UUID v4 - Eenvoudigste manier (moderne browsers)
const uuid = crypto.randomUUID();

// UUID v4 - Handmatige implementatie
function generateUUIDv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// UUID v7 - Aanbevolen voor databases
function generateUUIDv7() {
  const timestamp = Date.now();
  const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
  const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');

  const randomBytes = crypto.getRandomValues(new Uint8Array(10));
  const randomHex = Array.from(randomBytes)
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');

  return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}

Python

import uuid

# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'

# UUID v1
uuid_v1 = str(uuid.uuid1())

Java

import java.util.UUID;

// UUID v4
String uuidV4 = UUID.randomUUID().toString();

PHP

// UUID v4 (PHP 7+)
function generateUUID() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

C#

using System;

// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();

Best Practices

UUID opslaan in de database

PostgreSQL:

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

MySQL 8.0+:

CREATE TABLE users (
    id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tip: In MySQL slaat u UUID op als BINARY(16) in plaats van CHAR(36) om ruimte te besparen en sneller te indexeren.

UUID Validatie

function isValidUUID(uuid) {
  const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return regex.test(uuid);
}

UUID Conversie

// Koppelteken verwijderen
const compact = uuid.replace(/-/g, '');

// Koppelteken terug toevoegen
function formatUUID(compactUuid) {
  return [
    compactUuid.substring(0, 8),
    compactUuid.substring(8, 12),
    compactUuid.substring(12, 16),
    compactUuid.substring(16, 20),
    compactUuid.substring(20, 32)
  ].join('-');
}

Probleemoplossing (Troubleshooting)

UUID v3/v5 werkt niet

Probleem: Na het selecteren van v3 of v5 wordt er niets gegenereerd

Oplossing:

  1. ✅ Controleer of u het veld “Naam” heeft ingevuld - dit is verplicht!
  2. ✅ Selecteer de juiste naamruimte op basis van het type van uw invoer
  3. ✅ Voorbeelden van geldige invoeren:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Elke tekst: mijn-applicatie-v1

Tip: Probeer eerst een eenvoudige waarde zoals test en naamruimte DNS.

Tijdsgebaseerde UUID (v1, v6, v7) heeft een vreemde tijd

Probleem: De gegenereerde UUID heeft een onverwachte tijdstempel

Oplossing:

  1. ✅ Controleer de datum-tijdkiezer - is de juiste tijd ingesteld?
  2. ✅ De datum-tijdkiezer gebruikt uw lokale tijdzone
  3. ✅ Laat de datum-tijdkiezer leeg voor de huidige tijd

UUID kan niet worden gekopieerd

Probleem: De knop “Kopieer alles” werkt niet

Oplossing:

  1. ✅ Controleer of u UUID’s heeft gegenereerd (ze zijn niet leeg)
  2. ✅ Sommige browsers vereisen HTTPS voor de clipboard API
  3. ✅ Selecteer anders de tekst in het tekstgebied en kopieer handmatig (Ctrl+C)

Veelgestelde Vragen (FAQ)

Kan er een UUID-botsing optreden? Theoretisch wel, maar de kans is astronomisch klein. Bij het genereren van 1 miljard UUID v4 per seconde gedurende 100 jaar is de kans op een botsing ongeveer 0,00000006%. In de praktijk zal een botsing nooit optreden.
Is UUID geschikt als primaire sleutel in een database? Dat hangt af van het gebruik. UUID is ideaal voor gedistribueerde systemen en situaties waarin u globale uniciteit nodig heeft. Voor eenvoudige applicaties met één database kan auto-increment efficiënter zijn.
Zijn de UUID's die met deze tool zijn gegenereerd veilig? Ja, we gebruiken de Web Crypto API (`crypto.getRandomValues()`), die cryptografisch veilige willekeurige waarden levert. Alles gebeurt lokaal in uw browser.
Wat is het verschil tussen UUID-versies? - **v1**: Tijdstempel + MAC/willekeurig - chronologische sortering, slechtere DB-prestaties - **v3/v5**: Hash-gebaseerd - deterministisch, voor de conversie van bekende identificaties - **v4**: Willekeurig - het veiligst, meest gebruikt - **v6**: Omgezet tijdstempel - betere DB-prestaties dan v1 - **v7**: Unix tijdstempel - de beste DB-prestaties + tijdssortering
Welke UUID-versie moet ik gebruiken? Voor de meeste gevallen gebruikt u **v4** (willekeurig). Voor databases met tijdssortering gebruikt u **v7** (modern) of **v6** (standaard). Voor de conversie van bekende identificaties (URL, DNS) gebruikt u **v5** (SHA-1).
Kan ik UUID gebruiken voor tokens en API-sleutels? UUID v4 is geschikt voor sessie-ID's en vergelijkbare tokens. Voor API-sleutels kunt u overwegen langere willekeurige strings te gebruiken (bijv. 256-bits waarden) of gespecialiseerde bibliotheken.
Hoe groot zijn UUID's? Een UUID is 128 bits (16 bytes). In stringformaat met koppeltekens neemt het 36 tekens in beslag. Zonder koppeltekens 32 hexadecimale tekens.

Alternatieven voor UUID

ULID (Universally Unique Lexicographically Sortable Identifier)

  • 128-bits ID (hetzelfde als UUID)
  • Lexicografisch sorteerbaar op aanmaaktijd
  • Compactere weergave (26 tekens in plaats van 36)
  • Hoofdletterongevoelige base32-codering

Voorbeeld: 01ARZ3NDEKTSV4RRFFQ69G5FAV

NanoID

  • Kleiner dan UUID (standaard 21 tekens)
  • URL-vriendelijk (geen speciale tekens)
  • Snellere generatie
  • Configureerbare lengte en alfabet

Voorbeeld: V1StGXR8_Z5jdHi6B-myT

Snowflake ID (Twitter)

  • 64-bits ID (kleiner dan UUID)
  • Tijdssorteerbaar
  • Bevat worker ID en sequentienummer
  • Vereist gecentraliseerde configuratie

Voorbeeld: 1234567890123456789

Prestaties en Optimalisatie

Generatiesnelheid

Onze generator kan genereren:

  • 1 UUID: < 1 ms
  • 100 UUID: ~10-20 ms
  • 1000 UUID: ~100-200 ms

Prestatie Tips

  1. Batch genereren – Als u veel UUID’s nodig heeft, genereer ze dan tegelijk in plaats van één voor één
  2. Opslaan in DB – Indexeer UUID-kolommen voor snel zoeken
  3. Compressie – Sla UUID op in binaire vorm (16 bytes) in plaats van een string (36 bytes)
  4. Caching – In sommige gevallen kunt u UUID’s vooraf genereren en cachen

Voor Ontwikkelaars

Structuur van UUID v4

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 bits willekeurige data (node)
|        |    |    └────── 16 bits willekeurige data met variant (clock_seq)
|        |    └─────────── 12 bits willekeurige data + 4 bits versie (time_hi_and_version)
|        └──────────────── 16 bits willekeurige data (time_mid)
└───────────────────────── 32 bits willekeurige data (time_low)
  • Versie (4 bits): altijd 0100 (binair) = 4 (hex)
  • Variant (2-3 bits): altijd 10 (binair) voor RFC 4122

UUID Testen

// Jest test
describe('UUID Generator', () => {
  test('generates valid UUID v4', () => {
    const uuid = generateUUIDv4();
    const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    expect(regex.test(uuid)).toBe(true);
  });

  test('generates unique UUIDs', () => {
    const uuid1 = generateUUIDv4();
    const uuid2 = generateUUIDv4();
    expect(uuid1).not.toBe(uuid2);
  });
});

Beveiligingsaspecten

Wat u niet moet doen met UUID

Gebruik UUID v1 niet voor gevoelige applicaties – Bevat een tijdstempel, wat een beveiligingsrisico kan zijn

Gebruik Math.random() niet voor het genereren van UUID – Dit is niet cryptografisch veilig

Vertrouw niet op UUID voor autorisatie – UUID kan worden geraden (zij het met een extreem kleine kans)

Sla UUID niet op in cookies zonder versleuteling – Gebruik gesigneerde cookies of JWT

Wat u wel moet doen

Gebruik UUID v4 voor de meeste gevallen – Hoogste entropie en veiligheid

Combineer UUID met andere beveiligingsmaatregelen – Voor sessiebeheer, gebruik HTTPS, HttpOnly cookies en een korte vervaldatum

Valideer UUID op de server – Controleer altijd het formaat en de versie van de UUID

Gebruik cryptografisch veilige bronnen van willekeurigheidcrypto.getRandomValues() in de browser, /dev/urandom op Linux

Interessante Feiten

  • Aantal mogelijke UUID v4: 2^122 ≈ 5.3 × 10^36 (340 undeciljoenen)
  • Noodzakelijke botsing: Voor 50% kans op een botsing moet u 2.71 × 10^18 UUID’s genereren (2.71 quintiljoenen)
  • Grootte van alle mogelijke UUID’s: Als we elke UUID als 16 bytes zouden opslaan, zou de hele ruimte 85 zettabytes in beslag nemen (85 miljard terabytes)
  • Oorsprong: UUID werd gestandaardiseerd als onderdeel van DCE (Distributed Computing Environment) in 1990