验证码验证模块


生成验证码的类

using System;

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing; 
using System.Text;
using System.IO;
using System.Drawing.Imaging;
//using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace movies.Controllers
{
    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);


            }


            //抽取随机数字


            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;
        }
        public byte[] CreateValidateGraphic(string validateCode)
        {


            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 < 500; i++)              //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);


                //输出图片流


                return 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;


        }
    }

}


View页面中

 <tr><td class="mz">验证码:</td><td><input type="text" id="yanzheng"  value=""/></td><td><img src="/dl_and_zc/CheckCode?ID=1" id="imgCode" alt="单击可刷新" οnclick="ClickRemoveChangeCode()" /></td></tr>

         <tr><td><input type="button" id="dl" value="登录" class=" btn btn-danger"  style="margin-left:20%" /></td><td><a href="javascript:void(0)" οnclick="ClickRemoveChangeCode();return false;">看不清,换一张</a></td></tr>



<script type="text/javascript">
        function ClickRemoveChangeCode() {              //页面不刷新,但是刷新验证码
            
            var code = $("#imgCode").attr("src");
      
            $("#imgCode").attr("src", code + "1");


        }


     


        $("#dl").click(function () {
            var code = $("#yanzheng").val();
            var zh = $("#zh").val();
            var mm = $("#mm").val();
          
            alert(code);
                $.ajax({
                    type: 'post',
                    url: '/dl_and_zc/houtaiLogins',    //指明传递到底动作位置
                    dataType: 'html',               //数据类型,
                    data: {
                        code: code,
                        zh: zh,
                        mm: mm
                    },


                    success: function (data) {   //传递成功则执行这个函数


                        if (data == 'success')
                        {
                            window.location.href = "/houtai/Index";


                          
                        }
                        else if (data == 'mm_or_zh error')
                        {
                            alert("账号或密码错误");
                            $("#mm").val();
                        }
                        else if(data=="error"){
                            alert('验证码错误!');
                            $("#yanzheng").val("");


                        };
                    }


                });
       
        });


    </script>




控制器中有:

这个是生成验证码,可供前台来插入验证码

  public ActionResult CheckCode()
        {


            //生成验证码


            ValidateCode validateCode = new ValidateCode();


            string code = validateCode.CreateValidateCode(4);


            Session["ValidateCode"] = code;


          byte[] bytes = validateCode.CreateValidateGraphic(code);


           return File(bytes, @"image/jpeg");
          


        }




这个是对验证码,密码,账号进行匹配验证

 public ActionResult houtaiLogins(string code,string zh,string mm,string admin_member)
        {


           // ViewBag.code = code;
            //ViewBag.aa = Session["ValidateCode"].ToString();


           movie_system ofdb = new movie_system();
           int s = 0;
           if (admin_member == "用户")
           {
                var t = from i in ofdb.members
                       where i.member_email == zh && i.member_pwd == mm
                       select i;
                 s = t.Count();
           }
           else
           {
                var t = from i in ofdb.admins
                       where i.admin_id == zh && i.admin_pwd == mm
                       select i;
                 s = t.Count();
           }
           
           if (s==0)
           {
               return Content("mm_or_zh error");
           }
           else
           {
               if (Session["ValidateCode"].ToString() != code)   //已经储存在Session中的验证码跟输入的验证码作比较
               {


                   return Content("error");


               }
               else
               {
                   return Content("success");
               }
           }
          
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值