El Universally Unique Identifier (UUID) es un número único que se utiliza como identificador. También es conocido como Globally Unique Identifier (GUID) y está compuesto por 16 bytes (128 bits) con el siguiente formato:

36 caracteres, donde 32 son dígitos y 4 son guiones

  • Un número entero de 8 dígitos hexadecimales (4 bytes)
  • Un número entero de 4 dígitos hexadecimales (2 bytes)
  • Un número entero de 4 dígitos hexadecimales (2 bytes)
  • Un número entero de 4 dígitos hexadecimales (1 byte + 1 byte)
  • Un número entero de 12 dígitos hexadecimales (6 bytes)

Ejemplo de un UUID: d112a206-8a8e-4b6a-87a2-f93eb293d09a

Nota: La probabilidad de que un número se repita es muy baja.

Usos

  • Utilizado como llave primaria en base de datos (primary key)
  • Identificar sesiones en aplicaciones web
  • Dar nombres aleatorios a los archivos
  • Identificar transacciones o componentes en una aplicación

Versiones

Al día de hoy existen 5 versiones, de las cuales la más utilizada es la versión 4, todas utilizan el mismo formato descrito anteriormente, únicamente cambia la forma en que generan los números. Por ejemplo

Versión 1 → Utiliza la fecha-hora (timestamp) y la dirección MAC del dispositivo que lo genera.

Versión 2 → Utiliza números aleatorios.

Code JavaScript

Para generar un UUID se puede hacer de muchas maneras, por lo genera ya hay librerías que simplemente tenemos que importar.

Por CDN

Simplemente lo importamos por medio de una etiqueta script y hacemos uso de función uuidv4

<script type="module">
  import { v4 as uuidv4 } from 'https://jspm.dev/uuid';
  console.log(uuidv4()); // => '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
</script>

Por medio de NPM

Instalamos desde la línea de comandos

npm install uid

Importamos y utilizamos la función uuidv4

import { v4 as uuidv4 } from 'uuid';
uuidv4(); // => e845c251-c1d6-4917-9e3b-6f190e0cd52e

Por medio de una función

Se puede generar manualmente con un replace y crypto:

function uuidv4() {
  return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
    (
      c ^
      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
    ).toString(16)
  );
}

console.log(uuidv4()); // => 30839af6-3d7d-4a48-bf68-49ec7dc05003