作业:验证码要求:(1)验证码应该是图片格式,不能是文字格式,即无法用鼠标选中。(2)验证码上应该有噪点和干扰线条。(3)验证码应该回避相似字符,如“0”和“o”“I”和“1”等。(4)验证码至少是数字和字母(含大小写)的组合,不应该是单纯的数字或字母,可以出现汉字。应该实现输入验证码字母字母“不区分大小写”。验证码中的内容,应该是随机生成。(5)验证码,可以通过点击图片或旁边文字实现“看不清,换一张”的功能。(6)应当有个用于核对验证码输入是否正确的tbx和btn,当点击btn时,弹窗提示验证码输入的是正确或错误。

新建一个ashx文件

前端页面

<asp:Label ID="Label1" runat="server" Text="请输入验证码:"  ></asp:Label>
<asp:TextBox ID="tbx_check" runat="server"></asp:TextBox>
<asp:ImageButton ID="ImageButton1" runat="server" src="checknumber.ashx" alt="验证码"/>
<asp:Button ID="btn_check" runat="server" Text="验证" OnClick="btn_check_Click" />

aspx代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.SessionState;namespace 验证码模块
{public partial class WebForm1 : System.Web.UI.Page, IRequiresSessionState{protected void Page_Load(object sender, EventArgs e){}protected void btn_check_Click(object sender, EventArgs e){//不区分大小写验证if (String.Compare(tbx_check.Text.Trim(), Session["check"].ToString(), true) == 0){Response.Write("<script>alert('验证码正确') </script>");}else{Response.Write("<script>alert('验证码错误') </script>");}}//点击图片更换验证码protected void ImageButton1_Click(object sender, ImageClickEventArgs e){ImageButton1.ImageUrl = "checknumber.ashx?id=" + new Random(100).ToString();}}
}

ashx代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//画板
using System.Drawing;
using System.Drawing.Imaging;
//Session传值
using System.Web.SessionState;namespace 验证码模块
{/// <summary>/// Handler1 的摘要说明/// </summary>public class Handler1 : IHttpHandler, IRequiresSessionState{public void ProcessRequest(HttpContext context){//定义位图的宽度和高度int iBmpW = 200;int iBmpS = 50;//创建位图对象(并初始化宽度和高度)Bitmap Bmp = new Bitmap(iBmpW, iBmpS);//创建画布Graphics Grc = Graphics.FromImage(Bmp);//将位图装载到画布里面//将画布的背景色改为白色Grc.Clear(Color.White);//定义画笔对象SolidBrush solidBrush = new SolidBrush(Color.Blue);//定义存放的字符串,画布上要显示的验证码,回避相似字符所以去掉I、1、o、0string sString = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghyzklmnopqrstuvwxtz23456789呆锅工酱";//定义随机数Random Rnd = new Random((int)DateTime.Now.Ticks);//强制转换为整型//for存放随机数的字符变量string scode = null;for (int i = 0; i < 6; i++){string temp = sString.Substring(Rnd.Next(0, sString.Length), 1);//将随即得到的每个字符进行字符串构造scode += temp;}//随机输出噪点Random rand = new Random();for (int i = 0; i < 10; i++){int x = rand.Next(Bmp.Width);int y = rand.Next(Bmp.Height);Grc.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);}int z = 6;//干扰线条数for (int i = 0; i < z; i++){int x1 = rand.Next(Bmp.Width);int x2 = rand.Next(Bmp.Width);int y1 = rand.Next(Bmp.Height);int y2 = rand.Next(Bmp.Height);Grc.DrawLine(new Pen(Color.LightGray, 1), x1, y1, x2, y2);//根据坐标画线}Font ft = new Font("Arial", 25);Grc.DrawString(scode, ft, solidBrush, 0, 0);context.Response.ContentType = "image/jpg";Bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);//向外传scode的值以验证context.Session["check"] = scode;}public bool IsReusable{get{return false;}}}
}

ASP.NET验证码相关问题相关推荐

  1. ASP.net 验证码(C#)

     ASP.net 验证码(C#) /* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */  public class Val ...

  2. 登录之验证码相关实现

    一,登录页面为什么要有验证码? 防止用户恶意的频繁向后端发送请求,使得服务端的压力大增,避免不必要的请求压力. 以Django为例,关于图片验证码和滑动验证码的实现 二.图片验证码的实现 路由部分 u ...

  3. C#发现之旅第九讲 ASP.NET验证码技术

    C#发现之旅第九讲 ASP.NET验证码技术 袁永福 2008-5-15 系列课程说明     为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅"的技术讲 ...

  4. asp.net mvc相关开源项目推荐

    原文地址为: asp.net mvc相关开源项目推荐 asp.net mvc ctp版本发布不到一个月时间,在社区出现了丛多的优秀开源项目,社区的活跃性非常高哦,前一段时间园子里也引发了MVC和Web ...

  5. ASP.NET 验证码示例

    <%@ Page Language="C#" %> <%@ Import Namespace="System.Drawing" %> & ...

  6. asp.net验证码图片生成示例

    验证码,一个很常见的东西.不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话"内行看门道,外行看热闹!",仔细琢磨一下还真的是那么一回事.对于怎么 ...

  7. ASP.NET验证码的实现

    /* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */  public class ValidateCode : Syste ...

  8. asp/php招聘,招聘ASP与PHP相关岗位的笔经

    谈谈asp,php,jsp的优缺点(1分) asp:简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型 ...

  9. ASP.NET RouteModule相关的一些东西

    Asp.NET中的路由配置,首先要提到的几个相关类型,Route ,RouteBase,RouteData,RouteTable,RouteCollection 这几个.下面我一次回忆一下,有需要的朋 ...

最新文章

  1. 深入理解golang的defer
  2. Angular Component class属性初始化和构造函数执行的先后顺序
  3. 导出jar插件_Fluttify输出的Flutter插件工程详解
  4. Java程序员如何快速理解Kubernetes
  5. redistemplate使用_如何使用 SpringBoot + Redis 优雅的解决接口幂等性问题
  6. 十强决赛即将拉开帷幕!TECHSPARK星星之火IT创新大赛诚邀您观赛
  7. Java.Lang.NoSuchMethod 错误
  8. 圆与平面的接触面积_如果把绝对圆的球体放在绝对平的平面上,那接触面是不是无限小?...
  9. 晋南讲堂之持久层框架ORM简介
  10. Android 深色模式使用失效
  11. 澳大利亚维多利亚州旅游局力推高尔夫主题体验
  12. 特殊符号“.”对命令识别的影响:bam样本名报错 和 转换gene id时‘ENSEMBL’ keys无法识别
  13. 学儿歌听故事android源码,儿童宝宝听儿歌故事
  14. 软件测试之语音识别(ASR)测试
  15. 程序员-IT领域的魔法师
  16. 动态内存的分配与释放
  17. 上班族适合的兼职副业,副业做什么比较靠谱,副业赚钱的路子有哪些
  18. Java中valueOf()方法
  19. 七月在线 《图像识别与检测》
  20. [JAVA毕业设计]服装连锁店后台管理系统源码获取和系统演示

热门文章

  1. python 鼠标 自动点击_利用python模拟鼠标点击自动完成工作,提升你的工作效率!...
  2. LeetCode 729. 我的日程安排表 I
  3. 微信小程序的订单评论页面-仿淘宝
  4. 未能将管道连接到虚拟机: 所有的管道范例都在使用中。_泸溪县双卡压不锈钢管有哪些品牌-金管道...
  5. 配置NTP时间同步之Linux
  6. 医院PACS系统:三维多平面重建操作使用
  7. jsp引入js文件找不到,我发誓路径绝对正确
  8. 小程序与普通网页开发的区别
  9. touchesBegan: withEvent: 不执行解决
  10. Cocos2d-JS 加载网络地址图片