千家信息网

如何使用.net生成验证码

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章主要介绍"如何使用.net生成验证码",在日常操作中,相信很多人在如何使用.net生成验证码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用.net生成验
千家信息网最后更新 2025年11月10日如何使用.net生成验证码

这篇文章主要介绍"如何使用.net生成验证码",在日常操作中,相信很多人在如何使用.net生成验证码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用.net生成验证码"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

先给大家看看效果图:

页面代码:

  验证码    
验证码 换一张 换一张

后台代码:

///     /// 登录    ///     ///     protected void LoginSubmits(object sender, EventArgs e)    {      CheckLogin();    }    #region 私有方法    #region    public static Boolean IsNotNull(Object str)    {      return !IsNull(str);    }    public static Boolean IsNull(Object str)    {      return str == null;    }    public static void Show(System.Web.UI.Page page, string msg)    {      page.ClientScript.RegisterStartupScript(page.GetType(), "message",        "");    }    #endregion    private void CheckLogin()    {      if (tbCheckCode.Text.Trim() == "")      {        Show(this, "验证码不能为空!");        return;      }      else      {        if (IsNotNull(Session["ValidateCheckCode"]))        {          if (tbCheckCode.Text.Trim() != Session["ValidateCheckCode"].ToString())          {            Show(this, "验证码填写不正确!");            tbCheckCode.Text = "";            return;          }        }        else        {          Show(this, "请刷新验证码!");          return;        }      }    }    #endregion  }}

生成验证码:

