Phân Tích Kỹ Thuật

Giải thích các loại CAPTCHA toán học và logic

Nếu form đăng ký hay trang liên hệ bạn đang tự động hóa bắt nhập kết quả của "7 + 3", bạn đang gặp CAPTCHA toán học — dạng thử thách lâu đời và đơn giản nhất còn tồn tại. CAPTCHA logic là biến thể cùng họ: thay phép tính bằng câu hỏi kiến thức phổ thông như "Cỏ có màu gì?" hay "Con chó có mấy chân?". Cả hai chủ yếu bám trên các site WordPress, biểu mẫu liên hệ và ứng dụng cũ.

Điểm mấu chốt với dev nằm ở chỗ đề bài được render như thế nào. Nếu phương trình là văn bản HTML, bạn đọc thẳng từ nguồn trang và tự tính. Nếu nó được nhúng thành ảnh, bạn cần OCR trích xuất phương trình trước rồi mới tính. Phần còn lại của bài viết này phân loại từng dạng, chỉ cách phát hiện chúng trong pipeline tự động hóa, và cách giải CAPTCHA toán học dạng ảnh bằng API OCR của CaptchaAI.


Các dạng CAPTCHA toán học và logic thường gặp

Có năm biến thể hay gặp, khác nhau ở cách đề bài được render và cách bạn phải xử lý khi tự động hóa. Bảng dưới tóm tắt nhanh trước khi đi vào phần kỹ thuật.

Dạng Ví dụ điển hình Cách xử lý khi tự động hóa
Số học cơ bản "3 + 5 là bao nhiêu?", "6 × 7 = ?" Đọc text từ HTML rồi tính; nếu là ảnh thì cần OCR
Toán học render bằng ảnh Ảnh "14 + 23 = ?" phông méo, nền nhiễu Bắt buộc OCR để đọc phương trình, sau đó tính
Toán học viết bằng chữ "Bảy cộng ba bằng bao nhiêu?" Phân tích NLP chuyển chữ thành số rồi tính
Câu hỏi logic "Cỏ có màu gì?", "Con chó có mấy chân?" Tra ngân hàng câu hỏi cố định hoặc dùng mô hình ngôn ngữ
Dãy số hoặc theo mẫu "2, 4, 6, 8, ?", "1, 1, 2, 3, 5, ?" Nhận dạng quy luật rồi suy ra giá trị kế tiếp

Phần lớn form thực tế dùng dạng số học cơ bản hoặc render bằng ảnh; ba dạng còn lại hiếm hơn nhưng vẫn xuất hiện trên các plugin cũ. Điểm chung nằm ở cách render: đề ở dạng văn bản thì đọc thẳng và tự tính, đề là ảnh thì phải OCR trước.


CAPTCHA toán học hoạt động ra sao ở phía server

Về bản chất đây là bài kiểm tra "khớp đáp án": server sinh phương trình, giữ đáp án đúng trong session, rồi so với input của người dùng. Cách render đề (văn bản hay ảnh) quyết định bạn phải phân tích hay phải OCR.

Luồng CAPTCHA toán học dạng văn bản

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

Luồng CAPTCHA toán học dạng ảnh

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ách phát hiện CAPTCHA toán học khi tự động hóa

Bước đầu tiên là nhận diện: trang có CAPTCHA toán học không, và nó ở dạng văn bản hay ảnh? Hai đoạn code dưới đây quét HTML để bắt các mẫu quen thuộc — biểu thức số học, thẻ <img> gắn nhãn captcha, câu hỏi logic — rồi trả về cờ cho từng dạng để bạn nhánh xử lý phù hợp.

Phát hiện bằng 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)

Phát hiện bằng 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);

Với dạng văn bản, bạn dừng lại ở đây: đọc phương trình từ HTML, tính bằng vài dòng code là xong, không cần dịch vụ ngoài. Chỉ khi cờ image_math bật thì mới cần đến OCR ở phần tiếp theo.


Giải CAPTCHA toán học dạng ảnh bằng OCR

Khi phương trình bị đóng thành ảnh, OCR trích xuất văn bản rồi một trình phân tích đơn giản tính đáp án. Bạn gửi ảnh lên, nhận lại chuỗi như "7 + 3", rồi tính trong code của mình.

Dùng CaptchaAI cho CAPTCHA toán học dạng ảnh

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

Luồng ở đây là mô hình bốn bước quen thuộc: gửi ảnh tới in.php, nhận ID task, polling res.php cho đến khi có kết quả, rồi dùng chuỗi phương trình mà OCR trả về. CaptchaAI tính tiền theo thread (luồng giải đồng thời), không theo từng lần giải — gói thấp nhất là BASIC ($15/tháng, 5 thread) — nên chi phí phụ thuộc số thread song song chứ không phải số phương trình.


So sánh CAPTCHA toán học với các loại khác

CAPTCHA toán học nằm ở đầu nhẹ nhất của phổ: ít ma sát cho người dùng, nhưng gần như không cản được bot biết đọc HTML. Bảng dưới đặt nó cạnh vài loại phổ biến để thấy đánh đổi.

