🛠️

Whiz Tools

Build • Create • Innovate

Generador d'ID Nano: Identificadors Segurs i Únics

Genera identificadors segurs, únics i amigables amb les URL utilitzant Nano ID. Personalitza la longitud i el conjunt de caràcters per a diverses aplicacions en el desenvolupament web, sistemes distribuïts i gestió de bases de dades.

Generador de Nano ID

Nano ID Generat

Visualització

📚

Documentació

Generador de Nano ID

Introducció

Un Nano ID és un generador d'ID únics en forma de cadena, segur i amigable amb URL. Està dissenyat per crear identificadors compactes, no seqüencials i resistents a col·lisions per a diverses aplicacions en sistemes distribuïts. Aquesta eina et permet generar Nano IDs amb longitud i conjunts de caràcters personalitzables.

Com funcionen els Nano IDs

Els Nano IDs es generen mitjançant un generador de números aleatoris criptogràficament segur i un alfabets personalitzable. La implementació per defecte utilitza:

  • Un alfabets de 64 caràcters (A-Za-z0-9_-) que és amigable amb URL
  • 21 caràcters de longitud

Aquesta combinació proporciona un bon equilibri entre la longitud de l'ID i la probabilitat de col·lisió.

La fórmula per generar un Nano ID és:

1id = random(alfabet, mida)
2

On random és una funció que selecciona mida nombres de caràcters de l'alfabet amb un generador de números aleatoris criptogràficament segur.

Composició d'un Nano ID

21 caràcters de A-Za-z0-9_- Exemple: V1StGXR8_Z5jdHi6B-myT

Opcions de personalització

  1. Longitud: Pots ajustar la longitud del Nano ID generat. El per defecte és de 21 caràcters, però es pot augmentar per a una major unicitat o disminuir per a IDs més curts.

  2. Alfabets: El conjunt de caràcters utilitzat per generar l'ID es pot personalitzar. Les opcions inclouen:

    • Alfanumèric (per defecte): A-Za-z0-9_-
    • Numèric: 0-9
    • Alfabètic: A-Za-z
    • Personalitzat: Qualsevol conjunt de caràcters que defineixis

Seguretat i unicitat

Els Nano IDs estan dissenyats per ser:

  • Imprevisibles: Utilitzen un generador aleatori criptogràficament segur.
  • Únics: La probabilitat de col·lisions és extremadament baixa amb la longitud adequada.

La probabilitat de col·lisió depèn de la longitud de l'ID i del nombre d'IDs generats. La probabilitat d'una col·lisió es pot calcular mitjançant la fórmula:

1P(col·lisió) = 1 - e^(-k^2 / (2n))
2

On:

  • k és el nombre d'IDs generats
  • n és el nombre d'IDs possibles (longitud de l'alfabet ^ longitud del Nano ID)

Per exemple, amb la configuració per defecte (alfabet de 64 caràcters, longitud de 21 caràcters), necessites generar ~1.36e36 IDs per tenir un 1% de probabilitat d'una col·lisió. Per posar-ho en perspectiva:

  • Generant 1 milió d'IDs per segon, trigaries ~433 anys per tenir un 1% de possibilitats de col·lisió.
  • És més probable que guanyis la loteria múltiples vegades que trobar una col·lisió de Nano ID en la majoria d'aplicacions pràctiques.

Casos d'ús

Els Nano IDs són adequats per a moltes aplicacions, incloent:

  1. IDs de registres de base de dades
  2. Encurtidors d'URL
  3. IDs de sessió en aplicacions web
  4. Noms de fitxers temporals
  5. Sistemes distribuïts on la coordinació és difícil

Comparació amb altres mètodes d'ID

MètodeProsContres
Nano IDCurt, amigable amb URL, personalitzableNo seqüencial
UUIDEstandarditzat, probabilitat de col·lisió molt baixaLlarga (36 caràcters), no amigable amb URL
Auto-incrementSimple, seqüencialNo adequat per a sistemes distribuïts, previsible
ULIDOrdenable per temps, amigable amb URLMés llarg que Nano ID (26 caràcters)
KSUIDOrdenable per temps, amigable amb URLMés llarg que Nano ID (27 caràcters)
ObjectIDInclou caràcters de temps i identificador de màquinaNo tan aleatori, llarg de 12 bytes

Història i desenvolupament

