Skip to main content

Wird gesucht…

Tools
Artikel
Alle Ergebnisse anzeigen
Kompakt ID Generator

NanoID Generator - kompakte, URL-sichere IDs

Kompakter, URL-sicherer Bezeichner - kürzer als eine UUID, mit frei wählbarem Alphabet und Länge, erzeugt über die Web Crypto API.

NanoID Generator
Client-side

Was ist NanoID?

NanoID erzeugt kompakte, URL-sichere Bezeichner. Voreingestellt sind 21 Zeichen aus einem Alphabet von 64 Zeichen: A-Za-z0-9_-. Das Ergebnis sieht so aus: V1StGXR8_Z5jdHi6B-myT.

Der Reiz liegt im Verhältnis von Länge zu Entropie: 21 Zeichen tragen 126 Bit und damit etwas mehr als die 122 Bit einer UUID v4 - bei 15 Zeichen weniger Platzbedarf und ohne Sonderzeichen, die in URLs kodiert werden müssten.

Der Algorithmus

NanoID zieht Zufallsbytes und bildet sie auf das Alphabet ab. Der wesentliche Punkt ist die Verwerfungsmethode: Werte, die außerhalb eines Vielfachen der Alphabetlänge liegen, werden verworfen statt per Modulo abgebildet.

Das ist kein Detail. Ein einfaches byte % 64 wäre hier zufällig unauffällig, weil 64 die 256 glatt teilt - bei einem Alphabet von 62 Zeichen wären die ersten Zeichen jedoch messbar häufiger. Dieser Generator verwendet durchgehend Verwerfungssampling, unabhängig vom gewählten Alphabet.

NanoID und UUID v4 im Vergleich

Bei Entropie und Zufallsquelle liegen beide gleichauf. Die Unterschiede sind praktisch: NanoID ist kürzer, enthält keine Bindestriche und ist ohne Kodierung URL-sicher. UUID ist standardisiert, hat native Datenbanktypen und wird von Werkzeugen als UUID erkannt.

Als Regel: für interne Datenbankschlüssel UUID, für Bezeichner, die in URLs auftauchen und kurz sein sollen, NanoID.

Alphabet und Länge anpassen

Beide Parameter sind frei wählbar, und sie hängen zusammen: die Entropie beträgt log2(Alphabetlänge) × Länge. Ein Alphabet nur aus Ziffern liefert pro Zeichen 3,32 Bit, das Standardalphabet 6 Bit.

Ein reines Hex- oder Ziffernalphabet ist sinnvoll, wenn Werte in Systeme fließen, die Groß-/Kleinschreibung nicht unterscheiden. Verlängern Sie dann die ID, um die verlorene Entropie auszugleichen.

Typische Einsatzgebiete

NanoID passt für kurze Freigabelinks, Einladungscodes, öffentliche Objekt-IDs in REST-APIs, Dateinamen für Uploads und alles, was Nutzer sehen oder kopieren. Weniger geeignet ist es dort, wo Sortierbarkeit oder ein Entstehungszeitpunkt gebraucht wird.

NanoID in JavaScript und Node.js

Das Paket nanoid ist sehr klein und nutzt in Node crypto.randomFillSync, im Browser crypto.getRandomValues.

import { nanoid, customAlphabet } from 'nanoid';

nanoid();                                  // 21 Zeichen
nanoid(10);                                // kürzer
const numeric = customAlphabet('0123456789', 12);
numeric();                                 // nur Ziffern

Für andere Sprachen gibt es Portierungen unter anderem für Python, Go, Rust, PHP und Java.

Sicherheitshinweise

Drei Punkte sind wichtig: verwenden Sie immer einen CSPRNG und nie Math.random(); kürzen Sie die Länge nur mit Blick auf das erwartete Volumen; und behandeln Sie eine NanoID nicht als Geheimnis, nur weil sie schwer zu erraten ist - für Zugriffsschutz brauchen Sie eine Autorisierungsprüfung, keinen unvorhersagbaren Bezeichner.

Frequently Asked Questions

NanoID ist ein kompakter Bezeichner, standardmäßig 21 Zeichen aus einem URL-sicheren Alphabet mit 64 Zeichen. Bei dieser Länge entspricht die Kollisionswahrscheinlichkeit etwa der von UUID v4, bei 15 Zeichen weniger Länge.

Bei der Standardlänge von 21 Zeichen ja: 126 Bit Entropie gegenüber 122 Bit bei UUID v4. Beide beziehen ihren Zufall aus einem CSPRNG. Verkürzen Sie die Länge, sinkt die Entropie entsprechend.

Nein, und das ist beabsichtigt. NanoID enthält keinen Zeitstempel und verrät damit nichts über den Entstehungszeitpunkt. Wenn Sie Sortierbarkeit brauchen, verwenden Sie ULID oder UUID v7.

Das hängt vom erwarteten Volumen ab. Zehn Zeichen aus dem Standardalphabet ergeben 60 Bit - ausreichend für kurzlebige Freigabelinks, zu wenig für dauerhafte Primärschlüssel. Für öffentliche, langlebige Bezeichner sollten Sie bei 21 Zeichen bleiben.

Need identifiers in production?

Use our REST API or copy-ready Dev Lab snippets for 25+ languages.