Generera UUID:er (v1, v4, v5, v7)

genererar UUID:er (Universally Unique Identifier) i v1, v4, v5 (deterministisk) eller v7 (time-ordered), enligt RFC 4122

Varför använda UUID:n?

UUID:n (Universally Unique Identifier) är unika identifierare som används för att garantera unikhet över olika system och databaser utan att kräva central koordinering. De används ofta i distribuerade system och webbapplikationer för att generera unika identifierare för resurser.

UUID-versioner som stöds

Detta verktyg stöder följande UUID-versioner:

  • Version 1: baserad på tidsstämpel och MAC-adress.
  • Version 4: slumpmässigt genererad (den mest använda).
  • Version 5: baserad på ett SHA-1-avtryck av ett namespace och ett namn (deterministisk: samma par namespace + namn ger alltid samma UUID).
  • Version 7: tidsordnad, rekommenderad för primärnycklar i moderna databaser (lexikografisk sortering = kronologisk sortering).

UUID v5: namespace och namn

För att generera en UUID v5 måste du välja ett standardiserat namespace och ange ett namn:

  • DNS: att använda när namnet är ett domännamn (till exempel cdrn.fr).
  • URL: att använda när namnet är en URL (till exempel https://cdrn.fr/).
  • OID: att använda när namnet är en ISO-objektidentifierare.
  • X500: att använda när namnet är ett X.500-distinguished name.

Eftersom genereringen är deterministisk är UUID v5 särskilt lämplig för att producera reproducerbara identifierare från stabil data.

Så genererar du UUID:n

På startsidan kan du generera UUID:n genom att välja önskad version i en rullgardinsmeny och klicka på genereringsknappen. För version 5, ange dessutom namespace och namn.

Så snart en UUID är genererad visas den i en grön resultatrad som indikerar att den har genererats framgångsrikt. Om ett fel uppstår visar en röd rad motsvarande felmeddelande.

Kodexempel för att använda de genererade UUID:erna

Du kan använda de genererade UUID:erna i dina applikationer genom att integrera dem direkt i din kod. Här är ett exempel i PHP:


<?php
use Ramsey\Uuid\Uuid;

// Générer un UUID v4 (aléatoire)
$uuidV4 = Uuid::uuid4();

// Générer un UUID v5 (déterministe à partir d'un namespace et d'un nom)
$uuidV5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'cdrn.fr');

// Générer un UUID v7 (ordonnancé temporellement)
$uuidV7 = Uuid::uuid7();

echo "UUID v4 : " . $uuidV4->toString() . PHP_EOL;
echo "UUID v5 : " . $uuidV5->toString() . PHP_EOL;
echo "UUID v7 : " . $uuidV7->toString() . PHP_EOL;
?>

    

Validera och analysera UUID:n

Du kan också validera och analysera befintliga UUID:n för att bestämma version och giltighet. Här är ett kodexempel i PHP:


<?php
use Ramsey\Uuid\Uuid;

// Valider un UUID
$uuidString = '123e4567-e89b-12d3-a456-426614174000';
if (Uuid::isValid($uuidString)) {
    $uuid = Uuid::fromString($uuidString);
    echo "UUID valide de version : " . $uuid->getFields()->getVersion();
} else {
    echo "UUID invalide";
}
?>

    

Vanliga frågor

Vad är skillnaden mellan UUID v1, v4, v5 och v7?

v1 kombinerar en tidsstämpel och maskinens MAC-adress, vilket kan avslöja känslig information. v4 är rent slumpmässig (122 bitars slumpmässighet), det är den mest använda versionen. v5 är deterministisk: samma par namespace + namn ger alltid samma UUID tack vare en SHA-1-hash. v7 integrerar en tidsstämpel i millisekunder i början av identifieraren, vilket gör den kronologiskt sorterad och idealisk för primärnycklar.

Vad är sannolikheten för kollision av en UUID v4?

En UUID v4 har 122 slumpmässiga bitar, det vill säga ungefär 5,3 × 10^36 möjliga värden. För att nå 50 % kollisionsannolikhet (födelsedagsparadoxen) skulle man behöva generera ungefär 2,7 × 10^18 UUID:n. I praktiken, på en standardapplikation, är sannolikheten för kollision försumbar. Det är detta som gör att man kan generera identifierare på klientsidan utan koordinering med en central server.

Varför föredra UUID v7 för en databasprimärnyckel?

En UUID v4 infogad i ett B-tree-index orsakar stark fragmentering: varje infogning hamnar på en slumpmässig position, vilket försämrar prestanda och cacheanvändning. UUID v7 börjar med en tidsstämpel i millisekunder, så nya rader infogas alltid i slutet av indexet. Insättningsprestanda närmar sig då en BIGSERIAL, samtidigt som fördelarna med en universell identifierare bevaras.

Vad används DNS-, URL-, OID- och X500-namespaces för i UUID v5?

Dessa namespaces är fördefinierade UUID:n i RFC 4122 som fungerar som kontextuellt prefix för deterministisk generering. DNS används med ett domännamn, URL med en fullständig URL, OID med en ISO-objektidentifierare, X500 med ett LDAP-distinguished name. Du kan också definiera ditt eget privata namespace: en UUID v4 genererad en gång för din applikation, återanvänd som deterministisk rot för alla dina v5-identifierare.

UUID eller auto-increment för databasidentifierare?

Auto-increment förblir mycket effektivt för monolitiska databaser och avslöjar gärna skrivsekvensen, vilket kan vara oönskat på offentligt API. UUID:n passar bättre för distribuerade arkitekturer, generering på klientsidan, databasammanslagningar och offentlig exponering av ogenomskinliga identifierare. Den idealiska kompromissen 2026: UUID v7 som primärnyckel, som kombinerar universalitet, rimlig ogenomskinlighet och god indexprestanda.

Passerar de genererade UUID:erna en tredjepartsserver?

Genereringen utförs i cdrn.fr-miljön, utan anrop till en extern tjänst. För rent slumpmässiga (v4) eller tidsbaserade (v7) versioner krävs ingen känslig information som indata. För v5 används namespace och namn som du anger endast för lokal SHA-1-beräkning. Ingen genererad identifierare loggas, du kan använda verktyget för att producera UUID:n avsedda för konfidentiella sammanhang.

Exempelförfrågan

curl -X POST https://cdrn.fr/api/v1/tools/uuid-generator/execute \
  -H "Content-Type: application/json" \
  -d '{"version":"uuid_version_1","quantity":3,"namespace":"namespace_dns","name":"..."}'

Indatasschema

Fält Typ Obligatorisk Standard
version choice (uuid_version_1, uuid_version_4, uuid_version_5, uuid_version_7)
quantity integer 3
namespace choice (namespace_dns, namespace_url, namespace_oid, namespace_x500)
name string

Slutpunkter

  • GET https://cdrn.fr/api/v1/tools - listar alla tillgängliga verktyg
  • GET https://cdrn.fr/api/v1/tools/uuid-generator - hämtar schemat för detta verktyg
  • POST https://cdrn.fr/api/v1/tools/uuid-generator/execute - kör detta verktyg med en JSON-payload