Nano ID-generator – justerbare, URL-sikre, kollisionsresistente identifikatorer
Denne side genererer unikke identifikatorer i Nano ID-formatet. Du specificerer længde og det tilladte tegnsæt (alfabetet), og værktøjet producerer et eller flere ID'er, der er kompakte, URL-sikre og designet til at undgå sammenstød. Genereringen sker lokalt i browseren ved hjælp af crypto.getRandomValues – der sendes intet til nogen server.
Hvad gør denne side anderledes
I modsætning til UUID'er (der har en fast længde på 36 tegn med bindestreger) eller ULID (26 tegn) har Nano ID en standardlængde på 21 tegn – væsentligt kortere end UUID, samtidig med at den tilbyder sammenlignelig kollisionsmodstand. Både længden og alfabetet er fuldt justerbare:
- Længde kan sættes mellem 2 og 36 tegn.
- Alfabet er et redigerbart tekstfelt, der skal indeholde mindst 2 forskellige tegn.
- Ændring af en af parametrene regenererer straks ID'erne.
- Hvis alfabetet reduceres til et enkelt tegn, ryddes resultaterne, ID-tælleren viser 0, og knappen "Kopier alle" deaktiveres.
- De genererede ID'er bruger som standard kun URL-sikre tegn – ingen tegn, der skal escapes i webadresser.
Denne kombination af justerbar længde og alfabet gør det muligt at tilpasse ID'erne til stort set enhver begrænsning i formatkrav, lagerplads eller overførselsomkostninger.
Længde, alfabet og parametre
Standardlængden på 21 tegn er et kompromis: med et alfabet på 64 URL-sikre tegn (A-Z, a-z, 0-9, samt _ og -) giver det omkring 2⁶⁴ ⋅ 21 ≈ 2¹²⁶ mulige kombinationer – nok til de fleste systemer, men en tredjedel kortere end UUID's 36 tegn.
Længden reguleres med en skyder eller et talinput, fra 2 (meget kort, høj risiko for kollision) til 36 (længere end UUID, men stadig uden bindestreger). Hvert enkelt ID oprettes ved at trække tilfældige bytes fra crypto.getRandomValues og mappe dem mod alfabetet. Da browserens tilfældighedskilde er kryptografisk sikker, er ID'erne praktisk talt uforudsigelige.
Alfabetet kan tilpasses frit. Du kan f.eks.:
- Bruge kun cifre (0–9) for numeriske ID'er:
48291(længde 5). - Undgå forvirrende tegn som
0ogO,1ogl,I– skriv dit eget alfabet uden dem. - Tilføje specialtegn som
+eller!, hvis de ikke skal bruges i URL'er.
Som standard er alfabetet: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-. Bemærk, at bindestreg og understregning er inkluderet – disse er URL-sikre og almindelige i Nano ID-implementeringer.
Tabel: Parametre og områder
| Parameter | Standard | Område | Bemærkning |
|---|---|---|---|
| Længde | 21 | 2–36 | Ændring regenererer ID'er |
| Alfabet | URL-sikre | Mindst 2 tegn | Hvis kun 1 tegn: resultat ryddes |
| Antal ID'er | - | 1–100 | Ændring regenererer ID'er |
| Format | Nano ID | Kun Nano ID | Valgt via dropdown |
Antallet af ID'er, der genereres samtidig, kan vælges mellem 1 og 100. Hvis du f.eks. har brug for 50 unikke ID'er til en batch-import, kan du generere dem alle på én gang og kopiere listen.
Kollisionsmodstand og matematikken bag
Nano ID's kollisionsmodstand afhænger af både længde og alfabetstørrelse. Jo større alfabetet er, og jo længere ID'et er, desto lavere er sandsynligheden for, at to ID'er er ens.
Sandsynligheden for en kollision kan tilnærmes med fødselsdagsangrebets klassiske formel:
P(k, N) ≈ 1 - e^(-k(k-1)/(2N))
hvor k er antallet af genererede ID'er, og N er antallet af mulige kombinationer. N beregnes som alfabetets længde^ID-længde.
Eksempler med standardindstillinger:
- Alfabet: 64 tegn, længde: 21 → N ≈ 2¹²⁶.
- Med 1 million ID'er er kollisionssandsynligheden mindre end 10⁻¹⁵ – stort set nul.
Hvis du reducerer længden til 8 tegn med samme alfabet, bliver N ≈ 2⁴⁸. Med 1000 ID'er er sandsynligheden for en kollision omkring 3·10⁻⁹. Det er stadig meget lavt, men afhænger af dit system; til primærnøgler i en lille database kan 8 tegn være tilstrækkeligt.
Reducerer du alfabetet til kun 10 cifre (0–9) og længde 4, er N = 10.000 – og allerede efter 100 ID'er er sandsynligheden for en kollision nær 1. Værktøjet advarer ikke direkte, men du kan selv vurdere risikoen ud fra tallene.
Edge cases: Alfabet med kun ét tegn – hvad sker der?
Alfabetet skal indeholde mindst 2 forskellige tegn. Hvis du sletter indholdet, så kun et enkelt tegn står tilbage (f.eks. a), eller indtaster to ens tegn (aa), sker der følgende:
- Resultatlisten ryddes øjeblikkeligt.
- ID-tælleren viser 0.
- Knappen "Kopier alle" deaktiveres og kan ikke klikkes.
- Statuslinjen viser: "Alfabet skal indeholde mindst 2 forskellige tegn."
Denne adfærd er bevidst: Hvis alfabetet kun har ét tegn, vil hvert ID uanset længde bestå af gentagelser af det samme tegn – f.eks. aaaaa ved længde 5. Det giver ingen unikke værdier, og det ville være vildledende at generere dem. Derfor ryddes resultaterne i stedet.
Når du retter alfabetet til et gyldigt sæt (mindst to forskellige tegn), genoptages genereringen automatisk, og knappen aktiveres igen.
Lokal generering og privatliv
Alle Nano ID'er genereres udelukkende i din browser. Der sendes ingen data til BroBroGo eller nogen anden server. Den underliggende kilde til tilfældighed er window.crypto.getRandomValues, en W3C-standard implementeret i alle moderne browsere. Dette sikrer:
- Ingen netværksaktivitet – du kan arbejde offline.
- Ingen logning – hverken dine indstillinger eller genererede ID'er forlader maskinen.
- Kryptografisk styrke –
getRandomValuestrækker fra operativsystemets egen entropikilde og er velegnet til sikkerhedsnøgler og tokens.
Det betyder, at du trygt kan bruge værktøjet til at generere API-nøgler, hemmelige tokens eller databaseprimærnøgler uden at bekymre dig om, at nogen på serveren får adgang til dem.
Sådan kopieres ID'er
Hvis du klikker på et enkelt ID, kopieres det til udklipsholderen. Der vises en kort statusmeddelelse: "Kopieret!" (eller tilsvarende). Knappen "Kopier alle" kopierer hele listen – hvert ID på en ny linje – og status skifter til "Kopieret alle!".
Når genereringen er færdig, vises status "Genereret." Når værktøjet er klar til næste opgave, står der "Klar.". Disse statusindikatorer gør det nemt at følge med, især når du justerer parametre.
FAQ – ofte stillede spørgsmål
Hvorfor er standardlængden 21 tegn?
Den er valgt som et kompromis: kortere end UUID (36 tegn), men med tilstrækkelig entropi (ca. 126 bit) til de fleste applikationer. Den er også den oprindelige Nano ID-standard, som bruges i mange open source-projekter.
Hvad sker der, hvis jeg bruger alfabetet "01" med længde 4?
Du får binære ID'er som 0101, 1100 osv. Der er kun 2⁴ = 16 mulige kombinationer. Det er fint til test, men risikoen for kollision er ekstremt høj, hvis du genererer mere end få ID'er.
Kan jeg bruge danske bogstaver som æ, ø, å i alfabetet?
Ja, men vær opmærksom på, at de ikke er URL-sikre (de skal procent-encodes som %C3%A6 osv.). Hvis dine ID'er skal bruges i webadresser, bør du holde dig til det medfølgende standardalfabet.
Hvor mange ID'er kan jeg generere ad gangen?
Mellem 1 og 100. Ønsker du flere, kan du generere flere batches.
Er der en garanti for, at ID'erne er unikke?
Nej, der gives ingen garanti. Værktøjet trækker tilfældige værdier, og sammenstød er teoretisk mulige. Men med tilstrækkelig længde og et stort alfabet er sandsynligheden praktisk talt nul. Du kan altid kontrollere ved at generere en batch og tjekke for dubletter manuelt.
Kan jeg bruge dette til at generere hemmelige tokens til autentifikation?
Ja, fordi entropikilden er kryptografisk sikker. Men længden bør være mindst 20–25 tegn for at modstå brute force. Husk, at tokens også skal opbevares sikkert på serveren.