博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net 验证码技术
阅读量:4958 次
发布时间:2019-06-12

本文共 3673 字,大约阅读时间需要 12 分钟。

网站验证码是一种很常用的技术。下面我介绍下技术上是如何实现的。

验证码是一张图片。我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx)。

看不清?换一张
验证码:
ValidateImage.aspx 用来生产验证码图片,并将验证码的码值保存到cookie中。 代码如下:
public partial class ValidateImage : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            this.CreateCheckCodeImage(RndNum());        }        /// 生成验证码        ///         /// 
private string RndNum() { int number; char code; string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 4; i++) { number = random.Next(); 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("yzmcode", checkCode)); return checkCode; } /// 向页面生成验证码Gif图片 /// /// private void CreateCheckCodeImage(string checkCode) { if (checkCode == null || checkCode.Trim() == String.Empty) return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的背景噪音线 for (int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点 for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } } }

最后就是后台事件,判断当前验证码是否正确。

代码如下:

#region 页面控件事件        protected void btnSubmit_Click(object sender, EventArgs e)        {            if (String.Compare(Request.Cookies["yzmcode"].Value, tbxCheckNo.Text, true) != 0)            {                Response.Write("");            }            else            {               // Response.Write("");            }        }  #endregion

 

转载于:https://www.cnblogs.com/tuolei/p/3205664.html

你可能感兴趣的文章
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
Mysql数据库乱码总结
查看>>
BZOJ.3160.万径人踪灭(FFT Manacher)
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
Spring Cloud是怎么运行的?
查看>>
12 联结表
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
xss攻击
查看>>
开发环境中快速部署Oracle Essbase(Rapid deployment of oracle essbase in development envrioments)...
查看>>
开发进度4
查看>>
HDOJ_2754 素数种类统计
查看>>
内存分析工具 MAT 的使用
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
icpc 南昌邀请赛网络赛 Max answer
查看>>
将github上托管的代码 在我的域名下运行
查看>>