(visual studio) 在form窗体上面,怎么实现验证码功能

 我来答
yinfengnong
2013-06-12 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2294万
展开全部

下面是关键代码,另有附件,不懂可以追问

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace VerifyCodeDemo
{
public partial class Form1 : Form
{
private string VerifyCode = "";

public Form1()
{
InitializeComponent();

VerifyCode = MakeCode(5);
pictureBox1.Image = CreateCodeImg(VerifyCode);
}


/// <summary>
/// 生成验证码字符串
/// </summary>
/// <param name="codeLen">验证码字符长度</param>
/// <returns>返回验证码字符串</returns>
private string MakeCode(int codeLen)
{
if (codeLen < 1)
{
return string.Empty;
}
 
int number;
string checkCode = string.Empty;
Random random = new Random();
 
for (int index = 0; index < codeLen; index++) {

number = random.Next();
 
if (number % 2 == 0) {
  checkCode += (char)('0' + (char)(number % 10));     //生成数字
} else {
checkCode += (char)('A' + (char)(number % 26));     //生成字母
}
}

return checkCode;
}


///<summary>
/// 获取验证码图片流
/// </summary>
/// <param name="checkCode">验证码字符串</param>
/// <returns>返回验证码图片流</returns>
private Image CreateCodeImg(string checkCode)
{
            if (string.IsNullOrEmpty(checkCode)) {
return null;
            }
 
Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
 
Graphics graphic = Graphics.FromImage(image);
 
try {
Random random = new Random();
 
                graphic.Clear(Color.White);
 
int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
 
for (int index = 0; index < 25; index++) {
x1 = random.Next(image.Width);
                    x2 = random.Next(image.Width);
                    y1 = random.Next(image.Height);
                    y2 = random.Next(image.Height);
 
                    graphic.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }
 
                Font font = new Font("Arial", 12, (FontStyle.Bold |FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Red, Color.DarkRed, 1.2f, true);
                graphic.DrawString(checkCode, font, brush, 2, 2);
 
                int x = 0;
                int y = 0;
 
                //画图片的前景噪音点
                for(int i=0; i<100; i++) {
                    x = random.Next(image.Width);
                    y = random.Next(image.Height);
 
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
 
                //画图片的边框线
graphic.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

                return image;

            }  finally {
                graphic.Dispose();
            }
        }

private void pictureBox1_Click(object sender, EventArgs e)
{
VerifyCode = MakeCode(5);
pictureBox1.Image = CreateCodeImg(VerifyCode);
}

private void btnOK_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtVerifyCode.Text)) {
MessageBox.Show("输入验证码");
return;
}

if (txtVerifyCode.Text.Equals(VerifyCode, StringComparison.OrdinalIgnoreCase)) {
MessageBox.Show("OK!");
} else { 
MessageBox.Show("验证码错误!");
}
}
}
}


tianweimol
2013-06-11 · TA获得超过360个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:87万
展开全部
具体思路就是先生成4个随机数或字母的组合,然后在页面上用GDI绘制出来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式