Whiz Tools

UUID-generator

Genererad UUID

UUID-struktur
Tid låg

UUID Generator

Introduktion

En Universellt Unik Identifierare (UUID) är ett 128-bitarsnummer som används för att identifiera information i datorsystem. UUID:er är standardiserade av Open Software Foundation (OSF) som en del av Distributed Computing Environment (DCE). Dessa identifierare är utformade för att vara unika över både rum och tid, vilket gör dem idealiska för olika tillämpningar i distribuerade system och bortom.

Detta UUID-generatorverktyg låter dig skapa både version 1 (tidsbaserad) och version 4 (slumptalsbaserad) UUID:er. Dessa identifierare är användbara i olika scenarier där unik identifiering krävs, såsom databasnycklar, distribuerade system och nätverksprotokoll.

Hur UUID:er fungerar

UUID-struktur

En UUID representeras typiskt som 32 hexadecimala siffror, visade i fem grupper separerade av bindestreck, i formen 8-4-4-4-12 för totalt 36 tecken (32 alfanumeriska tecken och 4 bindestreck). Till exempel:

550e8400-e29b-41d4-a716-446655440000

De 128 bitarna av en UUID är uppdelade i specifika fält, där varje fält bär olika information beroende på UUID-versionen:

  • 32 bitar för time_low-fältet
  • 16 bitar för time_mid-fältet
  • 16 bitar för time_hi_and_version-fältet
  • 8 bitar för clock_seq_hi_and_reserved-fältet
  • 8 bitar för clock_seq_low-fältet
  • 48 bitar för node-fältet

Här är en diagram som illustrerar UUID-strukturen:

A B C D E F A: time_low (32 bitar) B: time_mid (16 bitar) C: time_hi_and_version (16 bitar) D: clock_seq_hi_and_reserved (8 bitar) E: clock_seq_low (8 bitar) F: node (48 bitar)

UUID-versioner

Det finns flera versioner av UUID:er, var och en med sin egen generationsmetod:

  1. Version 1 (Tidsbaserad): Använder den aktuella tidsstämpeln och MAC-adressen för datorn.
  2. Version 2 (DCE-säkerhet): Liknande version 1, men inkluderar en lokal domänidentifierare.
  3. Version 3 (Namn-baserad, MD5): Genereras genom att hash'a en namnrymdsidentifierare och namn.
  4. Version 4 (Slumptalsbaserad): Genereras med en slumptals- eller pseudo-slumptalsgenerator.
  5. Version 5 (Namn-baserad, SHA-1): Liknande version 3, men använder SHA-1 hashning.

Detta verktyg fokuserar på att generera version 1 och version 4 UUID:er.

Formel

Generering av version 1 UUID

Version 1 UUID:er genereras med följande komponenter:

  1. Tidsstämpel: Ett 60-bitarsvärde som representerar antalet 100-nanosekundsintervall sedan den 15 oktober 1582 (datumet för den gregorianska reformen av den kristna kalendern).
  2. Klocksekvens: Ett 14-bitarsvärde som används för att undvika dubbletter om klockan ställs tillbaka.
  3. Nod: Ett 48-bitarsvärde, vanligtvis härlett från MAC-adressen för datorn.

Formeln för att generera en version 1 UUID kan uttryckas som:

UUID = (tidsstämpel * 2^64) + (klocksekvens * 2^48) + nod

Generering av version 4 UUID

Version 4 UUID:er genereras med en kryptografiskt stark slumptalsgenerator. Formeln är helt enkelt:

UUID = slumptal_128_bitars_nummer

Med specifika bitar inställda för att indikera versionen (4) och varianten.

Användningsfall

