• 首页
  • 云服务器
  • 物理服务器
  • 跨境电商
  • 知识库
  • 保障
    信任中心 >>
    • 基础设施与网络
    • 服务保障能力
    • 数据安全
    • 合规资质
    数据中心 >>
    • 中国洛阳国际数据中心
    • 中国香港多线数据中心
    VIP会员服务 >>
    • 7*24小时服务支持
    • 0元快速备案
    • 100倍故障赔偿
    • 5天无理由退款
会员登录 免费注册

帮助中心 / ASP.NET验证码的示例分析

ASP.NET验证码的示例分析



来源:辰迅云编辑:chenxun时间:2021/8/13 23:23:17



这篇文章给大家分享的是有关ASP.NET验证码的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

我主要是看到干扰线了,一个验证码里面要是没有干扰线什么的,至少得在噪点和随机码的排版上下工夫:

 /// <summary> /// 验证码生成类 /// </summary> public class verify_code : IHttpHandler, IRequiresSessionState {
  public void ProcessRequest(HttpContext context)  {
   int codeW = 80;
   int codeH = 22;
   int fontSize = 16;
   string chkCode = string.Empty;
   //颜色列表,用于验证码、噪线、噪点    Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
   //字体列表,用于验证码    string[] font = { "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" };
   //验证码的字符集,去掉了一些容易混淆的字符    char[] character = { '0', '1', '2', '3', '4', '5', '6', '8', '9' };
   Random rnd = new Random();
   //生成验证码字符串    for (int i = 0; i < 4; i++)
   {
    chkCode += character[rnd.Next(character.Length)];
   }
   //写入Session   context.Session["sys_verify_code"] = chkCode;
   //创建画布   Bitmap bmp = new Bitmap(codeW, codeH);
   Graphics g = Graphics.FromImage(bmp);
   g.Clear(Color.White);
   //画噪线    for (int i = 0; i < 4; i++)
   {
    int x1 = rnd.Next(codeW);
    int y1 = rnd.Next(codeH);
    int x2 = rnd.Next(codeW);
    int y2 = rnd.Next(codeH);
    Color clr = color[rnd.Next(color.Length)];
    g.DrawLine(new Pen(clr), x1, y1, x2, y2);
   }
   //画验证码字符串    for (int i = 0; i < chkCode.Length; i++)
   {
    string fnt = font[rnd.Next(font.Length)];
    Font ft = new Font(fnt, fontSize);
    Color clr = color[rnd.Next(color.Length)];
    g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 18 + 2, (float)0);
   }
   //画噪点    for (int i = 0; i < 100; i++)
   {
    int x = rnd.Next(bmp.Width);
    int y = rnd.Next(bmp.Height);
    Color clr = color[rnd.Next(color.Length)];
    bmp.SetPixel(x, y, clr);
   }
   //清除该页输出缓存,设置该页无缓存    context.Response.Buffer = true;
   context.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
   context.Response.Expires = 0;
   context.Response.CacheControl = "no-cache";
   context.Response.AppendHeader("Pragma", "No-Cache");
   //将验证码图片写入内存流,并将其以 "image/Png" 格式输出    MemoryStream ms = new MemoryStream();
   try   {
    bmp.Save(ms, ImageFormat.Png);
    context.Response.ClearContent();
    context.Response.ContentType = "image/Png";
    context.Response.BinaryWrite(ms.ToArray());
   }
   finally   {
    //显式释放资源     bmp.Dispose();
    g.Dispose();
   }
  }

  public bool IsReusable
  {
   get   {
    return false;
   }
  }
 }

基本验证生成代码demo:

using System;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Web;public partial class image : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e) {
  string tmp = RndNum(4);
  HttpCookie a = new HttpCookie("ImageV", tmp);
  Response.Cookies.Add(a);
  this.ValidateCode(tmp);
 }

 private void ValidateCode(string VNum) {
  Bitmap Img = null;
  Graphics g = null;
  MemoryStream ms = null;
  int gheight = VNum.Length * 12;
  Img = new Bitmap(gheight, 25);
  g = Graphics.FromImage(Img);
  //背景颜色  g.Clear(Color.White);
  //文字字体  Font f = new Font("Arial Black", 10);
  //文字颜色  SolidBrush s = new SolidBrush(Color.Black);
  g.DrawString(VNum, f, s, 3, 3);
  ms = new MemoryStream();
  Img.Save(ms, ImageFormat.Jpeg);
  Response.ClearContent();
  Response.ContentType = "image/Jpeg";
  Response.BinaryWrite(ms.ToArray());

  g.Dispose();
  Img.Dispose();
  Response.End();
 }

 private string RndNum(int VcodeNum) {
  string Vchar = "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";
  string[] VcArray = Vchar.Split(new Char[] { ',' });
  string VNum = "";
  int temp = -1;

  Random rand = new Random();

  for (int i = 1; i < VcodeNum + 1; i++)
  {
   if (temp != -1)
   {
    rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
   }

   int t = rand.Next(35);
   if (temp != -1 && temp == t)
   {
    return RndNum(VcodeNum);
   }
   temp = t;
   VNum += VcArray[t];
  }
  return VNum;
 }

}

感谢各位的阅读!关于“ASP.NET验证码的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!











    帮助中心

  • 云服务器类
  • 域名类
  • 虚拟主机类
  • 独立服务器
  • 付款类
  • 其他类

现在注册,即刻为您提供最佳上云实践机会

立即注册
辰迅云

400-0666-318 (7*24小时热线)

Copyright 2013 - chenxunyun.com. All RightsReserved. 辰迅云 版权所有
  • 关于辰迅云

    关于我们 发展历程 资质荣誉 新闻公告 诚聘英才 联系我们
  • 辰迅云产品

    云服务器 服务器托管 服务器租用
  • 服务与支持

    域名知识 云服务器问题 SSL证书问题 虚拟主机问题 租用托管 网站备案问题
  • 知识库

    云计算 编程语言 网络安全 智能运维 大数据 深度学习
  • 快速通道

    独立控制面板 忘记密码
乐创云
  • 工信部备案号沪ICP备20007084号
  • 《中华人民共和国增值电信业务经营许可证》编号: B1-20194590号

在线客服

电话咨询

微信客服