验证码制作

//一般处理程序。注意接口。命名空间using System.Web.SessionState;//添加命名空间,用于保存session   IRequiresSessionState


using System;

using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Web;
using System.Web.SessionState;//添加命名空间,用于保存session


namespace LiBangWuLiu
{
    /// <summary>
    /// VerifyCode 的摘要说明
    /// </summary>
    public class VerifyCode : IHttpHandler,IRequiresSessionState //实现IRequiresSessionState
    {
        /// <summary>
        /// 创建一副图片,画上验证码
        /// </summary>
        /// <param name="context"></param>


        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/plain";//响应类型为图片image
            string validateCode = getValidateCode(4);//获取一个四位数字的验证码
            context.Session["validateCode"] = validateCode;//将验证码存到session中,
            //创建验证码图片
            using (Bitmap img = new Bitmap(60, 28))//创建具体位置图像,位图
            {
                using (Graphics g = Graphics.FromImage(img))//从指定的img创建新的图面)
                {
                    g.Clear(Color.LightYellow);//初始化图片背景色
                    g.DrawRectangle(new Pen(Color.Red), 0, 0, img.Width - 1, img.Height - 1);//画图片上矩形的边框,从坐标(0,0)开始,相对于图片的坐标
                    Font font = new System.Drawing.Font("Arial", 16, (System.Drawing.FontStyle.Bold));//字体样式
                    System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Blue, Color.DarkRed, 1.2F, true);//渐变效果                                                                                                                                                                                                           
                    g.DrawString(validateCode, font, brush, 2, 2);//将验证码写入图片


                    //画前景线 ,随机生成几个点,(x1,y1)到(x2,y2)画线 
                    Random ran = new Random();                  
                    int i;
                    for (i = 0; i < 10; i++)
                    {
                        int x1 = ran.Next(img.Width);
                        int x2 = ran.Next(img.Width);
                        int y1 = ran.Next(img.Height);
                        int y2 = ran.Next(img.Height);
                        g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                    }
                   
                }
                img.Save(context.Response.OutputStream, ImageFormat.Jpeg);//将图片保存到响应流
            }
        }       
        /// <summary>
        /// 生成随机码的方法,
        /// </summary>
        /// <param name="validateCodeLength">随机码的长度</param>
        /// <returns>随机码</returns>
        private string getValidateCode(int validateCodeLength)
        {
            string allchar =@"123456789qwertyuioplkjhgfdsazxcvbnm123456789QWERTYUIOPLKJHGFDSAZXCVBNM";//列出所有可能出现的字符
            int length = allchar.Length;//获取所有字符的个数
            Random ran = new Random();//声明生成一个随机数的对象


            string validateCode = string.Empty;//声明随机码
            for (int i = 0; i < validateCodeLength; i++)
            {
                validateCode += allchar[ran.Next(length)];//找到随机码,用生成的随机数作为字符串的索引,下标       
            }
                return validateCode;
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

}




//前台页面FORM提交,写上runat="server"才会有提交数据,标签是不能提交数据的,只有控件才可以,并且要runat="server",标签可以JS注册事件validateCode_img是ID

