天天看點

C#繪制窗體驗證碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace VerCode
{
    public partial class VerCodeForm : Form
    {
        public VerCodeForm()
        {
            InitializeComponent();
        }

        private void picCodeWrapper_Click(object sender, EventArgs e)
        {
            Random rd = new Random();
            string str = null;
            // 生成随機數
            for (int i = 0; i < 5; i++)
            {
                int rdCode = rd.Next(0, 9);
                str += rdCode;
            }
            Bitmap bmp = new Bitmap(200, 40);
            Graphics g = Graphics.FromImage(bmp);
            // 繪制驗證碼
            for (int i = 0; i < 5; i++)
            {
                Point p = new Point(i * 35, 0);
                string[] fonts = { "微軟雅黑", "幼圓", "隸書", "宋體", "黑體" };
                Color[] colors = { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Purple };
                g.DrawString(str[i].ToString(), new Font(fonts[rd.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[rd.Next(0, 5)]), p);
            }
            // 驗證碼幹擾線
            for (int i = 0; i < 25; i++)
            {
                Point p1 = new Point(rd.Next(0, bmp.Width), rd.Next(0, bmp.Height));
                Point p2 = new Point(rd.Next(0, bmp.Width), rd.Next(0, bmp.Height));
                g.DrawLine(new Pen(Brushes.Green), p1, p2);
            }
            // 驗證碼幹擾像素點
            for (int i = 0; i < 300; i++)
            {
                Point p = new Point(rd.Next(0, bmp.Width), rd.Next(0, bmp.Height));
                bmp.SetPixel(p.X, p.Y, Color.Black);
            }
            picCodeWrapper.Image = bmp;
        }
    }
}
           

運作示例:

C#繪制窗體驗證碼