这几天看了一些网友关于C#编写验证码的问题,特地关心了一下,自己整理了一些供大家参考学习!

一、验证码的C#源码如下(文件VerifyCode.aspx):

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace validateCode
{
    /**//// <summary>
    /// WebForm2 的摘要说明。
    /// </summary>
    public class WebForm2 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Image Image1;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            this.CreateImage(GenerateCheckCode());
        }
        private string GenerateCheckCode()
        {
            int number;
            char code;
            string checkCode = String.Empty;

            System.Random random = new Random();
            for (int i = 0; i < 4; i++)
            {
                number = random.Next();
                code = (char)('0' + (char)(number % 10));
                if (number % 2 == 0)
                    code = (char)('0' + (char)(number % 10));
                else
                    code = (char)('A' + (char)(number % 26));//数字加英文字
                checkCode += code.ToString();
            }

            Response.Cookies.Add(new HttpCookie("myCheckCode", checkCode));

            return checkCode;
        }
        private void CreateImage(string checkCode)
        {
            int iwidth = (int)(checkCode.Length * 13);
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 25);            
            Graphics g = Graphics.FromImage(image);
            g.Clear(Color.White);
            //定义颜色
            Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
            //定义字体
            string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
            Random rand = new Random();
            //随机输出噪点
            for (int i = 0; i < 2; i++)
            {
                int x = rand.Next(image.Width);
                int y = rand.Next(image.Height);
                g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
            }

            //输出不同字体和颜色的验证码字符
            for (int i = 0; i < checkCode.Length; i++)
            {
                int cindex = rand.Next(7);
                int findex = rand.Next(5);

                Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);

                Brush b = new System.Drawing.SolidBrush(c[cindex]);
                int ii = 4;
                if ((i + 1) % 2 == 0)
                {
                    ii = 2;
                }
                g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);
            }
            //画一个边框
            g.DrawRectangle(new Pen(Color.Black,0), 0, 0, image.Width - 2, image.Height - 2);
            //输出到浏览器
            System.IO.MemoryStream ms = new System.IO.MemoryStream();            
//            image.Save("pic",System.Drawing.Imaging.ImageFormat.Jpeg);
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType = "image/Jpeg";
            Response.BinaryWrite(ms.ToArray());
//            this.Image1.ImageUrl="pic.jpg";
            g.Dispose();
            image.Dispose();
        }

        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /**//// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {    
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion
    }
}

二、C#验证码的使用方法:
在其他需要用到验证码的.aspx的html页里添加如下标签代码即可!
<img src="VerifyCode.aspx">
三、只刷新验证码的实现方法:
在上面的.aspx的html页添加如下代码:
<input class="buttonstyle" style="WIDTH: 120px" οnclick="document.getElementById('imcheckingcode').src='VerifyCode.aspx?temp='+Math.random();" type="button" value="Change Code" />
四、在登录页面的登录按钮的处理事件中使用以下代码判断验证码:

private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
  {
   if(Request.Cookies["CheckCode"] == null)
   {
    lblMessage.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";
    lblMessage.Visible = true;
    return;
   } 

   if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)
   {
    lblMessage.Text = "验证码错误,请输入正确的验证码。";
    lblMessage.Visible = true;
    return;
   }

以上整理的关于C#验证码资料,供大家参考,多提意见!!!

转载于:https://www.cnblogs.com/mc-dragon/archive/2007/01/12/ValidateCode.html