UUID:er har många tillämpningar inom olika områden av datavetenskap och mjukvaruteknik:

  1. Databasnycklar: UUID:er används ofta som primära nycklar i databaser, särskilt i distribuerade system där flera noder kan generera poster samtidigt.

  2. Distribuerade system: I storskaliga distribuerade system hjälper UUID:er till att unikt identifiera resurser, transaktioner eller händelser över flera noder eller datacenter.

  3. Innehållsadresssering: UUID:er kan användas för att skapa unika identifierare för innehåll i innehållsadressbara lagringssystem.

  4. Sessionshantering: Webbapplikationer använder ofta UUID:er för att hantera användarsessioner, vilket säkerställer att varje session har en unik identifierare.

  5. IoT-enhetsidentifiering: I Internet of Things (IoT) applikationer kan UUID:er användas för att unikt identifiera individuella enheter i ett nätverk.

Alternativ

Även om UUID:er är allmänt använda finns det alternativa metoder för att generera unika identifierare:

  1. Auto-inkrementerande ID:n: Enkla och vanligt förekommande i enskilda databassystem, men inte lämpliga för distribuerade miljöer.

  2. Tidsbaserade ID:n: Kan vara användbara för tidsordnade data men kan stöta på kollisioner i högkonkurrensscenarier.

  3. Snowflake ID:n: Utvecklade av Twitter, dessa ID:n kombinerar tidsstämpel och arbetarnummer för att generera unika ID:n i distribuerade system.

  4. ULID (Universellt Unik Lexikografiskt Sorterbar Identifierare): Ett nyare alternativ som syftar till att vara mer användarvänligt och sorteringsbart än UUID:er.

Historia

Konceptet med UUID:er introducerades först i Apollo Network Computing System och standardiserades senare av Open Software Foundation (OSF) som en del av Distributed Computing Environment (DCE) på 1990-talet. Den första specifikationen publicerades 1997 som ISO/IEC 11578:1996 och reviderades senare 2005 som en del av ISO/IEC 9834-8:2005.

Nyckelmilstolpar i UUID-historien:

  • 1980-talet: Apollo Computer utvecklar UUID-konceptet för sitt Network Computing System.
  • 1997: Första UUID-specifikationen publiceras som ISO/IEC 11578:1996.
  • 2005: UUID-specifikationen revideras och publiceras som en del av ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definierar UUID-formatet och generationsalgoritmerna som används idag.

Över tid har UUID:er blivit ett viktigt verktyg i distribuerade system och databasedesign, med olika implementationer och anpassningar över olika programmeringsspråk och plattformar.

Kodexempel

Här är exempel på att generera UUID:er i olika programmeringsspråk:

import uuid

## Generera en version 4 (slumptalsbaserad) UUID
slumptals_uuid = uuid.uuid4()
print(f"Version 4 UUID: {slumptals_uuid}")

## Generera en version 1 (tidsbaserad) UUID
tidsbaserad_uuid = uuid.uuid1()
print(f"Version 1 UUID: {tidsbaserad_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generera en version 4 (slumptalsbaserad) UUID
const slumptalsUuid = uuidv4();
console.log(`Version 4 UUID: ${slumptalsUuid}`);

// Generera en version 1 (tidsbaserad) UUID
const tidsbaseradUuid = uuidv1();
console.log(`Version 1 UUID: ${tidsbaseradUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Generera en version 4 (slumptalsbaserad) UUID
        UUID slumptalsUuid = UUID.randomUUID();
        System.out.println("Version 4 UUID: " + slumptalsUuid);

        // Generera en version 1 (tidsbaserad) UUID
        UUID tidsbaseradUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("Version 1 UUID: " + tidsbaseradUuid);
    }
}
require 'securerandom'

## Generera en version 4 (slumptalsbaserad) UUID
slumptals_uuid = SecureRandom.uuid
puts "Version 4 UUID: #{slumptals_uuid}"

## Ruby har ingen inbyggd metod för version 1 UUID:er
## Du skulle behöva använda ett gem som 'uuidtools' för det
<?php
// Generera en version 4 (slumptalsbaserad) UUID
$slumptalsUuid = 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)
);
echo "Version 4 UUID: " . $slumptalsUuid . "\n";

// PHP har ingen inbyggd metod för version 1 UUID:er
// Du skulle behöva använda ett bibliotek som 'ramsey/uuid' för det
?>

Referenser

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback