revisedRandomId.jsMath.random() de JavaScript conectado al sistema numérico base-36. La salida es una cadena de 10 caracteres construida a partir de dígitos y letras minúsculas (0-9, a-f más g-z), sin artefactos no alfanuméricos. Utilizada por el frontend para crear IDs transitorios y resistentes a colisiones para elementos de la interfaz como notificaciones toast, nodos DOM insertados dinámicamente y claves temporales de listas que no requieren aleatoriedad criptográfica.La función encadena tres operaciones: Math.random().toString(36) convierte un flotante aleatorio a representación base-36 (produciendo una cadena como 0.4kzy9x2n7fl), .replace(/[^a-z0-9]+/g, '') elimina el 0. inicial y cualquier otro artefacto no alfanumérico, y .substr(1, 10) extrae caracteres comenzando en el índice 1 para un resultado de 10 caracteres. El desplazamiento inicial de 1 omite el cero inicial que queda después de eliminar el punto decimal.
Esta función no es intencionalmente segura desde el punto de vista criptográfico. Se utiliza para identificadores a nivel de interfaz de usuario (claves de toast, claves de listas de React) donde las colisiones solo causarían un problema de reconciliación en React, no una vulnerabilidad de seguridad. La compensación es velocidad y simplicidad: sin sobrecarga de la API criptográfica y sin dependencia de la disponibilidad de window.crypto.
| Commit | Qué cambió |
|---|---|
993957ec7 | Dos refinamientos en la generación de ID aleatorios: (1) la clase de caracteres de la expresión regular se expandió de [^a-z]+ a [^a-z0-9]+, asegurando que los dígitos se conserven a través del filtro, lo que aumenta el espacio de ID de 26^n a 36^n; (2) el índice inicial de substr cambió de 2 a 1, ganando un carácter adicional de entropía en lugar de descartarlo. Ambos cambios fueron parte de la implementación del sistema de acciones toast, donde se necesitaban IDs más robustos. |
6cf072707 | Se creó el archivo con la implementación inicial del generador de ID aleatorios. Se utilizó substr(2, 10) y la expresión regular [^a-z]+ — un enfoque más conservador que solo producía IDs alfabéticos en minúsculas de exactamente 10 caracteres. |