Generadores de casos límite

Los datos que rompen aplicaciones: cadenas larguísimas con emojis, payloads de inyección, fechas que no existen y números en el borde de cada tipo numérico.

✓ 4 generadores 🔒 Todo en tu navegador Lotes de 1 a 100 · CSV y JSON

Texto y seguridad

Cadenas imposibles y payloads para pruebas negativas.

Fechas y números

Los bordes donde se rompen los tipos de datos.

100 % privado. No hay servidor: los datos se generan en tu navegador y no se envían ni se guardan en ninguna parte.

Donde de verdad se rompen las aplicaciones

Un formulario que funciona con «Juan Pérez» y «12345678» no está probado. Se rompe con lo otro: un nombre de 300 caracteres, un emoji que ocupa cuatro bytes, un 29 de febrero de un año que no es bisiesto, un número mayor que el máximo entero seguro de JavaScript.

Cadenas

Longitud configurable hasta 5000 caracteres, con los conjuntos que elijas: minúsculas, mayúsculas, dígitos, símbolos, acentos, emojis —incluidos los compuestos, que ocupan varias unidades de código— y espacios en los extremos, que son los que revelan si haces trim antes de guardar.

Payloads de seguridad

Inyección SQL, XSS y recorrido de rutas, en su forma clásica y codificada. Están para que compruebes que tu aplicación los neutraliza: los escapa, los rechaza o los guarda sin ejecutarlos.

Úsalos solo en sistemas propios o con autorización escrita. Lanzarlos contra un sistema ajeno sin permiso es un delito en la mayoría de países.

Fechas y números

Años bisiestos y no bisiestos, fin de mes, cambios de hora, el 29 de febrero de 1900 —que no existió, aunque Excel crea que sí—, y formatos inválidos. En números: el cero, los negativos, decimales larguísimos, el máximo entero seguro y valores por encima para provocar el desbordamiento.

Un emoji no ocupa un carácter

Este es el caso límite que más aplicaciones rompe y el que peor se entiende. En JavaScript, un emoji sencillo ocupa dos unidades de código, y uno compuesto —una familia, una bandera, un emoji con tono de piel— puede ocupar siete u once:

"a".length          // 1
"ñ".length          // 1
"😀".length         // 2  ← un solo emoji
"👨‍👩‍👧‍👦".length     // 11 ← familia: 4 personas + 3 uniones invisibles
"🇵🇪".length         // 4  ← bandera: dos indicadores regionales

[..."👨‍👩‍👧‍👦"].length  // 7  ← contando por puntos de código
Array.from("👨‍👩‍👧‍👦").length // 7

La consecuencia práctica: un campo «nombre, máximo 20 caracteres» que corte con substring(0, 20) puede partir un emoji por la mitad y guardar media pareja de sustitutos. Eso produce el rombo con la interrogación, o directamente un error de codificación al insertar en la base de datos. Y en MySQL, si la columna es utf8 en vez de utf8mb4, cualquier emoji falla al guardarse.

Fechas que existen y no deberían, y al contrario

FechaPor qué importa
2024-02-29Existe: 2024 es bisiesto. Si tu validación divide solo entre 4 acertará aquí y fallará en 1900.
1900-02-29No existe: los años divisibles entre 100 no son bisiestos salvo que también lo sean entre 400. Excel cree que sí existe, por compatibilidad con Lotus 1-2-3, y de ahí vienen desfases de un día en las importaciones.
2000-02-29Sí existe: divisible entre 400. Es la excepción de la excepción.
2038-01-19El límite del entero de 32 bits con signo en tiempo Unix. Sistemas antiguos dan la vuelta a 1901.
2024-04-31No existe, y new Date("2024-04-31") en JavaScript no falla: te devuelve el 1 de mayo sin avisar.
31/12/2024 frente a 12/31/2024Día y mes intercambiados. Con día 12 o menos, las dos interpretaciones son válidas y el error pasa desapercibido hasta que alguien reclama.

Los números en el borde

En JavaScript todos los números son de coma flotante de doble precisión, y eso tiene un límite concreto por encima del cual los enteros dejan de ser exactos sin dar ningún error:

Number.MAX_SAFE_INTEGER        // 9007199254740991
9007199254740993               // 9007199254740992  ← perdió precisión
0.1 + 0.2                      // 0.30000000000000004
(0.1 + 0.2) === 0.3            // false

// Y el que arruina facturas:
19.99 * 100                    // 1998.9999999999998
Math.round(19.99 * 100)        // 1999  ← así sí

Si tu API maneja identificadores grandes —el de un tuit, el de una transacción bancaria— y los envía como número en lugar de como cadena, los últimos dígitos pueden cambiar en el camino. Genera números por encima del máximo seguro y comprueba que sobreviven al viaje de ida y vuelta por tu JSON.

Sobre los payloads de seguridad

Los payloads de inyección SQL, XSS y recorrido de rutas que genera esta herramienta están para comprobar que tu aplicación los neutraliza: que los escapa, los rechaza o los guarda como texto inerte. Un formulario que devuelve el valor tal cual y lo pinta en la página tiene una vulnerabilidad, y estos datos la sacan a la luz en segundos.

Úsalos solo contra sistemas propios o con autorización escrita del titular. Lanzarlos contra un sistema ajeno sin permiso es un delito en Perú y en la mayoría de países, y ninguna finalidad de aprendizaje lo justifica.

Preguntas frecuentes

Sobre estos generadores

¿Es legal usar los payloads de inyección?

Contra tus propios sistemas o con autorización escrita del titular, sí: es una prueba de seguridad normal. Contra un sistema ajeno sin permiso es un delito. La herramienta lo advierte en pantalla.

¿Por qué probar con emojis?

Porque un emoji ocupa más de un carácter en memoria. Un campo de 20 caracteres que corte por unidades de código puede partir un emoji por la mitad y guardar bytes inválidos.

¿Qué es el máximo entero seguro?

En JavaScript, 9007199254740991. Por encima, los enteros pierden precisión sin avisar. Si tu API maneja identificadores grandes, es un caso de prueba obligatorio.