using System;using System.Drawing;using System.Text;using System.Web;namespace Web.TEXT{  public partial class VerifyCode : System.Web.UI.Page  {    public Encoding GB = Encoding.GetEncoding("GB2312");    protected void Page_Load(object sender, EventArgs e)    {      VerifyCode v = new VerifyCode();      v.Length = this.length;      v.FontSize = this.fontSize;      v.Chaos = this.chaos;      v.BackgroundColor = this.backgroundColor;      v.ChaosColor = this.chaosColor;      v.CodeSerial = this.codeSerial;      v.Colors = this.colors;      v.Fonts = this.fonts;      v.Padding = this.padding;      string code = v.CreateVerifyCode(); //取随机码      v.CreateImageOnPage(code, this.Context); // 输出图片      Response.Cookies.Add(new HttpCookie("CheckCode", code.ToUpper())); // 使用Cookies取验证码的值      System.Web.HttpContext.Current.Session["ValidateCheckCode"] = code;      //return checkCode;    }    #region 验证码长度(默认4个验证码的长度)    private int length = 4;     public int Length    {      get { return length; }      set { length = value; }    }    #endregion    #region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)    private int fontSize = 12;    public int FontSize    {      get { return fontSize; }      set { fontSize = value; }    }    #endregion    #region 边框补(默认1像素)    private int padding = 1;    public int Padding    {      get { return padding; }      set { padding = value; }    }    #endregion    #region 是否输出燥点(默认不输出)    private bool chaos = true;    public bool Chaos    {      get { return chaos; }      set { chaos = value; }    }    #endregion    #region 输出燥点的颜色(默认灰色)    private Color chaosColor = Color.LightGray;    public Color ChaosColor    {      get { return chaosColor; }      set { chaosColor = value; }    }    #endregion    #region 自定义背景色(默认白色)    private Color backgroundColor = Color.White;    public Color BackgroundColor    {      get { return backgroundColor; }      set { backgroundColor = value; }    }    #endregion    #region 自定义随机颜色数组    private Color[] colors =    {      Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown,      Color.DarkCyan, Color.Purple    };    public Color[] Colors    {      get { return colors; }      set { colors = value; }    }    #endregion    #region 自定义字体数组    private string[] fonts = {"Arial", "Georgia"};    public string[] Fonts    {      get { return fonts; }      set { fonts = value; }    }    #endregion    #region 自定义随机码字符串序列(使用逗号分隔)    private string codeSerial = "0,1,2,3,4,5,6,7,8,9";    // string codeSerial = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";    // string codeSerial = "殃,央,鸯,秧,杨,扬,佯,疡,羊,洋,阳,氧,仰,痒,养,样,漾,邀,腰,妖,瑶,摇,尧,遥,窑,谣,姚,咬,舀,药,要,耀,椰,噎,耶,爷,野,冶,也,页,掖,业,叶,曳,腋,夜,液,一,壹,医,揖,铱,依,伊,衣,颐,夷,遗,移,仪,胰,疑,沂,宜,姨,彝,椅,蚁,倚,已,乙,矣,以,艺,抑,易,邑,屹,亿,役,臆,逸,肄,疫,亦,裔,意,毅,忆,义,益,溢,诣,议,谊,译,异,翼,翌,绎,茵,荫,因,殷,音,阴,姻,吟,银,淫,寅,饮,尹,引,隐,印,英,樱,婴,鹰,应,缨,莹,萤,营,荧,蝇,迎,赢,盈,影,颖,硬,映,哟,拥,佣,臃,痈,庸,雍,踊,蛹,咏,泳,涌,永,恿,勇,用,幽,优,悠,忧,尤,由,邮,铀,犹,油,游,酉,有,友,右,佑,釉,诱,又,幼,迂,淤,于,盂,榆,虞,愚,舆,余,俞,逾,鱼,愉,渝,渔,隅,予,娱,雨,与,屿,禹,株,蛛,朱,猪,诸,诛,逐,竹,烛,煮,拄,瞩,嘱,主,著,柱,助,蛀,贮,铸,筑,住,注,祝,驻,抓,爪,拽,专,砖,转,撰,赚,篆,桩,庄,装,妆,撞,壮,状,椎,锥,追,赘,坠,缀,谆,准,捉,拙,卓,桌,琢,茁,酌,啄,着,灼,浊,兹,咨,资,姿,滋,淄,孜,紫,仔,籽,滓,子,自,渍,字,鬃,棕,踪,宗,综,总,纵,邹,走,奏,揍,租,足,卒,族,祖,诅,阻,组,钻,纂,嘴,醉,最,罪,尊,遵,昨,左,佐,柞,做,作,坐,座";    public string CodeSerial    {      get { return codeSerial; }      set { codeSerial = value; }    }    #endregion    //产生波形滤镜效果    #region 产生波形滤镜效果    private const double PI = 3.1415926535897932384626433832795;    private const double PI2 = 6.283185307179586476925286766559;    /**/    ///     /// 正弦曲线Wave扭曲图片(Edit By 51aspx.com)    ///     /// 图片路径    /// 如果扭曲则选择为True    /// 波形的幅度倍数,越大扭曲的程度越高,一般为3    /// 波形的起始相位,取值区间[0-2*PI)    ///     public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)    {      System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);      // 将位图背景填充为白色      System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);      graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);      graph.Dispose();      double dBaseAxisLen = bXDir ? (double) destBmp.Height : (double) destBmp.Width;      for (int i = 0; i < destBmp.Width; i++)      {        for (int j = 0; j < destBmp.Height; j++)        {          double dx = 0;          dx = bXDir ? (PI2*(double) j)/dBaseAxisLen : (PI2*(double) i)/dBaseAxisLen;          dx += dPhase;          double dy = Math.Sin(dx);          // 取得当前点的颜色          int nOldX = 0, nOldY = 0;          nOldX = bXDir ? i + (int) (dy*dMultValue) : i;          nOldY = bXDir ? j : j + (int) (dy*dMultValue);          System.Drawing.Color color = srcBmp.GetPixel(i, j);          if (nOldX >= 0 && nOldX < destBmp.Width            && nOldY >= 0 && nOldY < destBmp.Height)          {            destBmp.SetPixel(nOldX, nOldY, color);          }        }      }      return destBmp;    }    #endregion    #region 生成校验码图片    public Bitmap CreateImageCode(string code)    {      int fSize = FontSize;      int fWidth = fSize + Padding;      int imageWidth = (int) (code.Length*fWidth) + 4 + Padding*2;      int imageHeight = fSize*2 + Padding;      System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight);      Graphics g = Graphics.FromImage(image);      g.Clear(BackgroundColor);      Random rand = new Random();      //给背景添加随机生成的燥点      if (this.Chaos)      {        Pen pen = new Pen(ChaosColor, 0);        int c = Length*10;        for (int i = 0; i < c; i++)        {          int x = rand.Next(image.Width);          int y = rand.Next(image.Height);          g.DrawRectangle(pen, x, y, 1, 1);        }      }      int left = 0, top = 0, top1 = 1, top2 = 1;      int n1 = (imageHeight - FontSize - Padding*2);      int n2 = n1/4;      top1 = n2;      top2 = n2*2;      Font f;      Brush b;      int cindex, findex;      #region 随机字体和颜色的验证码字符      for (int i = 0; i < code.Length; i++)      {        cindex = rand.Next(Colors.Length - 1);        findex = rand.Next(Fonts.Length - 1);        f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);        b = new System.Drawing.SolidBrush(Colors[cindex]);        if (i%2 == 1)        {          top = top2;        }        else        {          top = top1;        }        left = i*fWidth;        g.DrawString(code.Substring(i, 1), f, b, left, top);      }      //画一个边框 边框颜色为Color.Gainsboro      g.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1);      g.Dispose();      //产生波形      //image = TwistImage(image, true, 8, 4);      return image;    }    #endregion    //将创建好的图片输出到页面    public void CreateImageOnPage(string code, HttpContext context)    {      System.IO.MemoryStream ms = new System.IO.MemoryStream();      Bitmap image = this.CreateImageCode(code);      image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);      context.Response.ClearContent();      context.Response.ContentType = "image/Jpeg";      context.Response.BinaryWrite(ms.GetBuffer());      ms.Close();      ms = null;      image.Dispose();      image = null;    }    #endregion    #region 生成随机字符码    public string CreateVerifyCode(int codeLen)    {      if (codeLen == 0)      {        codeLen = Length;      }      string[] arr = CodeSerial.Split(',');      string code = "";      int randValue = -1;      Random rand = new Random(unchecked((int) DateTime.Now.Ticks));      for (int i = 0; i < codeLen; i++)      {        randValue = rand.Next(0, arr.Length - 1);        code += arr[randValue];      }      return code;    }    public string CreateVerifyCode()    {      return CreateVerifyCode(0);    }    #endregion  }}

到此,关于"如何使用.net生成验证码"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

验证 生成 图片 波形 输出 效果 颜色 学习 字体 背景 边框 代码 像素 字符 数组 方法 更多 白色 长度 随机码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络安全课程大纲 在美国网络安全 网络安全基础 徐国天 安徽营销网络技术市场价格 数据库视图操作总结分析 沈阳市消防网络安全公开课 移动数据库和传统数据库区别 https服务器搭建 软件开发的面试题简答题 广州酒店软件开发外包 湖北质量软件开发平均价格 fw在网络安全上的意思 html5网站链接数据库 路由器上网无法连接服务器 微型互联网科技有限公司 公安机关网络安全检察部门 学网络安全怎么赚钱 社交软件开发哪家公司好 plc的重量写入数据库 服务器hdm管理页 特征值和特征向量计算的软件开发 安徽营销网络技术市场价格 数据库添加数据前缀 修改数据库中已有的数据代码 玩第五人格总是重连服务器怎么办 如何防范网络安全漏洞文章 excel 数据库查询 互联网弱化网络安全相关论点 高职网络技术实验大赛 梦幻服务器为什么这么卡
0