欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Asp.net實(shí)現(xiàn)手寫(xiě)驗(yàn)證碼的操作代碼

 更新時(shí)間:2024年05月09日 10:31:16   作者:likk同學(xué)  
這篇文章主要介紹了Asp.net實(shí)現(xiàn)手寫(xiě)驗(yàn)證碼的操作代碼,首先我們來(lái)實(shí)現(xiàn)生成 生成驗(yàn)證碼的這一部分,這時(shí)候我們需要封裝一個(gè)類(lèi),里面有生成圖片和字符的方法,其實(shí)本質(zhì)上就是一個(gè)隨機(jī)數(shù),這個(gè)類(lèi)卸載Model里面即可,具體操作代碼跟隨小編一起看看吧

引文:眾所周知,一般我們?nèi)粘E龅降尿?yàn)證碼是一個(gè)圖形樣式的,列入這個(gè)樣子的,那么在這個(gè)圖片里面我們想實(shí)現(xiàn)我們自己界面上有這樣的一個(gè)驗(yàn)證碼就需要做兩個(gè)操作,一個(gè)是在我們自己界面上生成如圖所示的一個(gè)驗(yàn)證碼圖片,第二個(gè)操作就是將驗(yàn)證碼里面的字符和用戶(hù)輸入的字符對(duì)比。

首先我們來(lái)實(shí)現(xiàn)生成 生成驗(yàn)證碼的這一部分,這時(shí)候我們需要封裝一個(gè)類(lèi),里面有生成圖片和字符的方法,其實(shí)本質(zhì)上就是一個(gè)隨機(jī)數(shù),這個(gè)類(lèi)卸載Model里面即可

   public class CaptchaGenerator
    {
        string ocode;
        // 可選字符集合
        string letters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random = new Random();
        public string ConductOrginalcode() {
            for (int i = 0; i < 4; i++)
            {
                ocode += letters[random.Next(letters.Length)];
            }
            return ocode;
        }
        public string GenerateCaptchaCode()
        { 
            return ocode;
        }
        public string GenerateCaptchaImage()
        {
            // 驗(yàn)證碼圖片的尺寸
            const int WIDTH = 60;
            const int HEIGHT = 30;
            // 創(chuàng)建Bitmap對(duì)象
            Bitmap bitmap = new Bitmap(WIDTH, HEIGHT);
            Graphics graphics = Graphics.FromImage(bitmap);
            graphics.Clear(Color.White);
            // 生成四位驗(yàn)證碼
            string code ;
            code = ocode;
            // 繪制干擾線(xiàn)
            for (int i = 0; i < 20; i++)
            {
                int x1 = random.Next(bitmap.Width);
                int y1 = random.Next(bitmap.Height);
                int x2 = random.Next(bitmap.Width);
                int y2 = random.Next(bitmap.Height);
                graphics.DrawLine(new Pen(Color.Coral), x1, y1, x2, y2);
            }
            // 繪制干擾點(diǎn)
            for (int i = 0; i < 200; i++)
            {
                int x = random.Next(bitmap.Width);
                int y = random.Next(bitmap.Height);
                bitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
            }
            // 繪制邊框
            graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(0, 0, bitmap.Width - 1, bitmap.Height - 1));
            // 使用漸變畫(huà)刷填充驗(yàn)證碼文本
            LinearGradientBrush linearGradientBrush = new LinearGradientBrush(new Rectangle(0, 0, bitmap.Width, bitmap.Height), Color.Blue, Color.Green, 1.4f);
            graphics.DrawString(code, new Font("宋體", 20), linearGradientBrush, new PointF(0, 0));
            // 將Bitmap轉(zhuǎn)換為MemoryStream,并進(jìn)一步轉(zhuǎn)換為Base64字符串
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            byte[] imageBytes = ms.ToArray();
            ms.Close();
            string base64String = Convert.ToBase64String(imageBytes);
            return base64String;
        }
    }

