当前位置:首页 > C#学习 > C#练习 > 正文内容

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

小道5年前 (2019-01-02)C#练习3713

随机生成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://daobk.com/post/162.html

标签: GDI+
分享给朋友:

“C# 简单5位数字验证码小练习(GDI+)” 的相关文章

C# 随机数产生 Random

C# 随机数产生 Random

输入一个范围,在这个范围内随机产生数字:        private void btn_Click(object sender, EventArgs e) /...

C# 简单 控制台 飞行棋 附源码

C# 简单 控制台 飞行棋 附源码

简单C# 控制台飞行棋,使用 int数组 用于创建地图。图例: 幸运转盘: ◎    地雷: ☆    暂停: ▲    时空隧道: 卐using System; namespace 飞行棋 {  &...

C# 简单工厂模式

C# 简单工厂模式

C# 简单工厂模式通过工厂先生产笔记本(抽象类),根据用户需要的品牌(具体类),给用户品牌笔记本。using System; namespace 简单工厂设计模式 {     class Program  &...

C# 石头剪刀布 小游戏

C# 石头剪刀布 小游戏

C# 石头剪刀布 小游戏假设:石头 1,剪刀 2,布 3;玩家赢的结果:1-2=-1,2-3=-1,3-1=2;平手:相减=0;其他情况是电脑赢了。Form1代码:using System; using System.Windows.Forms; namespace&nb...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。