Nano ID Generator – Generisanje kratkih, sigurnih identifikatora
Ova stranica generiše jedinstvene identifikatore koristeći Nano ID format. Za razliku od UUID (36 znakova) ili ULID (26 znakova), Nano ID podrazumevano koristi samo 21 znak – dovoljno kratko za efikasno skladištenje i prenos, a istovremeno dovoljno dugačko za veoma nisku vjerovatnoću kolizije. Ključna prednost je potpuna prilagodljivost: dužina, dozvoljeni znakovi i broj ID‑ova mogu se mijenjati po želji, a sve se izvršava lokalno u pretraživaču, bez slanja podataka na server.
Kako funkcioniše generator
Generator koristi kriptografski siguran generator slučajnih brojeva (crypto.getRandomValues) koji je ugrađen u moderne pregledače. Svaki znak u ID‑u bira se nezavisno iz korisnički definisane abecede (alfabeta). Proces je sledeći:
- Korisnik podešava parametre: dužinu, abecedu i broj ID‑ova.
- Za svaki ID, program uzima onoliko slučajnih bajtova koliko je potrebno da se dobije
dužinaznakova, koristeći algoritam koji efektivno mapira slučajne brojeve u znakove abecede. - Generisani ID‑ovi su jedinstveni u okviru jedne sesije (ako se ponovi isti skup parametara, dobiće se različiti ID‑ovi, jer se svaki put koristi nova slučajnost).
- Rezultati se prikazuju odmah – promjena bilo kog parametra (dužina, abeceda, broj) pokreće trenutno regenerisanje.
Abeceda mora sadržati najmanje 2 različita znaka. Ako korisnik obriše abecedu tako da ostane samo jedan znak (ili nijedan), rezultati se brišu, broj ID‑ova postaje 0, a dugme “Kopiraj sve” se onemogućava. Ovo je namjerna sigurnosna mjera: sa samo jednim znakom u abecedi, svaki ID bi bio niz istog znaka (npr. “aaaaa…”), što nema smisla za jedinstvene identifikatore.
Parametri: dužina, abeceda i broj ID‑ova
Dužina (Length)
Podrazumijevana dužina je 21 znak. Moguće je podesiti vrednosti između 2 i 36 pomoću klizača. Kraći ID‑ovi (npr. 8–10 znakova) su korisni za QR kodove ili kratke linkove, ali imaju veću vjerovatnoću kolizije (vidi sledeći odjeljak). Duži ID‑ovi (30+) su gotovo sigurni čak i pri velikom broju generisanih instanci, ali zauzimaju više prostora.
Abeceda (Alphabet)
Podrazumijevana abeceda sadrži URL‑sigurne znakove: velika i mala slova engleske abecede, brojeve, te znake - i _. Ovo su znakovi koji se ne moraju enkodirati u URL‑ovima, što ih čini idealnim za web linkove. Korisnik može unijeti bilo koju kombinaciju znakova, uključujući samo brojeve, samo slova, ili čak posebne simbole. Važno je da abeceda bude dovoljno velika da osigura dovoljnu entropiju; sa manje od 2 znaka generisanje je onemogućeno.
Broj ID‑ova (Count)
Može se generisati između 1 i 100 ID‑ova istovremeno. Svaki ID je jedinstven u okviru datog seta (ne ponavlja se unutar istog generisanja). Ako je potrebno više od 100 ID‑ova, korisnik može ponoviti generisanje više puta.
Zašto je podrazumijevana dužina baš 21?
Nano ID je dizajniran da pruži sličnu otpornost na koliziju kao UUID v4 (122 bita slučajnosti) uz kraću reprezentaciju. Podrazumijevana abeceda ima 64 znaka (A‑Z, a‑z, 0‑9, -, _). Sa 21 znakom, broj mogućih kombinacija je 64^21 = 2^126. To je otprilike 126 bita entropije, nešto više od UUID‑ovih 122 bita. Dužina 21 je izabrana jer daje dobru ravnotežu između sigurnosti i kratkoće.
Ako se dužina smanji na 10, broj mogućnosti postaje 64^10 ≈ 2^60, što je za većinu aplikacija i dalje dovoljno (vjerovatnoća kolizije pri 1 milion ID‑ova je oko 0.0004). Za kritične sisteme preporučuje se 21 ili više.
Poređenje sa UUID i ULID formatom
| Format | Dužina (znakovi) | Abeceda | Entropija (biti) | Prednosti |
|---|---|---|---|---|
| UUID v4 | 36 | heksadecimalna (0‑9, a‑f) | 122 | Standard, široko podržan |
| ULID | 26 | Crockford Base32 (0‑9, A‑Z, bez I, L, O, U) | 128 (vremenski dio + slučajni) | Sortivno po vremenu |
| Nano ID (podraz.) | 21 | URL‑sigurna (64 znaka) | 126 | Kraći, prilagodljiv, URL‑siguran |
Nano ID je znatno kraći od UUID‑a (21 umesto 36 znakova) i nema fiksni format kao ULID (koji uključuje vremensku oznaku). Ako vam nije potrebna vremenska sortivnost, Nano ID je često bolji izbor zbog manje veličine.
Kolizija: vjerovatnoća i sigurnost
Vjerovatnoća kolizije između dva slučajno generisana Nano ID‑a zavisi od dužine i veličine abecede. Za podrazumevane parametre (21 znak, 64‑znakovna abeceda), vjerovatnoća kolizije je:
P ≈ N² / (2 * A^L)
gdje je N broj generisanih ID‑ova, A veličina abecede, a L dužina. Čak i za 10 milijardi ID‑ova (N = 10^10), vjerovatnoća kolizije je zanemarljiva: N² / (2 * 64^21) ≈ 10^20 / 2^127 ≈ 10^20 / 1.7×10^38 ≈ 6×10^-19.
Ako koristite kraću dužinu (npr. 8) i malu abecedu (npr. samo brojevi, 10 znakova), vjerovatnoća kolizije raste. Zato generator ne dozvoljava abecedu sa manje od 2 znaka – to bi dovelo do apsolutne sigurnosti kolizije (svi ID‑ovi bi bili identični).
Privatnost i lokalno generisanje
Svi ID‑ovi se generišu isključivo u pregledaču korisnika. Ni jedan podatak (dužina, abeceda, broj ID‑ova, generisani ID‑ovi) ne napušta vaš računar. Ovo je važno za aplikacije koje zahtevaju privatnost, npr. generisanje tokena za autentifikaciju ili jedinstvenih ključeva bez izlaganja serveru.
Generisanje koristi crypto.getRandomValues, metod koji je kriptografski siguran i podržan u svim modernim pregledačima. Nema oslanjanja na Math.random koji može biti predvidiv.
Praktične primjene
- Web API‑ji: Kratki ID‑ovi za resurse (npr.
/users/abc123_xyz). - QR kodovi: Kraći ID‑ovi znače manje podataka u kodu, lakše skeniranje.
- Jedinstveni tokeni: Za verifikacione linkove, sesije ili CSRF zaštitu, bez potrebe za čuvanjem na serveru.
- Ključevi u bazi podataka: Za NoSQL baze (MongoDB, DynamoDB) gde je veličina ključa bitna za performanse indeksa.
- Kratki linkovi: Servisi poput bit.ly često koriste slične formate.
Često postavljana pitanja (FAQ)
1. Da li mogu da generišem ID‑ove sa samo brojevima?
Da, unesite 0123456789 u polje za abecedu. Tada će ID‑ovi sadržati samo cifre. Dužina se i dalje može podesiti, ali imajte na umu da je entropija tada mnogo manja (10^L umesto 64^L).
2. Zašto se ID‑ovi ne ponavljaju u istom setu? Generator proverava da li je svaki novo‑generisani ID već postojeći u trenutnom setu; ako jeste, generiše novi. Ovo garantuje jedinstvenost unutar jednog generisanja, ali ne garantuje globalnu jedinstvenost (za to je potreban centralni registar).
3. Mogu li da kopiram samo jedan ID? Da, klikom na bilo koji pojedinačni ID on se automatski kopira u clipboard.
4. Šta znači poruka “Alphabet needs at least 2 different characters”? Abeceda mora sadržati bar dva različita znaka da bi generisanje bilo moguće. Ako unesete samo “a” ili ispraznite polje, generator se zaustavlja.
5. Da li je Nano ID standardizovan? Nano ID nije formalni standard poput RFC‑a za UUID, ali je široko prihvaćen u open‑source zajednici (NPM paket, biblioteke za više jezika). Ovaj generator implementira istu logiku.
6. Mogu li da koristim ove ID‑ove u produkciji? Da, generisanje se vrši lokalno sa kriptografski sigurnom slučajnošću. Međutim, za kritične sisteme gde je globalna jedinstvenost neophodna, preporučuje se kombinacija sa vremenskom oznakom ili drugim identifikatorom.