這個(gè)類(lèi)里面包含了三個(gè)方法第一個(gè)是生成隨機(jī)數(shù),第二個(gè)是生成字符的,第三個(gè)是根據(jù)字符來(lái)生成對(duì)應(yīng)的圖片 

然后我們需要在我們需要的控制器里面調(diào)用這個(gè)類(lèi),用戶(hù)比較的時(shí)候就拿第二個(gè)方法里面的字符去比較就可以了

  // GET: GuestBook
        public ActionResult Index(int? page)
        {
            // 生成驗(yàn)證碼
            Session.Remove("CaptchaCode");
            CaptchaGenerator captchaGenerator = new CaptchaGenerator();
            captchaGenerator.ConductOrginalcode();
            string captchaBase64 = captchaGenerator.GenerateCaptchaImage();
            string captchaText = captchaGenerator.GenerateCaptchaCode();
            ViewBag.CaptchaImage = $"data:image/jpeg;base64,{captchaBase64}";
            Session["CaptchaCode"] = captchaText;
            int pageIndex = page ?? 2; // 新的初始頁(yè)碼
            int pageSize = 2; // 新的每頁(yè)大小
            var guestBookQuery = from gb in db.GuestBooks
                                 orderby gb.AddDate descending
                                 select gb;
            /*    Webdiyer.WebControls.Mvc.IPagedList<GuestBook> p1 = new Webdiyer.WebControls.Mvc.PagedList<GuestBook>(guestBookQuery.ToList(), pageIndex, pageSize);*/
            PagedList.IPagedList<GuestBook> p1 = guestBookQuery.ToPagedList(pageIndex, pageSize);
            return View(p1);
        }

 然后需要的是在這個(gè)控制器里面我們還要寫(xiě)一個(gè)刷新驗(yàn)證碼的方法,保證驗(yàn)證碼錯(cuò)誤和輸入正確之后都要刷新一遍.

 private void RefreshCaptcha()
        {
            Session.Remove("CaptchaCode");
            CaptchaGenerator captchaGenerator = new CaptchaGenerator();
            captchaGenerator.ConductOrginalcode();
            string captchaBase64 = captchaGenerator.GenerateCaptchaImage();
            string captchaText = captchaGenerator.GenerateCaptchaCode();
            ViewBag.CaptchaImage = $"data:image/jpeg;base64,{captchaBase64}";
            Session["CaptchaCode"] = captchaText;
        }
   <tr>
         <div style="display:flex;margin-left:10px;left:20%">
             <img src="@ViewBag.CaptchaImage" alt="驗(yàn)證碼" />
             <input style="margin-left:13px" type="text" name="captcha" />
         </div>
      </tr>

在視圖里面添加這個(gè)關(guān)于驗(yàn)證碼的

  [HttpPost]
        public ActionResult Index(GuestBook guestBook,string captcha)
        {
            if (Session["CaptchaCode"] != null && captcha != null)
            {
                string captchaSessionValue = Session["CaptchaCode"] as string;
                if (captchaSessionValue == captcha)
                {
                }
                else
                {
                    return Content("<script>alert('驗(yàn)證碼輸入錯(cuò)誤');window.location.href='/GuestBook/Index';</script>");
                }
            }
            RefreshCaptcha();
            int pageSize = 2;
            if (ModelState.IsValid)
            {
                guestBook.AddDate = DateTime.Now;
                db.GuestBooks.Add(guestBook);
                db.SaveChanges();
                ModelState.Clear();
            }
            var guestBookQuery = from gb in db.GuestBooks
                                 orderby gb.AddDate descending
                                 select gb;
            PagedList.IPagedList<GuestBook> p1 = guestBookQuery.ToPagedList(1, pageSize);
            return View(p1);
        }

 然后在表單驗(yàn)證的時(shí)候進(jìn)行驗(yàn)證碼和用戶(hù)輸入的字符進(jìn)行比對(duì)即可

到此這篇關(guān)于asp.net實(shí)現(xiàn)手寫(xiě)驗(yàn)證碼的文章就介紹到這了,更多相關(guān)asp.net手寫(xiě)驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論