验证码是什么?

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。


为什么要有验证码?

防止恶意破解密码、刷票、论坛灌水、刷页。
有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,增加其破解难度。


如何设置验证码?

一、验证码代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;namespace yzyCommon
{public class ValidateCode{public ValidateCode(){}/// <summary>/// 验证码的最大长度/// </summary>public int MaxLength{get { return 10; }}/// <summary>/// 验证码的最小长度/// </summary>public int MinLength{get { return 1; }}/// <summary>/// 生成验证码/// </summary>/// <param name="length">指定验证码的长度</param>/// <returns></returns>public string CreateValidateCode(int length){int[] randMembers = new int[length];int[] validateNums = new int[length];string validateNumberStr = "";//生成起始序列值int seekSeek = unchecked((int)DateTime.Now.Ticks);Random seekRand = new Random(seekSeek);int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);int[] seeks = new int[length];for (int i = 0; i < length; i++){beginSeek += 10000;seeks[i] = beginSeek;}//生成随机数字for (int i = 0; i < length; i++){Random rand = new Random(seeks[i]);int pownum = 1 * (int)Math.Pow(10, length);randMembers[i] = rand.Next(pownum, Int32.MaxValue);}//抽取随机数字(这里需要导入命名空间: using system.web)for (int i = 0; i < length; i++){string numStr = randMembers[i].ToString();int numLength = numStr.Length;Random rand = new Random();int numPosition = rand.Next(0, numLength - 1);validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));}//生成验证码for (int i = 0; i < length; i++){validateNumberStr += validateNums[i].ToString();}return validateNumberStr;}/// <summary>/// 创建验证码的图片/// </summary>/// <param name="containsPage">要输出到的page对象</param>/// <param name="validateNum">验证码</param>public void CreateValidateGraphic(string validateCode, HttpContext context){Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 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 Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));//渐变(蓝色→→深红色)LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),Color.Blue, Color.DarkRed, 1.2f, true);g.DrawString(validateCode, font, brush, 3, 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);//输出图片流context.Response.Clear();context.Response.ContentType = "image/jpeg";context.Response.BinaryWrite(stream.ToArray());}finally{g.Dispose();image.Dispose();}}/// <summary>/// 得到验证码图片的长度/// </summary>/// <param name="validateNumLength">验证码的长度</param>/// <returns></returns>public static int GetImageWidth(int validateNumLength){return (int)(validateNumLength * 12.0);}/// <summary>/// 得到验证码的高度/// </summary>/// <returns></returns>public static double GetImageHeight(){return 22.5;}}
}

这里要注意导入命名空间:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Web;

二、创建一个一般处理程序,调用该方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using yzyCommon;//导入命名空间,即上面的验证码方法所在的位置
using System.IO;namespace yzyWebApp
{/// <summary>/// ValidateImageCode 的摘要说明/// </summary>public class ValidateImageCode : IHttpHandler{public void ProcessRequest(HttpContext context){context.Response.ContentType = "text/plain";ValidateCode validateCode = new ValidateCode();string code = validateCode.CreateValidateCode(4);//这里“4”代表生成验证码的长度validateCode.CreateValidateGraphic(code, context);}public bool IsReusable{get{return false;}}}
}

三、显示在浏览器中

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">window.onload = function () {var validateCode = document.getElementById("validateCode");validateCode.oncli = function () {document.getElementById("imgCode").src = "ValidateImageCode.ashx";}}</script>
</head>
<body><form method="post" action="UserLogin.ashx">用户名:<input type="text" name="txtName" /><br/>密&emsp;码:<input type="password" name="txtPwd" /><br/>验证码:<input type="text" name="txtCode" /><img src="ValidateImageCode.ashx" /><a href="javascript:void(0)" id="valideteCode">看不清</a><br/><input type="submit" value="登录" /></form>
</body>
</html>

四、效果图

【B/S】ASP.NET---验证码-生成和切换相关推荐

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

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

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

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

  3. 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)

    目录 基础理论 一.生成验证码数据集 1.生成验证码训练集 1-0.判断文件夹是否为空 1-1.创建字符集(数字.大小写英文字母) 1-2.随机生成验证码(1000个,长度为4) 2.生成验证码测试集 ...

  4. Asp.net动态生成html页面

    作者:网际浪子专栏(曾用名littlehb)  http://blog.csdn.net/littlehb/ 适用于:Microsoft ASP.NET 摘要:asp.net动态生成html页面,适用 ...

  5. ASP.NET MVC 生成简单的 xml 权限结构

    ASP.NET MVC 生成简单的 xml 权限结构 当我的一个项目到尾声时,发现系统很多模块权限有遗漏.部分模块权限遗漏是由于前期开发速度太快,开发人员未先给模块加权限而后再编写该模块功能代码.当我 ...

  6. ASP程序快速生成Excel文件

    ASP程序快速生成Excel文件 在一个web项目中,要求将数据生成Excel文件保存到本地,最早使用的方法是直接使用Microsoft的Office Web组件,但是总体感觉是慢(微软的通病).然后 ...

  7. thinkphp3.2 验证码生成和点击刷新验证码

    一.实例化生成验证码的类(该方法放到IndexController里面便于访问) [php] /**     * 验证码生成  */   public function verify_c(){     ...

  8. asp.net 验证码

    如何调用? 在一个单独页面调用:     protected void Page_Load(object sender, EventArgs e)     { //获取验证码的文字         S ...

  9. web页面 验证码 生成

    web页面 验证码 生成 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kapt ...

  10. 动态asp网页批量生成静态html网页问题

    <% '读取模板 set rs=server.createobject("adodb.recordset") rs.open ("select tradeinfo_ ...

最新文章

  1. mysql 复合索引 in,MySQL复合索引比主键索引还快,为什么?
  2. 型数据保留几位小数_Python数据分析—数据框的简单操作
  3. Spring JDBC-Spring对事务管理的支持
  4. python 三元运算符求abc_python三元运算符实现方法
  5. javacore分析工具_Javacore 与 WebSphere Commerce 性能问题之争?谁才是赢家
  6. 解决关于 ionic3 启动白屏 控制台错误提示:Uncaught SyntaxError Use of const in strict mode.
  7. js提交java后台,双引号转义为amp;quot;解决办法……StringEscapeUtils.unescapeHtml4完美解决
  8. java override 用法_Java中@Override的作用
  9. 【Flink】Flink Distributed Cache 分布式缓存
  10. mongodb卸载_如何在Windows上安装MongoDB,启动,卸载
  11. Struts 2.0 入门
  12. cad脚本合适_CAD脚本学习
  13. 恶意软件清理助手 v2.50 Build 005
  14. grub引导项修复详解_win7开机grub引导修复教程
  15. element-UI设置背景色和边框色
  16. c语言自动取数函数,C语言中取随机数的函数
  17. 【自动驾驶】基于面部Fatigue检测的技术报告
  18. 访问网络计算机运行里输入IP,WINDOWS在运行里输入IP地址不能访问网络位置
  19. 以后在此写下自己的后博士时代吧SWE-SPHysics
  20. 网络技术——路由器原理与测试

热门文章

  1. Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:
  2. Visual C++ 2010 新特性:并行计算
  3. 知识点 - DataList中CheckBox实现单选
  4. 设置ecshop2.7首页幻灯片宽度为100%
  5. 渗透测试攻击(一)Arp中间人攻击 伪装网关 截获 上网信息用户名密码
  6. python进阶14文件路径(找不到文件)
  7. 一行代码让 Python 的运行速度提高100倍
  8. 对于模拟交易所引发的思考
  9. ubuntu中bash,sh,./,bash区别
  10. 电脑的服务器操作系统是什么,电脑的服务器操作系统是什么