婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 如何使用ASP.NET制作簡單的驗證碼

如何使用ASP.NET制作簡單的驗證碼

熱門標簽:海東防封電銷卡 上海市三維地圖標注 云南外呼系統代理 西寧電銷外呼系統公司 寧德防封版電銷卡 聊城智能電銷機器人電話 安陸市地圖標注app 南昌自動外呼系統線路 辦公用地圖標注網點怎么操作

大家都知道驗證碼是以圖片形式展示的,而且是動態生成的,這樣就需要我們去畫出它,那不得不提到是GDI+繪圖了

科普一下,什么是GDI+?

GDI+是圖形設備接口(GDI)的高級版本, 提供了各種豐富的圖形圖像處理功能。GDI+主要由二維矢量圖形、圖像處理和版式3部分組成。GDI+為使用各種字體、字號和樣式來顯示文本這種復雜任務提供了大量的支持。

下面說說驗證碼,對于驗證碼這樣的圖片,我覺得是由兩部分組成的,一部分是矩形的背景,另一部分是在其上的字母數字組合(有的時候有漢字,有的時候是純字母或者純數字,這個沒有統一規定,怎么選擇看你~)。對于矩形的背景我們可以直接把其當成畫布,字母數字組合呢?我們可以利用隨機數去拼出一組新組合。這樣整個過程我們都想好了,下面看下代碼吧:
聲明一下,我寫的這個驗證碼為5個字符長度,由大小寫英文字母+數字隨機組合。

private readonly char[] constant = { 
  '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'};//一個由數字和大小寫英文字母組成的字符數組
 
  protected void Page_Load(object sender, EventArgs e)
  {
   Bitmap bitmap = new Bitmap(100, 25);//創建一個位圖,寬100,高25,就是我所說的第一部分,矩形背景
   Graphics g = Graphics.FromImage(bitmap);//創建畫布
   g.Clear(Color.YellowGreen);//為畫布填充黃綠色
 
   Font font1 = new Font("Arial", 15);//設置字體類型和大小 
   Brush brush = new SolidBrush(Color.Blue);//設置畫刷顏色
   Pen myPen = new Pen(Color.Blue, 5);//創建畫筆對象
 
   StringBuilder random = new StringBuilder(5); //創建可變字符串對象,用于存放隨機生成的驗證碼
   Random rd = new Random();//創建一個隨機數生成器對象
   for (int i = 0; i  random.Capacity; i++)
   {
   random.Append(constant[rd.Next(62)]);//生成一個隨機字符加到random里
   }
 
   g.DrawString(random.ToString(), font1, brush, 10, 5);//在畫布上畫出字符串
 
   System.IO.MemoryStream ms = new System.IO.MemoryStream();//創建數據流MemoryStream
   bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//指定圖像的輸出格式為gif
 
   Response.ClearContent();
   Response.ContentType = "image/Gif";
   Response.BinaryWrite(ms.ToArray());//輸出二進制數據流
  }

生成的效果是這樣的:

大家可能會覺得這樣看起來很容易辨識,跟我們平時登錄網站時輸入的驗證碼比起來有點像個小學生。當然,我們可以做些改變,比較加上一定的角度。

private readonly char[] constant = { 
  '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'};//一個由數字和大小寫英文字母組成的字符數組
 
  protected void Page_Load(object sender, EventArgs e)
  {
   Bitmap bitmap = new Bitmap(100, 25);//創建一個位圖,寬100,高25,就是我所說的第一部分,矩形背景
   Graphics g = Graphics.FromImage(bitmap);//創建畫布
   g.Clear(Color.YellowGreen);//為畫布填充黃綠色
 
   Font font1 = new Font("Arial", 15);//設置字體類型和大小 
   float angle = 60;//旋轉的一個基礎角度
   float length = 0;//顯示字符的基礎位置,往后看
   Brush brush = new SolidBrush(Color.Blue);//設置畫刷顏色
   Pen myPen = new Pen(Color.Blue, 5);//創建畫筆對象
 
   StringBuilder random = new StringBuilder(5); //創建可變字符串對象,用于存放隨機生成的驗證碼
   Random rd = new Random();//創建一個隨機數生成器對象
   for (int i = 0; i  random.Capacity; i++)
   {
    random.Append(constant[rd.Next(62)]);//生成一個隨機字符加到random里
 
    g.ResetTransform();//將畫布重置矩陣
    SizeF size = g.MeasureString(random[random.Length - 1].ToString(), font1);//得到新生成字符的尺寸
    g.TranslateTransform(length + size.Width / 2, size.Height / 2);//選擇此次旋轉的中心位置
    g.RotateTransform((float)rd.NextDouble() * angle * 2 - angle);//進行隨機角度旋轉
    g.DrawString(random[random.Length - 1].ToString(), font1, brush, new PointF(-size.Width / 2, -size.Height / 2));//注意,這里不是前一個例子,一次性把5個字符全部畫出來,而是一個一個畫
    length += size.Width;//保證下次畫字符的位置不會覆蓋前一次的字符
   }
 
   System.IO.MemoryStream ms = new System.IO.MemoryStream();//創建數據流MemoryStream
   bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//指定圖像的輸出格式為gif
 
   Response.ClearContent();
   Response.ContentType = "image/Gif";
   Response.BinaryWrite(ms.ToArray());//輸出二進制數據流
  }