用C#编写验证码的方法相关推荐

  1. 浅谈自动化测试中的验证码处理方法小总结

    今天跟大家聊一聊自动化测试中的验证码处理方法一些小总结,希望对你们有帮助,有说的不好的地方,还请多多指教! 目前,不少网站在用户登录.用户提交信息登登录和输入的页面上使用了验证码技术.验证码技术可以有 ...

  2. Java黑皮书课后题第8章:*8.25(马尔可夫矩阵)一个n*n的矩阵,如果每个元素都是正数,并且每列的元素的和为1,则成为正马尔可夫矩阵。编写下面的方法来检测矩阵是否是马尔可夫矩阵

    *8.25(马尔可夫矩阵)一个n*n的矩阵,如果每个元素都是正数,并且每列的元素的和为1,则成为正马尔可夫矩阵.编写下面的方法来检测矩阵是否是马尔可夫矩阵 题目 题目描述与运行示例 破题 代码 题目 ...

  3. Java黑皮书课后题第8章:**8.19(模式识别:四个连续相等的数)编写下面的方法,测试一个二维数组是否有四个连续相等的数字(水平、垂直、对角线方向都可以)。编写一个测试程序,提示用户输入一个数组

    **8.19(模式识别:四个连续相等的数)编写下面的方法,测试一个二维数组是否有四个连续相等的数字(水平.垂直.对角线方向都可以).编写一个测试程序,提示用户输入一个数组 题目 题目描述与运行实例 破 ...

  4. Java黑皮书课后题第8章:*8.15(几何:在一条直线上吗)编程练习题6.39给出了一个方法,用于测试三个点是否在一条直线上。编写下面的方法,检测points数组中所有的点是否都在同一条直线上

    *8.15(几何:在一条直线上吗)编程练习题6.39给出了一个方法,用于测试三个点是否在一条直线上.编写下面的方法,检测points数组中所有的点是否都在同一条直线上 题目 题目描述与运行示例 破题 ...

  5. Java黑皮书课后题第8章:*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置。返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标

    *8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置.返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标 题目 题目描述与运行示例 破题 代码 题目 ...

  6. Java黑皮书课后题第7章:*7.30(模式识别:四个连续相等的数)编写下面的方法,测试某数组是否有四个连续相同值的数。编写测试程序,提示用户输入一个整数列表,调用方法看是否有4个连续且相等的数

    *7.30(模式识别:四个连续相等的数)编写下面的方法,测试某数组是否有四个连续相同值的数.编写测试程序,提示用户输入一个整数列表,调用方法看是否有4个连续且相等的数 题目 题目描述与运行示例 破题 ...

  7. Java黑皮书课后题第7章:**7.18(冒泡排序)使用冒泡排序算法编写一个排序方法。编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字

    **7.18(冒泡排序)使用冒泡排序算法编写一个排序方法.编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字 题目 题目描述 冒泡排序法 / 下沉排序法 破题 代码 运 ...

  8. Java黑皮书课后题第6章:**6.3(回文整数)使用下面的方法头编写两个方法:……使用reverse方法实现isPalindrome。如果一个数字的逆序数和它自身相等,这个数就称为回文数。

    6.3(回文整数)使用下面的方法头编写两个方法:--使用reverse方法实现isPalindrome.如果一个数字的逆序数和它自身相等,这个数就称为回文数. 题目 题目概述 破题:假设没有提示语句( ...

  9. Java黑皮书课后题第6章:6.1(数学:五角数)一个五角数被定义为n*(3*n-1)/2,其中n=1、2…。所以开始的几个数字就是1、5、12、22…,编写具有以下方法头的方法,返回一个五角数

    6.1(数学:五角数)一个五角数被定义为n*(3*n-1)/2,其中n=1.2-..所以开始的几个数字就是1.5.12.22-,编写具有以下方法头的方法,返回一个五角数 题目 题目概述 破题 代码 运 ...

  10. java kaptcha_java相关:kaptcha验证码使用方法详解

    java相关:kaptcha验证码使用方法详解 发布于 2020-6-7| 复制链接 摘记: 本文为大家分享了kaptcha验证码的使用方法,供大家参考,具体内容如下1.首先在pom.xml文件中导入 ...

最新文章

  1. 字节数与字符数mysql_数据库字段长短之字节与字符
  2. Spring、Spring MVC、Spring Boot三者的关系还傻傻分不清楚?
  3. 关于sizeof表达式作为数组元素个数的编译
  4. TC SRM 562 div2 B 题
  5. ffmpeg支持G711音频和H.264视频数据封装为mp4
  6. 软件架构设计_给非专业人士介绍——软件架构设计工作
  7. 中煤保险 公司举办“虎啸杯”保险知识竞赛活动
  8. 一位跟我一样疑惑的同学~
  9. [Java] 蓝桥杯 BASIC-7 基础练习 特殊的数字
  10. Switch View when host XmlFormView in aspx
  11. 百度AI之图像识别SDK:车牌识别
  12. 完整的产品管理工作流程
  13. Gtk-Message: 14:47:21.541: Failed to load module “canberra-gtk-module“ 的处理方法
  14. 正则表达式[\w]+,\w+,[\w+] 三者区别? [],[ABC]+,[\w./-]+ 表达什么?
  15. VC++6.0共享内存技术总结
  16. 我所知道的金融数据库
  17. KT148A语音芯片SOP外挂功放芯片8002D的说明_V1
  18. 网易乐商北京(电面一)
  19. PowerBI强大的数据汇总能力:将几十张Excel二维表批量转换成一维表进行可视化分析
  20. 无线传感器实验-低功率无线信道建模

热门文章

  1. 中小企业IT建设的小看法2
  2. 说说在 jBPM 工作流中如何实现【会签】功能
  3. 华为HG255D路由破解方法
  4. SQL 数据库基础知识
  5. hp进系统卡在w ndows界面,win10系统HP开机卡在LOGO界面的解决方法
  6. java ee图书管理系统_基于jsp的图书管理系统-JavaEE实现图书管理系统 - java项目源码...
  7. 安装qt qmake 错误:could not find a Qt installation of ''
  8. 一些有用的书签网站整理
  9. SQL server 2016数据库 下载安装
  10. Java并发编程实战 - 笔记