Saltar al contenido principal

Generadores Aleatorios

Paquete: @tiendana/utils

Funciones para generar identificadores únicos, números aleatorios y contraseñas seguras.

Funciones Disponibles​


guid​

Genera un GUID (Globally Unique Identifier) en formato estándar xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Firma​

function guid(): string

Retorno​

String con formato GUID estándar (36 caracteres con guiones).

No es criptográficamente seguro

guid() arma el valor con segmentos hexadecimales de Math.random() y no fija los bits de versión de un UUID v4. Sirve como identificador local o clave de objeto, no como secreto ni como garantía de unicidad global. Para valores impredecibles usa uniqueId() o generatePassword().

Ejemplos​

import { guid } from '@tiendana/utils';

const id = guid();
// '3f2504e0-4f89-11d3-9a0c-0305e82c3301'

// IDs de transacción
const transactionId = guid();
localStorage.setItem('txn_' + transactionId, JSON.stringify(data));

// IDs de sesión
const sessionId = guid();

Casos de Uso​

  • IDs de transacciones
  • Identificadores de sesión
  • Keys de objetos únicos
  • IDs de archivos subidos

uniqueId​

Genera un ID único estilo nanoid con caracteres alfanuméricos. Usa crypto.getRandomValues() cuando está disponible y recurre a Math.random() si no.

Firma​

function uniqueId(length: number = 21): string

Parámetros​

ParámetroTipoDescripciónDefault
lengthnumberLongitud del ID generado21

Retorno​

String aleatorio de la longitud indicada con caracteres 0-9A-Za-z. No incluye _ ni -.

Ejemplos​

import { uniqueId } from '@tiendana/utils';

const id = uniqueId();
// 'V1StGXR8Z5jdHi6BmyTk7'

const shortId = uniqueId(10);
// 'K3nR9mP2xQ'

// Component keys
const key = uniqueId(8);
<div key={key}>{content}</div>

// Cache keys
const cacheKey = `user_${userId}_${uniqueId(12)}`;

Casos de Uso​

  • Keys de componentes React/Angular
  • Identificadores de cache
  • Nombres de archivos temporales
  • IDs de request únicos

getRandomInt​

Genera un número entero aleatorio entre min y max, ambos inclusivos.

Firma​

function getRandomInt(min: number, max: number): number

Parámetros​

ParámetroTipoDescripción
minnumberValor mínimo (inclusivo)
maxnumberValor máximo (inclusivo)

Retorno​

Número entero aleatorio: min <= resultado <= max. Con min === max devuelve siempre ese valor.

Ejemplos​

import { getRandomInt } from '@tiendana/utils';

const dice = getRandomInt(1, 6);
// 1, 2, 3, 4, 5, o 6

// El máximo es inclusivo: el último índice es length - 1
const randomIndex = getRandomInt(0, array.length - 1);
const randomItem = array[randomIndex];

// Delay aleatorio
const delay = getRandomInt(1000, 5000);
setTimeout(callback, delay);

// Código de verificación
const code = getRandomInt(100000, 999999);
// 6 dígitos: 100000-999999

Casos de Uso​

  • Índices aleatorios de arrays
  • Códigos de verificación numéricos
  • Delays/timeouts variables
  • Simulaciones y juegos

generatePassword​

Genera una contraseña aleatoria con conjuntos de caracteres configurables. Usa crypto.getRandomValues() (con muestreo por rechazo para evitar sesgo de módulo) y un shuffle Fisher-Yates. Garantiza al menos un carácter de cada conjunto habilitado.

Firma​

function generatePassword(options?: RandomPasswordOps): string

RandomPasswordOps​

Interfaz exportada por el paquete.

interface RandomPasswordOps {
length?: number;
numbers?: boolean;
specialChars?: boolean;
lettersUpperCase?: boolean;
lettersLowerCase?: boolean;
}
OpciónTipoDescripciónDefault
lengthnumberLongitud de la contraseña8
numbersbooleanIncluir números (0-9)true
lettersLowerCasebooleanIncluir minúsculas (a-z)true
lettersUpperCasebooleanIncluir mayúsculas (A-Z)true
specialCharsbooleanIncluir caracteres especialesfalse

El conjunto especial es !#$%&()*+,-./:;<=>?@^[\]^_ más la comilla invertida, {, |, } y ~.

Retorno​

String con la contraseña generada.

Errores​

CondiciónError
Todos los conjuntos están deshabilitadosAt least one character type must be enabled
length es menor que el número de conjuntos habilitadosPassword length must be at least N to include all required character types

Por ejemplo, generatePassword({ length: 2, specialChars: true }) lanza error porque hay cuatro conjuntos habilitados (N = 4).

Ejemplos​

import { generatePassword } from '@tiendana/utils';

// Por defecto: 8 caracteres con mayúsculas, minúsculas y números
const password = generatePassword();
// 'aB7kM2xQ'

// Con caracteres especiales
const strong = generatePassword({
length: 16,
specialChars: true
});
// 'Kp@9mN#2xL!5wQrT'

// Solo números (PIN)
const pin = generatePassword({
length: 6,
lettersLowerCase: false,
lettersUpperCase: false
});
// '742931'

// Token de recuperación
const recoveryToken = generatePassword({
length: 32
});
Sin opción de exclusión

No existe una opción para excluir caracteres ambiguos (il1Lo0O). Si la necesitas, filtra el resultado y vuelve a generar.

Casos de Uso​

  • Contraseñas temporales para nuevos usuarios
  • Tokens de recuperación de cuenta
  • Códigos de un solo uso

Seguridad​

✅ Usa crypto.getRandomValues() cuando está disponible
✅ Fisher-Yates shuffle para distribución uniforme
✅ Fallback a Math.random() en entornos sin crypto

Ver También​