這時生成的效果是這樣的:

是不是看起來更專業一些了呢?如果大家還是覺得不滿意的話,可以看下GDI+的相關內容,通過添加一些噪點的元素,或者刪除線這樣子的東西來達到提高識別難度的目的,我這里就不一一列舉啦。
關于如何畫驗證碼我們說過了,但是還有兩點問題我還是想多說一下。
1、我們實際輸出的是一個二進制的流,如何做到顯示到頁面上與頁面其他元素共存呢?
這里通用的一種方法就是把畫驗證碼的這段代碼放到一個獨立的Web窗體頁中,在另一個需要顯示驗證碼的頁面放一個img>元素,把其src屬性指向該驗證碼頁的url。比如我寫的一段是這樣:

復制代碼 代碼如下:

asp:Image ID="image_validatecode" runat="server" ImageUrl="~/PublicMethod/ValidateCode.aspx" style="padding-left:3px"/>

其實這里我是用大家通用的方法,不過我先前也有單獨寫一個web自定義控件,專門生成驗證碼使用,但是當拖入到頁面中后運行,它還是會把頁面其他元素給覆蓋掉,具體原因我也不清楚。

2、驗證碼主要目的還是用于驗證使用的,所以我們在用戶名,密碼是否合法外,同時也要判斷當前輸入的驗證碼是不是與圖片上的驗證碼一致。
我上面的代碼中并沒有寫這塊,其實只要在隨機生成最終驗證碼之后,把其值存入一個session中去就可以了。然后在判斷用戶名,密碼的同時去比較一下這個session值就OK了。如:

復制代碼 代碼如下:

Session["login_validate_code"] = random.ToString();

3、如何用戶沒有看清此張驗證碼,想換一張如何實現?
可以通過腳本給img元素的src屬性重新賦值url實現,當然,麻煩點的話也可以使用ajax去實現。大家可以自己試試。

以上就是本文給大家分享的制作驗證碼的全部過程,希望大家能夠喜歡。

您可能感興趣的文章:
  • ASP.NET驗證碼實現(附源碼)
  • asp.net驗證碼的簡單制作
  • ASP.NET驗證碼(3種)
  • asp.net之生成驗證碼的方法集錦(一)
  • asp.net驗證碼圖片生成示例
  • ASP.NET MVC驗證碼功能實現代碼
  • asp.net生成驗證碼(純數字)
  • asp.net ajax實現無刷新驗證碼
  • 封裝的一個asp.net驗證碼類
  • ASP.NET中的無刷新驗證碼的開發(完整代碼)
  • asp.net簡單生成驗證碼的方法

標簽:衢州 崇左 平涼 洛陽 青海 南寧 贛州 汕尾