Tiêu chí CAPTCHA toán học reCAPTCHA v2 hCaptcha CAPTCHA thanh trượt
Ma sát với người dùng Thấp (tính nhẩm nhanh) Trung bình (chọn ảnh) Trung bình (chọn ảnh) Thấp (kéo một lần)
Khả năng chặn bot Rất thấp Cao Cao Trung bình
Khả năng tiếp cận Tốt (bản văn bản) Kém (phụ thuộc thị lực) Kém (phụ thuộc thị lực) Kém (phụ thuộc thao tác tay)
Chi phí Miễn phí (tự host) Có bậc miễn phí Có bậc miễn phí Tùy giải pháp
Hay dùng cho WordPress, form liên hệ Đăng nhập, đăng ký Đăng nhập, đăng ký Thương mại điện tử

Nếu mục tiêu là chặn bot nghiêm túc, CAPTCHA toán học không phải lựa chọn — nó chỉ lọc được spam bot thô sơ nhất.


Vì sao CAPTCHA toán học vẫn phổ biến

  1. Đơn giản — Không phụ thuộc API bên ngoài, không cần SDK JavaScript nào.
  2. Plugin WordPress — Các plugin như "Math CAPTCHA" và "Really Simple CAPTCHA" được cài rất rộng.
  3. Ma sát thấp — Người dùng làm phép toán đơn nhanh hơn là ngồi chọn ảnh.
  4. Khả năng tiếp cận — Bản văn bản đọc được bằng trình đọc màn hình, khác với CAPTCHA ảnh.
  5. Hệ thống cũ — Nhiều ứng dụng ra đời trước cả các dịch vụ CAPTCHA hiện đại.

Ở Việt Nam, các team QA và automation gặp loại này nhiều nhất khi làm site WordPress cho doanh nghiệp vừa và nhỏ, hoặc khi công ty outsourcing bảo trì form liên hệ cũ cho khách. Phần lớn là dạng văn bản nên xử lý ngay trong code; phần ảnh mới cần OCR. Khi theo dõi giá trên Shopee, Lazada hay Tiki cho chính danh mục mình quản lý, CAPTCHA toán học hiếm khi là rào cản thật — nhưng vẫn nên có nhánh phát hiện để pipeline không đứng im khi gặp nó.


Câu hỏi thường gặp

CAPTCHA toán học khác gì CAPTCHA logic?

CAPTCHA toán học yêu cầu bạn tính một phép số học ("7 + 3 = ?"), còn CAPTCHA logic hỏi kiến thức phổ thông bằng lời ("Cỏ có màu gì?", "Con chó có mấy chân?"). Cả hai cùng họ và cùng cách kiểm tra: server giữ đáp án đúng rồi so với input. Khác biệt: toán học tính được bằng công thức, còn logic phải tra ngân hàng câu hỏi cố định.

Có phải lúc nào cũng cần OCR để giải CAPTCHA toán học không?

Không. Nếu phương trình nằm ở dạng văn bản HTML, bạn đọc thẳng từ nguồn trang bằng regex hoặc DOM rồi tự tính — không cần OCR. Chỉ khi đề bài được vẽ thành ảnh thì mới cần OCR để trích xuất phương trình trước, sau đó code của bạn tính đáp án như bình thường.

Giải CAPTCHA toán học dạng ảnh bằng CaptchaAI tốn bao nhiêu?

CaptchaAI tính giá theo thread (số luồng giải chạy song song), không tính theo từng lần giải, và mỗi thread giải không giới hạn số lượng trong tháng. Gói thấp nhất là BASIC ($15/tháng, 5 thread). Nghĩa là chi phí phụ thuộc vào bao nhiêu form bạn xử lý cùng lúc, không phải tổng số phương trình — hợp lý cho các pipeline chạy đều đặn theo lô.

Nên thay CAPTCHA toán học bằng gì để chống bot tốt hơn?

Nếu muốn ít ma sát mà vẫn phát hiện bot mạnh, Cloudflare Turnstile là lựa chọn tốt: chạy gần như vô hình, không bắt người dùng tương tác. Cần mức bảo mật cao hơn thì reCAPTCHA v3 chấm điểm hành vi theo score là hướng hiệu quả.


Tóm tắt

CAPTCHA toán học và logic là dạng thử thách đơn giản nhất, thường thấy trên form liên hệ WordPress và hệ thống cũ. Điều quyết định là đề ở dạng nào: bản văn bản đọc thẳng từ HTML và tính bằng vài dòng code; bản ảnh cần OCR đọc phương trình rồi mới tính. Với CAPTCHA toán học dạng ảnh, dùng API OCR ảnh của CaptchaAI để trích xuất và giải phương trình. Tuy dễ vượt qua, loại CAPTCHA này vẫn phổ biến nhờ sự đơn giản và ưu thế về khả năng tiếp cận.

Bài viết liên quan

Os comentários estão desativados para este artigo.