Generadores Aleatorios
Paquete: @tiendana/utils
Funciones para generar identificadores únicos, números aleatorios y contraseñas seguras.
Funciones Disponibles
- guid() - GUID formato estándar
- uniqueId() - ID estilo nanoid
- getRandomInt() - Entero aleatorio
- generatePassword() - Contraseña segura (opciones:
RandomPasswordOps)
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).
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ámetro | Tipo | Descripción | Default |
|---|---|---|---|
length | number | Longitud del ID generado | 21 |
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ámetro | Tipo | Descripción |
|---|---|---|
min | number | Valor mínimo (inclusivo) |
max | number | Valor 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ón | Tipo | Descripción | Default |
|---|---|---|---|
length | number | Longitud de la contraseña | 8 |
numbers | boolean | Incluir números (0-9) | true |
lettersLowerCase | boolean | Incluir minúsculas (a-z) | true |
lettersUpperCase | boolean | Incluir mayúsculas (A-Z) | true |
specialChars | boolean | Incluir caracteres especiales | false |
El conjunto especial es !#$%&()*+,-./:;<=>?@^[\]^_ más la comilla invertida, {, |, } y ~.
Retorno
String con la contraseña generada.
Errores
| Condición | Error |
|---|---|
| Todos los conjuntos están deshabilitados | At least one character type must be enabled |
length es menor que el número de conjuntos habilitados | Password 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
});
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
- generateUTMUrl - URLs con tracking
- parseJwt - Decodificar tokens