巨人網絡通訊聲明:本文標題《如何使用ASP.NET制作簡單的驗證碼》,本文關鍵詞  如何,使用,ASP.NET,制作,簡單,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何使用ASP.NET制作簡單的驗證碼》相關的同類信息!
  • 本頁收集關于如何使用ASP.NET制作簡單的驗證碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩av一二三| 激情欧美一区二区三区在线观看| 亚洲日本va午夜在线电影| 国产一级精品在线| 国产亚洲欧美一区在线观看| 国产91综合一区在线观看| 久久精品视频在线免费观看| 国产精品一区二区不卡| 亚洲精品一区二区三区福利| 国产成人在线观看免费网站| 国产欧美视频在线观看| 色综合一个色综合亚洲| 日韩成人av影视| 久久日韩粉嫩一区二区三区| 风间由美一区二区av101| 尤物在线观看一区| 欧美日韩精品一区二区三区蜜桃| 亚洲色图.com| 91国产视频在线观看| 中文字幕一区二区三区视频| 色综合天天天天做夜夜夜夜做| 日韩美女视频一区二区 | 国产欧美va欧美不卡在线| 成人一道本在线| 中文字幕av资源一区| 91免费国产在线观看| 日日摸夜夜添夜夜添精品视频| 欧美xxxxx牲另类人与| 国内精品国产成人| 亚洲三级免费电影| 6080亚洲精品一区二区| 国产成人在线色| 美女尤物国产一区| 亚洲欧洲韩国日本视频| 欧美无砖专区一中文字| 国产精品乡下勾搭老头1| 亚洲图片欧美色图| 欧美—级在线免费片| 欧美日韩一卡二卡| 99免费精品在线| 麻豆久久久久久久| 亚洲人成在线播放网站岛国| 精品国产乱码久久久久久1区2区| 9色porny自拍视频一区二区| 韩国女主播一区| 亚洲午夜影视影院在线观看| 国产精品蜜臀av| 久久夜色精品国产噜噜av| 精品视频在线看| 99精品国产一区二区三区不卡| 美腿丝袜亚洲一区| 亚洲一区二区在线视频| 中文字幕一区二区三区不卡| 精品久久国产老人久久综合| 欧美疯狂性受xxxxx喷水图片| 97se狠狠狠综合亚洲狠狠| 成人午夜视频网站| 成人一二三区视频| 成人一区二区三区视频在线观看| 国产老女人精品毛片久久| 精品一区精品二区高清| 精品无码三级在线观看视频| 精品一区二区三区在线观看国产 | 久久久久国产精品麻豆| 91精品国产综合久久国产大片| 91传媒视频在线播放| 成人午夜短视频| 精品一二线国产| 国产乱码字幕精品高清av | 不卡视频在线观看| 国产又黄又大久久| 国产精品一区二区三区99| 久久国产精品色婷婷| 久热成人在线视频| 日本aⅴ亚洲精品中文乱码| 亚洲成人综合视频| 丝袜美腿一区二区三区| 亚洲女爱视频在线| 亚洲日本在线a| 亚洲精品乱码久久久久久黑人| 一区二区三区免费在线观看| 日韩国产一二三区| 极品瑜伽女神91| eeuss国产一区二区三区| 色av一区二区| 337p亚洲精品色噜噜狠狠| 精品国产乱码久久久久久蜜臀| 国产精品美日韩| 免费人成在线不卡| 99国产欧美久久久精品| 欧美人伦禁忌dvd放荡欲情| 精品福利一二区| 亚洲美女免费视频| 久久成人综合网| 99精品桃花视频在线观看| 欧美日韩午夜精品| 欧美国产禁国产网站cc| 日韩福利电影在线| fc2成人免费人成在线观看播放| 精品视频一区 二区 三区| 国产日韩在线不卡| 午夜精品久久久久影视| 国产ts人妖一区二区| 欧美日韩亚洲国产综合| 中文字幕在线不卡国产视频| 日本欧美久久久久免费播放网| 成人午夜免费视频| 欧美不卡一区二区三区| 亚洲精品一卡二卡| 成人福利电影精品一区二区在线观看| 在线播放欧美女士性生活| 国产精品毛片无遮挡高清| 日韩av网站在线观看| 欧美中文字幕一区| 中文字幕在线视频一区| 久久99九九99精品| 在线观看不卡视频| 最新成人av在线| 国产·精品毛片| 2021中文字幕一区亚洲| 日韩经典中文字幕一区| 欧美在线高清视频| 中文字幕日韩av资源站| 韩国三级中文字幕hd久久精品| 91精品国产手机| 日韩二区三区在线观看| 欧美女孩性生活视频| 一区二区三区在线视频播放| 北岛玲一区二区三区四区| 国产校园另类小说区| 另类欧美日韩国产在线| 91精品国产一区二区| 青青草国产精品97视觉盛宴| 欧美精品粉嫩高潮一区二区| 午夜天堂影视香蕉久久| 欧美无人高清视频在线观看| 一区二区视频在线看| 色综合久久中文字幕| 亚洲人成亚洲人成在线观看图片| 99精品在线观看视频| 亚洲精品日日夜夜| 欧美午夜寂寞影院| 日本三级亚洲精品| 日韩免费成人网| 国产精品一区二区不卡| 国产亚洲成av人在线观看导航| 激情久久五月天| 久久久久久免费网| 成人高清视频免费观看| 欧美色网一区二区| 午夜精品久久久久久久| 欧美一区二区三区视频免费播放| 日韩电影在线观看网站| 久久亚洲二区三区| 99久久夜色精品国产网站| 亚洲免费在线视频| 欧美疯狂做受xxxx富婆| 国产一区二区三区四区在线观看| 久久久国产一区二区三区四区小说| 成人性视频网站| 香港成人在线视频| 久久久99久久精品欧美| 91丨九色丨蝌蚪丨老版| 婷婷开心激情综合| 国产午夜精品在线观看| 成人午夜又粗又硬又大| 亚洲妇熟xx妇色黄| 欧美一级电影网站| 国产·精品毛片| 视频在线观看一区| 国产日韩欧美a| 欧美精品亚洲二区| 成人免费黄色在线| 午夜欧美在线一二页| 欧美高清在线精品一区| 欧美网站大全在线观看| 国产精品综合一区二区三区| 国产精品三级久久久久三级| 7799精品视频| 色综合久久久久| 韩国女主播一区| 亚洲综合色自拍一区| 久久精品一区二区三区av| 日本精品视频一区二区三区| 日本午夜一区二区| 亚洲欧洲日韩av| 日韩三级.com| 欧美自拍偷拍午夜视频| 国产成人av影院| 日韩专区欧美专区| 亚洲乱码中文字幕| 久久久国产综合精品女国产盗摄| 色综合天天做天天爱| 国产成人午夜99999| 精品午夜一区二区三区在线观看 | 图片区日韩欧美亚洲| 精品毛片乱码1区2区3区| 91麻豆精品国产91久久久久 | 亚洲桃色在线一区| 久久精品人人做人人爽97|