<%@ Page Language="C#" %>
<%@ Import Namespace="System.Drawing" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<!--
    1.准备Bitmap对象 image:
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
    2.利用Graphics对象g在上面画图:
        Graphics g = Graphics.FromImage(image); 
        g.DrawString(checkCode, f, b, 3, 3); 
    3.然后Response.BinaryWrite输出:
        Response.BinaryWrite(ms.ToArray());
    优化想法:
    将验证码以js脚本可读取的方式发送到客户端;
    客户端先出发js脚本的验证,通过后才允许提交;
    提供重新获取验证码功能。
-->
<script runat="server">
        /// <summary>
        /// 输入要求的验证码的位数,返回一个验证码字符串
        /// </summary>
        /// <param name="codeCount">验证码的位数</param>
        /// <returns>验证码字符串</returns>
        private string CreateRandomCode(int codeCount)
        {
            string allChar = "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," +
                "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[] allCharArray = allChar.Split(',');
            int allCharLen = allCharArray.Length; 
            string randomCode = "";

Random rand = new Random();
            for (int i = 0; i < codeCount; i++)
            {
                randomCode += allCharArray[rand.Next(0, allCharLen)];
            }
            return randomCode;
        }
    
        /// <summary>
        /// 根据验证码checkCode画图
        /// </summary>
        /// <param name="checkCode"></param>
        private void CreateImage(string checkCode)
        {
            int iwidth = (int)(checkCode.Length * 11.5);
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
            Graphics g = Graphics.FromImage(image);
            Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
            Brush b = new System.Drawing.SolidBrush(Color.White);
            //g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
            g.Clear(Color.Blue);
            g.DrawString(checkCode, f, b, 3, 3); 
            g.Dispose();

//Pen blackPen = new Pen(Color.Black, 0);
            //Random rand = new Random();
            //for (int i = 0; i < 5; i++)
            //{
            //    int y = rand.Next(image.Height);
            //    g.DrawLine(blackPen, 0, y, image.Width, y);
            //}

System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType = "image/Jpeg";
            Response.BinaryWrite(ms.ToArray());
            image.Dispose();
            //---------缓存验证码,以备验证---------
            Session["ValidateCode"] = checkCode;
            /*如果希望在挂接该aspx页的页面A.aspx内执行Session的绑定就是白扯!
             * A页面首先绑定,然后是确定表达式,此时B.aspx未执行,还没有产生Session呢!
             * */
        }     
        protected void Page_Load(object sender, EventArgs e)
        {
            CreateImage(CreateRandomCode(6));
        }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>无标题页</title>
</head>
<body>
</body>
</html>

调用上面的验证程序:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server"> 
    protected void btnSend_Click(object sender, EventArgs e)
    {
        if(Session["ValidateCode"].ToString()!=txtValidateCode.Text)
        Response.Write("验证码不正确");
        else
        Response.Write("登录到新的界面!");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>无标题页</title>

</head>
<body>
    <form id="form1" runat="server">
        <div>
        <asp:TextBox ID="txtValidateCode" runat="server"></asp:TextBox>
        
        <img src="ValidateCode.aspx" alt="验证码" />
        <br />
        <asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" Text="发送" /></div>
    </form>
</body>
</html>

转载于:https://www.cnblogs.com/flaaash/archive/2007/12/14/995173.html

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. python验证码生成_Python 生成验证码示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 在web开发中经常用到验证码,为了防止机器人注册或者恶意登陆和查询等,作用不容小觑 但是验证码其实 ...

  4. 微信公众号发送客服消息asp源码示例

    微信公众号发送客服消息asp源码示例有三种,一种是发送纯文本,一种是发送图文信息,一种是发送可以换行并且带链接的效果,如下图效果: 三种效果 下面是asp推送客服消息的代码: <% functi ...

  5. JavaScript 验证码示例

    在本教程中,您将获得 JavaScript 验证码示例. Captcha 用于确定填写和提交 Web 表单的用户是否为人类.在开发 Web 项目时,我们经常需要添加验证码功能. 所以在这里我分享了在 ...

  6. JavaScript验证码示例

    In this tutorial you will get JavaScript captcha example. 在本教程中,您将获得JavaScript验证码示例. Captcha is used ...

  7. ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

    学习整理了一下 (一).功能 用HttpHandler实现图片验证码 (二).代码如下 1. 处理程序文件 ValidateImageHandler.ashx代码如下  1 <%@ WebHan ...

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

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

  9. ASP对接验证码短信接口DEMO示例说明

    简单实用的ASP短信接口demo <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <% '接口类型:互亿无线触 ...

最新文章

  1. ASP.NET MVC编程——视图
  2. asp.net mvc4 配置数据库连接的相关问题
  3. java 发邮件_java实现邮件的发送
  4. rip协议中周期性广播路由信息的报文_技术实操||距离矢量路由协议-RIP
  5. kickstart+TFTP+PXE+NFS+DHCP批量安装系统,raid
  6. 黄聪:wordpress博客用Slimbox2实现lightbox效果(免插件)(转)
  7. neo4j︱图数据库基本概念、操作罗列与整理(一)
  8. “后序遍历二叉运算树进行Lambda演算的化简”带来的联系
  9. 国家法定节假日调整已形成方案
  10. 财报识别OCR,披露虚假财务报表
  11. mysql写系统_一个用PHP和MYSQL写的定饭系统_PHP
  12. 头牌知产介绍粽子商标属于哪一类?
  13. 使用css做一个简单的车轮滚滚效果
  14. 最长匹配括号子序列问题
  15. iOS Technical Support For All-Random Colorful
  16. 基于SSM框架的图片分享及评价网站设计与实现毕业设计源码201524
  17. uefi多linux系统启动盘,【XORBOOT Uefi(多系统启动工具)和好用U盘启动盘制作工具哪个好用】XORBOOT Uefi(多系统启动工具)和好用U盘启动盘制作工具对比-ZOL下载...
  18. IOS学习之—— APPStore无法打开或者无法正常下载APP 的解决方法
  19. CentOS 文件夹授权命令
  20. vp.setOnTouchListener 配合 vp.setCurrentItem 未触发

热门文章

  1. poj2987最大权闭包(输出最少建塔个数)
  2. 【Flutter】插件包选择 ( 查看文档是否全面 | 查看插件包的更新版本次数 | 查看使用示例 | 查看 GitHub 项目的 Star Fork Issues )
  3. 【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  4. dos模式下切换电脑用户
  5. Linux入门:部署JavaWeb项目
  6. 机器人学的几何基础pdf
  7. 多态基类与虚析构函数
  8. 数组作为函数参数进行传递
  9. 汇编实验 分类统计字符个数(debug中查看统计结果)
  10. 汇编语言随笔(9)-实验11(用条件转移指令来编写子程序)