<script type="text/javascript">
        function changeImage() {
        document.getElementById("validateCode_img").src = document.getElementById("validateCode_img").src + '?';
        }
    </script>


 <form action="reg.aspx" method="post" id="registForm" runat="server"><%--runat="server"可以使用下边的服务器控件--%>
          <table border="0" cellspacing="0" cellpadding="0" width="100%">
            <tbody>


              <tr>
                <td width="150"><label class="tit"><span class="f_f15a22">*</span>手机号:</label></td>
                <td width="212"><input id="entity.ebccMobile" name="mobile" type="text" ov="请输入11位手机号码" maxlength="11" value="请输入11位手机号码" class="input w205 inputFocus grays"></td>
                <td><div class="tips" id="phone_tips"></div></td>
              </tr>
              <tr>
                <td><label class="tit"><span class="f_f15a22">*</span>密码:</label></td>
                <td><input id="entity.ebccNetPassword" name="entity.ebccNetPassword" type="password" class="input w205 inputFocus grays"></td>
                <td><div class="tips" id="password_tips"></div></td>
              </tr>
              <tr>
                <td><label class="tit"><span class="f_f15a22">*</span>确认密码:</label></td>
                <td><input id="password2" name="password2" type="password" class="input w205 inputFocus grays"></td>
                <td><div class="tips" id="password2_tips"></div></td>
              </tr>
              <tr>
                <td><label class="tit">用户名:</label></td>
                <td><input id="entity.ebccNetLogin" name="loginName" type="text" ov="可作为登录账号" value="可作为登录账号" class="input w205 inputFocus grays"></td>
                <td><div class="tips" id="userName_tips"></div></td>
              </tr>
              <tr>
                <td><label class="tit">邮箱地址:</label></td>
                <td><input id="entity.ebccEmail" name="email" type="text" class="input w205 inputFocus grays" ov="可作为登录账号和密码找回凭证" value="可作为登录账号和密码找回凭证"></td>
                <td><div class="tips" id="email_tips"></div></td>
              </tr>
              <tr>
                <td><label class="tit"><span class="f_f15a22">*</span>验证码:</label></td>
                <td><input id="validateCode_regist" name="validateCode_regist" type="text" class="input w95 inputFocus grays" value="请输入验证码" ov="请输入验证码">
                  <span> <img id="validateCode_img" src="/handerashx/VerifyCode.ashx" width="60" height="28" style="vertical-align: middle;"/> <a id="valida" href="javascript:changeImage()">换一组</a> </span></td>
                <td><div class="tips" id="validCode_msg" style="display:none;">
                  <p class="erro"><span class="icon_del"></span>请输入正确验证码</p>
                </div></td>
              </tr>
              <tr>
                <td><label class="tit"><span class="f_f15a22">*</span>短信验证码:</label></td>
                <td><input id="registVerCode" name="registVerCode" type="text" class="input w95 inputFocus grays" value="请输入验证码" ov="请输入验证码">
                  <input type="button" id="getPhoneVerCodeBtn" class="xz1" style="padding:0 10px;" value="获取验证码" οnclick="sendPhoneVerCode()"></td>
                <td><div class="tips" id="verCode_tips"></div></td>
              </tr>
              <tr>
                <td>&nbsp;</td>
                <td><input id="accept" name="accept" type="checkbox" checked="checked">
                  已阅读<a href="javascript:void(0);" class="f_f15a22" id="user_agreement">礼邦物流网上服务协议</a></td>
               
              </tr>
              <tr>
                <td>&nbsp;</td>
                <%--<td><a href="javascript:regist();" class="xz1">立即注册</a></td>--%>
                <td><%--<input type="submit" id="tijiao" value="提交" class="xz1" οnclick="tijiaoClick" />--%>
                    <asp:Button ID="submit" runat="server" Text="立即注册" CssClass="xz1" OnClick="submit_Click"  />
                </td>
                <%-- <td><input runat="server" type="button" id="button1" name="zhuce" class="xz1" />立即注册</td>--%> 
              </tr>



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML5本身并不支持验证码制作,但是可以通过以下步骤使用HTML5制作验证码: 1. 使用HTML5的canvas标签创建一个画布。 2. 使用JavaScript生成随机的验证码字符串。 3. 在画布上绘制验证码字符串。 4. 在画布上绘制一些干扰线或干扰点,使验证码更难以被机器破解。 5. 将画布作为图片显示在页面上,作为验证码。 以下是一个简单的HTML5验证码制作示例: ``` <!DOCTYPE html> <html> <head> <title>HTML5验证码制作</title> <script type="text/javascript"> function createCaptcha() { var canvas = document.getElementById("captcha"); var ctx = canvas.getContext("2d"); var captcha = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < 6; i++) { captcha += possible.charAt(Math.floor(Math.random() * possible.length)); } ctx.font = "30px Arial"; ctx.fillText(captcha, 10, 40); for (var i = 0; i < 10; i++) { ctx.beginPath(); ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height); ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height); ctx.strokeStyle = '#ddd'; ctx.stroke(); } for (var i = 0; i < 100; i++) { ctx.beginPath(); ctx.arc(Math.random() * canvas.width, Math.random() * canvas.height, 1, 0, 2 * Math.PI); ctx.fillStyle = '#ddd'; ctx.fill(); } document.getElementById("captchaInput").value = captcha; } </script> </head> <body onload="createCaptcha();"> <h1>HTML5验证码制作</h1> <canvas id="captcha" width="200" height="50"></canvas> <br> <input type="text" id="captchaInput"> <button onclick="createCaptcha();">刷新验证码</button> </body> </html> ``` 在上面的示例中,我们使用了HTML5的canvas标签创建了一个画布,并使用JavaScript生成了一个6位的随机验证码字符串。然后使用ctx.fillText()方法将验证码字符串绘制到画布上,使用ctx.beginPath()、ctx.moveTo()、ctx.lineTo()、ctx.arc()等方法绘制了一些干扰线和干扰点,最后将生成的验证码字符串设置到一个文本框中。用户输入验证码后,可以通过JavaScript验证用户输入的验证码是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值