[ASP.NET]验证码生成

本文介绍了一种简单的验证码生成方法,包括前后端代码实现细节。通过创建验证码类并利用随机数生成字母数字组合,最终输出为图片形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
验证码是现在大多数网站、论坛用到的为防止非法登录和非法提交信息的一种方法,其实它的实现并不复杂。下面就举个简单例子做一说明,生成的是包含字母和数字组合的验证码。

      首先在一个测试页面上,放一个img标记,然后将它的src属性指向一个验证码页面,用来得到输出的验证码图片的二进制流。接下来在验证码页面的Page_Load方法中调用一个验证码类的CreateValidateGraphic方法就可以了,这个方法需要传一个Page类型的参数。大体实现过程就是这样,另外如果要更换一张验证码图片,可以点击一下“刷新”,后附相关代码。

 

 ----------测试页面 Test1.aspx----------





 看不清验证码请点击刷新 刷新
----------验证码页面后台文件 ValidateCode.aspx.cs---------- 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.WebControls.WebParts; using System.Web.UI.HtmlControls; using Solution.PublicLib; public partial class Test_ValidateCode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ValidateCode vc = new ValidateCode(146, 37, 5, 17f); vc.CreateValidateGraphic(this); Session["ValidateCodes"] = vc.ValidateCodes; } } ----------验证码类 ValidateCode.cs---------- using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Imaging; using System.Web.UI; using System.Drawing.Drawing2D; using System.IO; namespace Solution.PublicLib { /// /// 验证码类 /// public class ValidateCode { //验证码图片的长度 private int _imageWidth = 0; //验证码图片的高度 private int _imageHeight = 0; //验证码字符串的长度 private int _codeLength = 0; //新字体的全身大小(以磅值为单位) private float _emSize = 0f; //存放所有验证码字符串的数组 屏蔽"0"和"O" private string[] _fullCodes ={ "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; //存放生成的验证码字符串的数组 private string[] _validateCodes = null; /// /// 验证码类的构造函数 /// /// 验证码图片的长度 /// 验证码图片的高度 /// 验证码字符串的长度 /// 新字体的全身大小 public ValidateCode(int imageWidth, int imageHeight, int codeLength, float emSize) { _imageWidth = imageWidth; _imageHeight = imageHeight; _codeLength = codeLength; _emSize = emSize; } /// /// 新字体的全身大小 /// public float EmSize { get { return _emSize; } } /// /// 验证码图片的长度 /// public int ImageWidth { get { return _imageWidth; } } /// /// 验证码图片的高度 /// public int ImageHeight { get { return _imageHeight; } } /// /// 验证码字符串的长度 /// public int CodeLength { get { return _codeLength; } } /// /// 验证码数组 /// public String[] ValidateCodes { get { return _validateCodes; } } /// /// 生成验证码字符串 /// /// private string CreateValidateString() { string validateStr = ""; string[] validateCodes = new string[_codeLength]; //生成起始序列值 int seekSeek = unchecked((int)DateTime.Now.Ticks); Random seekRand = new Random(seekSeek); int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - _codeLength * 10000); int[] seeks = new int[_codeLength]; for (int i = 0; i < _codeLength; i++) { beginSeek += 10000; seeks[i] = beginSeek; } for (int i = 0; i < _codeLength; i++) { Random rnd = new Random(seeks[i]); int index = rnd.Next(0, _fullCodes.Length); validateCodes[i] = _fullCodes[index]; } for (int i = 0; i < _codeLength; i++) { validateStr += validateCodes[i].ToString() + " "; } _validateCodes = validateCodes; return validateStr; } /// /// 输出验证码图片 /// /// 要输出到的page对象 public void CreateValidateGraphic(Page containsPage) { string validateStr = CreateValidateString(); //Bitmap image = new Bitmap((int)Math.Ceiling(validateNum.Length * 12.5), 22); Bitmap image = new Bitmap(_imageWidth, _imageHeight); 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 Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic)); //Font font = new Font("Comic Sans MS", 18, (FontStyle.Bold | FontStyle.Italic)); Font font = new Font("Comic Sans MS", _emSize, (FontStyle.Bold));//| FontStyle.Italic //LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.FromArgb(126, 190, 202), Color.FromArgb(126, 190, 202), 1.2f, true); //g.DrawString(validateNum, font, brush, 3, 2); g.DrawString(validateStr, font, brush, 5, 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); //保存图片数据 MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //输出图片 containsPage.Response.Clear(); containsPage.Response.ContentType = "image/jpeg"; containsPage.Response.BinaryWrite(stream.ToArray()); } finally { g.Dispose(); image.Dispose(); } } } }

                
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值