0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 6
1

Улучшение программы по генерации капчи

28.09.2017, 00:54. Показов 384. Ответов 1
Метки нет (Все метки)

Доброго времени суток!
Вашему вниманию представлена капча с генерацией рандомного текста. Код писал частично я и частично было взято из разных источников. Просьба заключается в том чтобы как-нибудь улучшить программу, сделать капчу сложнее.
Если я что-то намудрил или код написан не правильно или имеются идеи по улучшению капчи просьба отписаться в комментариях.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <iostream>
#include<string>
#include<locale.h>
#include <algorithm>
#include <ctime>
 
using namespace std;
void draw_rectangle(HANDLE _hStdout, int left, int top, int right, int bottom);
void set_cursor_pos(HANDLE _hStdout, int x, int y);
char fill_char = ' ';
int main()
{
    setlocale(LC_ALL, "Rus");
    HANDLE hStdout;
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hStdout == INVALID_HANDLE_VALUE)
        cout << "Ошибка в GetStdHandle STD_INPUT_HANDLE" << endl;
 
    SetConsoleTextAttribute(hStdout, BACKGROUND_GREEN);//Цвет фона капчи
 
    draw_rectangle(hStdout, 1 , 1, 16, 6);//размер и положение окна
    COORD p1 = { 4, 2 };//Положение текста
    SetConsoleCursorPosition(hStdout, p1);
    //------------------------------------------------------------------------------------------------------
    //Рандомный текст
    srand(unsigned(time(0)));    //чтобы каждый раз разные
    string alph;  //Создаем алфавит русского языка
    for (char i = 'A'; i <= 'Z'; ++i) alph = alph + i;
 
 
 
    random_shuffle(alph.begin(), alph.end());  //перемешиваем алфавит
    alph[5] = 0;  //Используем возможности Си строк, выбираем 16 первых символов
    alph = alph.c_str();
    cout << alph;
    
    //------------------------------------------------------------------------------------------------------
    COORD p2 = { 0, 14 };
    SetConsoleCursorPosition(hStdout, p2);
    SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);//цвет текста
    //-----------------------------------------------------------------------------------------
    POINT op;
    HWND hWnd = GetConsoleWindow(); //Получаем дескриптор окна консоли
 
    HDC hDC = GetDC(hWnd); //Получаем контекст устройства по полученному дескриптору
    SelectObject(hDC, GetStockObject(WHITE_PEN)); //Выбираем перо WHITE_PEN в контекст
 
    {MoveToEx(hDC, 50, 50, &op); 
    LineTo(hDC, 100, 100);
    MoveToEx(hDC, 100, 100, &op);
    LineTo(hDC, 150, 50);
    }
    {
        SelectObject(hDC, GetStockObject(BLACK_PEN));
        MoveToEx(hDC, 100, 50, &op); 
        LineTo(hDC, 50, 100);
        MoveToEx(hDC, 100, 50, &op);
        LineTo(hDC, 150, 100);
    }
    {
        SelectObject(hDC, GetStockObject(BLACK_PEN));
        MoveToEx(hDC, 150, 50, &op); 
        LineTo(hDC, 50, 50);
    }
    {
        SelectObject(hDC, GetStockObject(WHITE_PEN));
        MoveToEx(hDC, 150, 100, &op); 
        LineTo(hDC, 50, 100);
    }
    {
        SelectObject(hDC, GetStockObject(WHITE_PEN));
        MoveToEx(hDC, 150, 75, &op); 
        LineTo(hDC, 50, 75);
    }
    ReleaseDC(hWnd, hDC); //"Освобождаем" контекст
    //-----------------------------------------------------------------------------------------
    
    //------------------------------------------------------------------------------------------
    string prov1;
    cout << "Введите капчу!:";
    cin >> prov1;
    if (prov1 == alph){
        
        cout << "Добро пожаловать!!!" << endl;
    }
    else{
        cout << "Неверная капча" << endl;
    }
    
    system("pause");
    return 0;
    
    
}
 
void draw_rectangle(HANDLE _hStdout, int left, int top, int right, int bottom)
{
    DWORD cWritten;
    int width = right - left + 1;
    for (int y = top; y <= bottom; y++)  //стак строк
    {
        set_cursor_pos(_hStdout, left, y);
        for (int j = 0; j<width; j++)
        {
            if (!WriteFile(_hStdout, &fill_char, sizeof(char), &cWritten, NULL))
            {
                cout << "Ошибка записи файла" << endl;
                return;
            }
        }
    }
}
 
void set_cursor_pos(HANDLE _hStdout, int x, int y)
{
    COORD cursor_pos;              //начало в верхнем левом углу
    cursor_pos.X = x - 1;          //Windows начинает в позиции (0, 0)
    cursor_pos.Y = y - 1;          //мы начинаем в позиции (1, 1)
    SetConsoleCursorPosition(_hStdout, cursor_pos);
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2017, 00:54
Ответы с готовыми решениями:

При генерации капчи сверху появляется залитая линия. Как ее убрать?
Здравствуйте, при генерации капчи с верху появляется залитая линия. Никак не могу её убрать) Вот...

Улучшение работы программы по построению графиков
Нашёл исходник программы для построения графиков: http://www.kansoftware.ru/?tid=1834 Но есть две...

решение капчи. Самописные программы для решения капч
Здравствуйте! меня интересует для чего вебмастера заказывают решение капчи на сервисах такие как...

Программы для генерации HTML форм
Добрый день. Подскажите пожалуйста названия программ, для формирования HTML форм. Или кто то может...

1
1360 / 997 / 316
Регистрация: 28.07.2012
Сообщений: 2,759
28.09.2017, 01:10 2
IBASNIK351, смысл капчи в том, чтобы она просто решалась человеком и сложно решалась компьютером.
В твоем же случае все находится на уровне Ctrl+C - Ctrl+V, сделай хотя бы так, чтобы ее нельзя было скопировать из окна.
Ну и почитай в Инетрнете тематические статьи по генерации и распознаванию капчи.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2017, 01:10

Зависание программы при генерации случайного графа
Есть программа по поиску пути в графе сделанная на Delphi 7 и при генерации случайного графа иногда...

Не получается оптимизировать код программы (Приложение для генерации бент-функций)
Здравствуйте. Я пишу приложение для генерации бент-функций и столкнулся с проблемой оптимизации...

возможно ли создание программы сканирующей картинку на мониторе и генерации сигналов по результатам анализа сканирования?
сам не программист....

Улучшение БД
Всем привет! Вот хочу создать БД по предприятиям предлагающим услуги в сфере ИТ по Брянску и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.