Nano ID va ser creat per Andrey Sitnik el 2017 com una alternativa més compacta a UUID. Va ser dissenyat per ser fàcil d'utilitzar en diversos llenguatges de programació i entorns, amb un enfocament en aplicacions web.

Exemples de codi

Aquí hi ha exemples de generació de Nano IDs en diferents llenguatges de programació:

1// JavaScript
2import { nanoid } from 'nanoid';
3const id = nanoid(); // => "V1StGXR8_Z5jdHi6B-myT"
4

Millors pràctiques

  1. Escull una longitud apropiada basada en els teus requisits d'unicitat.
  2. Utilitza un generador de números aleatoris criptogràficament segur.
  3. Si utilitzes alfabets personalitzats, assegura't que tinguin prou entropia.
  4. Emmagatzema els Nano IDs com a cadenes, no com a enters, a les bases de dades.
  5. Utilitza índexs en les columnes de Nano ID per a consultes eficients.

Limitacions i consideracions

  • Els Nano IDs no són seqüencials, cosa que pot afectar el rendiment de la base de dades en alguns casos.
  • No són llegibles per humans ni ordenables per temps de generació.
  • Els alfabets personalitzats poden afectar la probabilitat de col·lisió i s'han de triar amb cura.

Implementant un generador de Nano ID en aplicacions web

Per implementar un generador de Nano ID en una aplicació web:

  1. Instal·la la biblioteca Nano ID per al teu llenguatge de backend.
  2. Crea un punt final API que generi i retorni un Nano ID.
  3. Utilitza JavaScript del costat del client per cridar l'API quan sigui necessari.

Exemple d'implementació amb Express.js:

1const express = require('express');
2const { nanoid } = require('nanoid');
3
4const app = express();
5
6app.get('/generate-id', (req, res) => {
7  const id = nanoid();
8  res.json({ id });
9});
10
11app.listen(3000, () => console.log('Servidor en funcionament al port 3000'));
12

Implicacions de rendiment

La generació de Nano ID és generalment molt ràpida. En un ordinador típic, pot generar milions d'IDs per segon. No obstant això, considera el següent:

  • La velocitat de generació pot variar en funció del generador de números aleatoris utilitzat.
  • Els alfabets personalitzats o les longituds més llargues poden afectar lleugerament el rendiment.
  • En sistemes de càrrega alta, considera generar IDs en lots.

Probabilitat de col·lisió i mitigació

Per mitigar els riscos de col·lisió:

  1. Augmenta la longitud del Nano ID per a requisits d'unicitat més elevats.
  2. Implementa una comprovació de col·lisió en la teva lògica d'aplicació.
  3. Utilitza un alfabet més gran si és possible.

Emmagatzematge i indexació de Nano IDs en bases de dades

Quan treballis amb Nano IDs en bases de dades:

  1. Emmagatzema'ls com a VARCHAR o tipus de cadena equivalent.
  2. Utilitza la longitud completa del Nano ID per assegurar la unicitat.
  3. Crea un índex a la columna de Nano ID per a cerques més ràpides.
  4. Considera utilitzar una restricció única per prevenir duplicats a nivell de base de dades.

Exemple SQL per crear una taula amb un Nano ID:

1CREATE TABLE users (
2  id VARCHAR(21) PRIMARY KEY,
3  name VARCHAR(100),
4  email VARCHAR(100)
5);
6
7CREATE INDEX idx_users_id ON users (id);
8

Seguint aquestes directrius i entenent les característiques dels Nano IDs, pots implementar i utilitzar-los eficaçment en les teves aplicacions per generar identificadors únics i compactes.

Referències

  1. "Nano ID." GitHub, https://github.com/ai/nanoid. Accedit el 2 d'agost de 2024.
  2. "UUID." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Universally_unique_identifier. Accedit el 2 d'agost de 2024.
  3. "Calculadora de probabilitat de col·lisió." Nano ID Collision Calculator, https://zelark.github.io/nano-id-cc/. Accedit el 2 d'agost de 2024.
  4. "ULID Spec." GitHub, https://github.com/ulid/spec. Accedit el 2 d'agost de 2024.
  5. "KSUID: K-Sortable Globally Unique IDs." GitHub, https://github.com/segmentio/ksuid. Accedit el 2 d'agost de 2024.
  6. "ObjectID." MongoDB Manual, https://docs.mongodb.com/manual/reference/method/ObjectId/. Accedit el 2 d'agost de 2024.