สร้าง CAPTCHA แบบสุ่ม (a-z, A-Z, 0-9) ให้ผู้ใช้กรอก แล้วตรวจสอบความถูกต้อง
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
bool check_captcha(const string& captcha, const string& user_input) {
return captcha == user_input;
}
string generate_captcha(int length) {
const string chars =
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789";
static std::mt19937 rng(std::random_device{}());
std::uniform_int_distribution dist(0, chars.size() - 1);
string captcha;
captcha.reserve(length);
for (int i = 0; i < length; i++)
captcha += chars[dist(rng)];
return captcha;
}
int main() {
string captcha = generate_captcha(9);
cout << "CAPTCHA: " << captcha << endl;
string user_input;
cout << "Enter CAPTCHA: ";
cin >> user_input;
if (check_captcha(captcha, user_input))
cout << "CAPTCHA Matched\n";
else
cout << "CAPTCHA Not Matched\n";
return 0;
}
ผลลัพธ์ตัวอย่าง
CAPTCHA: nwsraJhiP Enter CAPTCHA: fgyeugs56 CAPTCHA Not Matched
ปรับปรุงความปลอดภัย
- ใช้ Cryptographically Secure RNG (
random_device) - เพิ่ม Noise/Distortion ถ้าเป็น Image CAPTCHA
- จำกัดเวลาและจำนวนครั้งที่พยายาม
- เก็บ Session/Token ป้องกัน Replay Attack
หมายเหตุ
โค้ดต้นฉบับใช้ srand(time(&t)) ภายในฟังก์ชัน ทำให้หากเรียกเร็วเกินไปจะได้ค่าเดิม เราแก้ไขให้ใช้ static mt19937 แบบ Modern C++