¿Te has topado con un formulario que exige resolver "7 + 3" antes de dejarte enviarlo? Ese campo es un CAPTCHA de matemáticas, y sigue siendo uno de los mecanismos anti-spam más comunes en sitios WordPress, formularios de contacto y aplicaciones heredadas. Los CAPTCHA de lógica son su primo cercano: en vez de una operación, plantean preguntas de sentido común como "¿De qué color es el cielo?" o "Escribe el número más grande: 5, 12, 3". Ambos estuvieron entre los primeros tipos de CAPTCHA que existieron y, pese a ser fáciles de automatizar, no han desaparecido. Regla práctica: si tu automatización encuentra un campo de texto con una ecuación sencilla, estás ante un CAPTCHA matemático o lógico.
Qué tipos de CAPTCHA de matemáticas y lógica existen
1. CAPTCHA aritméticos básicos
Plantean una suma, resta o multiplicación sencilla —"¿Cuánto es 3 + 5?", "12 – 4 =?" o "6 × 7 =?"—. La operación llega como texto plano, fácil de analizar, o incrustada en una imagen, en cuyo caso necesitas OCR para leerla.
2. CAPTCHA matemáticos renderizados como imagen
Aquí la ecuación se dibuja como imagen para impedir el análisis directo del texto: piensa en un "14 + 23 =?" en una fuente distorsionada, o en números de colores sobre un fondo con ruido. Para resolverlos hace falta OCR que lea la ecuación de la imagen y, a continuación, aritmética que calcule el resultado.
3. CAPTCHA matemáticos con números en palabras
Los números se escriben con letras en lugar de dígitos, como en "¿Cuánto es siete más tres?" o "Escribe el resultado de doce menos cinco". Requieren procesamiento de lenguaje natural (NLP) para convertir las palabras en cifras y luego resolver.
4. Preguntas de lógica
Son preguntas no aritméticas que apelan al sentido común y casi siempre salen de un banco fijo:
- "¿De qué color es la hierba?"
- "¿Cuántas patas tiene un perro?"
- "¿El fuego está frío o caliente?"
Resolverlas exige una base de conocimiento o un modelo de lenguaje, no un simple analizador aritmético.
5. CAPTCHA de secuencia o patrón
Muestran una serie de números —"¿Qué sigue: 2, 4, 6, 8?" o "Completa el patrón: 1, 1, 2, 3, 5,?"— y piden el siguiente valor. Detrás hace falta lógica de reconocimiento de patrones.
Por qué siguen vigentes pese a ser tan fáciles
Aunque cualquier script mínimamente competente los supera, estos CAPTCHA no se han ido, y hay razones concretas:
- Simplicidad: no dependen de una API externa ni de un SDK de JavaScript.
- Plugins de WordPress: opciones como "Math CAPTCHA" y "Really Simple CAPTCHA" están instaladas en miles de sitios.
- Poca fricción: al usuario le cuesta menos una operación mental rápida que seleccionar imágenes.
- Accesibilidad: las versiones en texto funcionan con lectores de pantalla, a diferencia de los CAPTCHA de imagen.
- Sistemas heredados: aplicaciones antiguas anteriores a los servicios modernos de CAPTCHA.
Un caso típico: una agencia que mantiene sitios WordPress de clientes hereda formularios con "Math CAPTCHA" activado, y el reto acaba viviendo en su flujo de QA durante años.
Cómo se comparan con otros tipos de CAPTCHA
| Característica | CAPTCHA matemático | reCAPTCHA v2 | hCaptcha | CAPTCHA deslizante |
|---|---|---|---|---|
| Fricción del usuario | Baja (cálculo mental rápido) | Media (selección de imágenes) | Media (selección de imágenes) | Baja (un solo arrastre) |
| Resistencia a bots | Muy baja | Alta | Alta | Media |
| Accesibilidad | Buena (versiones en texto) | Baja (depende de la vista) | Baja (depende de la vista) | Baja (depende del motor) |
| Costo | Gratis (autoalojado) | Nivel gratuito disponible | Nivel gratuito disponible | Variable |
| Uso habitual | WordPress, formularios de contacto | Login, registro | Login, registro | E-commerce, Asia |
En síntesis: gana en fricción y accesibilidad, pero su resistencia a bots es mínima. Es un filtro anti-spam ligero, no un muro de seguridad.
Cómo funcionan por dentro los CAPTCHA matemáticos
Flujo de un CAPTCHA matemático en texto
Server generates random equation (e.g., "7 + 3")
↓
Stores answer (10) in server-side session
↓
Renders equation as HTML text or image
↓
User submits answer via form field
↓
Server compares submitted answer to stored answer
↓
Match → Form submitted Mismatch → Error shown
Flujo de un CAPTCHA matemático en imagen
Server generates random equation
↓
Renders equation into a distorted image (noise, lines, color shifts)
↓
Image served to client via <img> tag
↓
User reads image, computes answer, types in form field
↓
Server validates submitted answer
Cómo detectarlos en un flujo automatizado
Antes de resolver un CAPTCHA hay que reconocerlo. Estos fragmentos buscan las señales típicas —operaciones en el HTML, imágenes con alt sospechoso y preguntas de lógica— para clasificar la página.
Detección con Python
import requests
from bs4 import BeautifulSoup
import re
def detect_math_captcha(url):
"""Detect common math CAPTCHA patterns on a page."""
response = requests.get(url, timeout=10)
soup = BeautifulSoup(response.text, "html.parser")
html = response.text.lower()
indicators = {
"text_math": False,
"image_math": False,
"logic_question": False,
}
# Check for text-based math questions
math_patterns = [
r"what is \d+\s*[\+\-\×\*]\s*\d+",
r"\d+\s*[\+\-\×\*]\s*\d+\s*=\s*\?",
r"solve:\s*\d+",
r"type the (result|answer|sum)",
]
for pattern in math_patterns:
if re.search(pattern, html):
indicators["text_math"] = True
break
# Check for CAPTCHA images near math-related labels
captcha_images = soup.find_all("img", attrs={
"alt": re.compile(r"captcha|math|verify", re.I)
})
if captcha_images:
indicators["image_math"] = True
# Check for logic questions
logic_patterns = [
r"what color is",
r"how many legs",
r"what comes next",
r"is .+ hot or cold",
]
for pattern in logic_patterns:
if re.search(pattern, html):
indicators["logic_question"] = True
break
return indicators
result = detect_math_captcha("https://example.com/contact")
print(result)
Detección con Node.js
const axios = require("axios");
const cheerio = require("cheerio");
async function detectMathCaptcha(url) {
const { data: html } = await axios.get(url, { timeout: 10000 });
const $ = cheerio.load(html);
const lower = html.toLowerCase();
const indicators = {
textMath: false,
imageMath: false,
logicQuestion: false,
};
// Text-based math patterns
const mathPatterns = [
/what is \d+\s*[+\-×*]\s*\d+/,
/\d+\s*[+\-×*]\s*\d+\s*=\s*\?/,
/solve:\s*\d+/,
/type the (result|answer|sum)/,
];
for (const pattern of mathPatterns) {
if (pattern.test(lower)) {
indicators.textMath = true;
break;
}
}
// Check for CAPTCHA images
$("img").each((_, el) => {
const alt = ($(el).attr("alt") || "").toLowerCase();
if (/captcha|math|verify/.test(alt)) {
indicators.imageMath = true;
}
});
return indicators;
}
detectMathCaptcha("https://example.com/contact").then(console.log);
Resolver CAPTCHA matemáticos en imagen con OCR
Cuando la ecuación viaja como imagen, el atajo es claro: el OCR extrae el texto y un analizador mínimo calcula la respuesta.
Resolución con la API de OCR de CaptchaAI
import requests
import time
import re
API_KEY = "YOUR_API_KEY"
CAPTCHA_IMAGE_URL = "https://example.com/captcha.png"
# Download the CAPTCHA image
image_data = requests.get(CAPTCHA_IMAGE_URL).content
# Submit to CaptchaAI OCR
import base64
b64_image = base64.b64encode(image_data).decode()
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "base64",
"body": b64_image,
"json": 1,
})
task_id = submit.json().get("request")
# Poll for result
for _ in range(30):
time.sleep(3)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = result.json()
if data.get("status") == 1:
ocr_text = data["request"] # e.g., "7 + 3"
print(f"OCR result: {ocr_text}")
# Parse and compute the answer
match = re.match(r"(\d+)\s*([+\-*/×])\s*(\d+)", ocr_text)
if match:
a, op, b = int(match.group(1)), match.group(2), int(match.group(3))
ops = {"+": a + b, "-": a - b, "*": a * b, "×": a * b, "/": a // b}
answer = ops.get(op)
print(f"Answer: {answer}")
break
elif "CAPCHA_NOT_READY" in str(data):
continue
El flujo envía la imagen con in.php, consulta el resultado con res.php y, recuperada la cadena "14 + 23", el propio código hace la aritmética. Como CaptchaAI factura por thread concurrente con resoluciones ilimitadas por thread, este patrón escala de un formulario a cientos de sitios cambiando de plan, no de código.
Preguntas frecuentes
¿Necesito OCR si la ecuación aparece como texto HTML?
No. Si la operación se renderiza como texto en el HTML, puedes leerla directamente del código de la página con una expresión regular o recorriendo el DOM, calcular el resultado y enviarlo. El OCR solo hace falta cuando la ecuación viene incrustada en una imagen.
¿Qué plan de CaptchaAI conviene para resolver CAPTCHA de imagen a volumen?
Depende de cuántas resoluciones necesites en paralelo. CaptchaAI cobra por thread concurrente, no por resolución, y todos los planes incluyen resoluciones ilimitadas por thread. El plan BASIC ($15/mes, 5 threads) cubre proyectos pequeños; si procesas formularios de muchos sitios a la vez, ADVANCE ($90/mes, 50 threads) da más margen. Consulta los precios vigentes en captchaai.com/pricing.
¿Los CAPTCHA matemáticos son accesibles para lectores de pantalla?
Depende del formato. Las versiones en texto plano se leen bien con lectores de pantalla, lo que las hace más accesibles que un CAPTCHA de imagen. Las versiones renderizadas como imagen pierden esa ventaja, salvo que incluyan una alternativa textual o de audio.
¿Se resuelven igual los CAPTCHA de lógica que los aritméticos?
No. Una operación aritmética se calcula con pocas líneas de código, pero "¿de qué color es la hierba?" necesita una base de conocimiento o un modelo de lenguaje. Como suelen salir de un banco fijo, muchos flujos las resuelven con una tabla de respuestas conocidas.
¿Basta un plugin de CAPTCHA matemático en WordPress para frenar el spam?
Frena el spam más básico, poco más. Cualquier bot capaz de leer HTML resuelve un CAPTCHA matemático de texto al instante, y el OCR se encarga de las variantes en imagen. Para spam persistente conviene un sistema conductual como Cloudflare Turnstile o reCAPTCHA v3.
En resumen
Los CAPTCHA de matemáticas y lógica son el tipo de desafío más simple y aparecen sobre todo en formularios de contacto de WordPress y en sistemas heredados. Las variantes en texto se analizan directamente desde el HTML con regex; las variantes en imagen requieren OCR para leer la ecuación y luego aritmética básica para calcular la respuesta. Para las primeras te basta con la API de OCR de imágenes de CaptchaAI, que extrae la operación lista para resolverla. Fáciles de superar mediante automatización, pero cómodos y accesibles: por eso siguen tan presentes.
Artículos relacionados
- GeeTest frente a Cloudflare Turnstile: comparación
- Error 403 de Cloudflare Turnstile tras corregir el token
- Modos de widget de Cloudflare Turnstile explicados