C# 简单5位数字验证码小练习(GDI+)

原创 小道  2019-01-02 12:46:54  阅读 733 次 评论 0 条
摘要:

随机生成5位数字,随机字体,随机颜色,以图片方式显示出,并画出若干直线和点。达到简单验证码效果。

随机生成5位数字,随机字体,随机颜色,以图片方式显示出,并画出若干直线和点。达到简单验证码效果。

界面设计:

image.png

代码:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace GDI_验证码
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string str = "";//字符串变量
        private void pictureBox1_Click(object sender, EventArgs e)//图片框单击事件
        {
            YZM();//调用方法
        }

        private void button1_Click(object sender, EventArgs e)//按钮 单击事件
        {
            if (str == txtYZM.Text)//判断随机的5位数字和文本框输入字符串 是否相同
            {
                MessageBox.Show("验证码正确!", "正确", MessageBoxButtons.OK, MessageBoxIcon.Information);//提示
                txtYZM.Clear();//清空文本框
                YZM();//调用方法
            }
            else
            {
                MessageBox.Show("验证码不正确!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);//提示
                txtYZM.Clear();//清空文本框
                YZM();//调用方法
            }
        }

        void YZM()//方法
        {
            Random r = new Random();//随机数生成器
            str = "";//字符串为空
            txtYZM.Clear();//清空文本框
            for (int i = 0; i < 5; i++)//循环 5位随机数
            {
                str += (r.Next(0, 10).ToString());//得到5位随机数,并转换为字符串,赋值给str
            }
            Bitmap bmp = new Bitmap(80, 21);//位图 指定大小
            Graphics g = Graphics.FromImage(bmp);//封装一个 GDI+ 绘图图面。
            for (int i = 0; i < 5; i++)//循环
            {
                string[] fonts = { "微软雅黑", "宋体", "黑体", "楷体", "仿宋", "新宋体" };//用于随机字体
                Color[] colors = { Color.Blue, Color.Green, Color.Cyan, Color.Black, Color.Red, Color.Yellow };//用于随机颜色
                Point p = new Point(i * 15, 0);//用于指定随机数字位置
                g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 6)], 12, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 6)]), p);
                //5位随机数,每个随机数,随机字体,颜色和位置。
            }
            for (int i = 0; i < 8; i++)//循环
            {
                Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));//随机点
                Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));//随机点
                g.DrawLine(new Pen(Brushes.Green), p1, p2);//绘制直线
            }
            for (int i = 0; i < 15; i++)//循环
            {
                Point p = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));//随机点
                bmp.SetPixel(p.X, p.Y, Color.Black);//绘制 点。
            }
            pictureBox1.Image = bmp;//将生成位图 设置到pictureBox1框上。
        }

        private void Form1_Load(object sender, EventArgs e)//窗体默认加载
        {
            YZM();//调用方法
        }
    }
}

输出结果:

image.pngimage.pngimage.png

本文地址:https://www.daobk.com/post/162.html
版权声明:本文为原创文章,版权归 小道 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?