Домой Web Создание CAPCHA для Windows Form приложений: Справочник по C#

Создание CAPCHA для Windows Form приложений: Справочник по C#

1340
0


      Все замечали при регистрации или создании сообщения на форумах или обычных сайтах, везде присутствует картинка с искаженным текстом, которую обычно долго рассматриваешь, пытаясь понять, что там написано. Имя ей CAPTCHA. CAPTCHA от англ. Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей. В интернете часто транскрибируется как «капча».       Термин появился в 2000 году. Основная идея теста: предложить пользователю такую задачу, которую с лёгкостью может решить человек, но которую несоизмеримо сложнее решить компьютеру. В данном посте мы рассмотрим создание изображения с помехами или Капчу.
Создайте проект Windows Form и добавьте три компонента на форму:

  • pictureBox1 — будет отвечать за прорисовку капчи.
  • Свойство: Size = 169; 63;

  • textBox1 -нужен для ввода пользователем ответа
  • button1 — кнопка для генерации новой капчи.
  • Свойство: Text = Обновить;

  • button2 — кнопка проверки введенных данных
  • Свойство: Text = OK; 

    После добавления компонентов ваша форма примет приведенный ниже вид:

Перейдите в код формы и добавьте следующий метод:

private Bitmap CreateImage(int Width, int Height)
{
Random rnd = new Random();

//Создадим изображение
Bitmap result = new Bitmap(Width, Height);

//Вычислим позицию текста
int Xpos = 10;
int Ypos = 10;

//Добавим различные цвета ддя текста
Brush[] colors = {
Brushes.Black,
Brushes.Red,
Brushes.RoyalBlue,
Brushes.Green,
Brushes.Yellow,
Brushes.White,
Brushes.Tomato,
Brushes.Sienna,
Brushes.Pink };

//Добавим различные цвета линий
Pen[] colorpens = {
Pens.Black,
Pens.Red,
Pens.RoyalBlue,
Pens.Green,
Pens.Yellow,
Pens.White,
Pens.Tomato,
Pens.Sienna,
Pens.Pink };

//Делаем случайный стиль текста
FontStyle[] fontstyle = {
FontStyle.Bold,
FontStyle.Italic,
FontStyle.Regular,
FontStyle.Strikeout,
FontStyle.Underline};

//Добавим различные углы поворота текста
Int16[] rotate = {1,-1,2,-2,3,-3,4,-4,5,-5,6,-6};

//Укажем где рисовать
Graphics g = Graphics.FromImage((Image)result);

//Пусть фон картинки будет серым
g.Clear(Color.Gray);

//Делаем случайный угол поворота текста
g.RotateTransform(rnd.Next(rotate.Length));

//Генерируем текст
text = String.Empty;
string ALF = "


7890QWERTYUIOPASDFGHJKLZXCVBNM";
for (int i = 0; i < 5; ++i)
text += ALF[rnd.Next(ALF.Length)];

//Нарисуем сгенирируемый текст
g.DrawString(text,
new Font("Arial", 25, fontstyle[rnd.Next(fontstyle.Length)]),
colors[rnd.Next(colors.Length)],
new PointF(Xpos, Ypos));

//Добавим немного помех
//Линии из углов
g.DrawLine(colorpens[rnd.Next(colorpens.Length)],
new Point(0, 0),
new Point(Width - 1, Height - 1));
g.DrawLine(colorpens[rnd.Next(colorpens.Length)],
new Point(0, Height - 1),
new Point(Width - 1, 0));

//Белые точки
for (int i = 0; i < Width; ++i)
for (int j = 0; j < Height; ++j)
if (rnd.Next() % 20 == 0)
result.SetPixel(i, j, Color.White);

return result;
}

В событие Click кнопки button1 добавим метод для генерации новой капчи:

private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = this.CreateImage(pictureBox1.Width, pictureBox1.Height);
}

В событие Click кнопки button2 добавим метод выполняющий проверку введенного текста и сгенерированного:

private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text == this.text)
MessageBox.Show("Верно!");
else
MessageBox.Show("Ошибка!");
}

В событие Form1_Load, запуск которого происходит при загрузке проекта, так же добавим генерацию капчи.

private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = this.CreateImage(pictureBox1.Width, pictureBox1.Height);
}

Запустите проект и проверьте работу созданного проекта. Примеры работы проекта смотрите ниже.

Ссылка для скачивания примера: Яндекс.Диск

Создание CAPCHA для Windows Form приложений: Справочник по C#

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Получаем список зарегистрированных расширений в Windows : Справочник по C#

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь