一個簡單的彩色背景圖形驗證碼

来源:http://www.cnblogs.com/Struggle-xh/archive/2016/10/10/5947674.html
-Advertisement-
Play Games

首先需要添加的命名空間 using System.Web.UI.WebControls;using System.Drawing.Drawing2D;using System.Drawing.Imaging; 編寫一個生成隨機數的方法,此方法很簡單,返回的是一個字元串也就是需要顯示到驗證碼中的字元串 ...


首先需要添加的命名空間

using System.Web.UI.WebControls;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

 

編寫一個生成隨機數的方法,此方法很簡單,返回的是一個字元串也就是需要顯示到驗證碼中的字元串,Random 類是偽隨機數生成器,可以根據自定義的任何字元串生成指定長度的字元串。詳情請參照 https://msdn.microsoft.com/zh-cn/library/system.random.aspx

//獲取隨機數,調用該方法的一個參數是指定返回的字元串的長度
private string GetRandString(int len)
{
  string s = "0123456789zxcbvnmasdfghjklpoiuyrtewqQWERTYUIOPLKJHGFDSAXZCVNBM";
  string str = "";
  Random r = new Random();
  for (int i = 0; i < len; i++)
  {
    str += s.Substring(r.Next(s.Length), 1);
  }
  return str;
}

好了,隨機生成的字元串已經有了,接下來就是以圖形的方式顯示

這裡可以直接寫到Load事件裡面,也可以把實現的過程封裝起來(寫成一個類)以方便重用,我這裡就直接寫到Load載入事件裡面了

protected void Page_Load(object sender, EventArgs e)
{

  Random rand = new Random();

  //獲取隨機字元
  string str = GetRandString(5);

  //創建畫板
  Bitmap image = new Bitmap(100, 30);
  Graphics g = Graphics.FromImage(image);
  g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
  g.SmoothingMode = SmoothingMode.AntiAlias;

  //繪製漸變背景
  Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
  Brush brushBack = new LinearGradientBrush(rect, Color.FromArgb(rand.Next(150, 256), 255, 255),
  Color.FromArgb(255, rand.Next(150, 256), 255), rand.Next(90));
  g.FillRectangle(brushBack, rect);

  

  //繪製干擾曲線
  for (int i = 0; i < 2; i++)
  {
    Point p1 = new Point(0, rand.Next(image.Height));
    Point p2 = new Point(rand.Next(image.Width), rand.Next(image.Height));
    Point p3 = new Point(rand.Next(image.Width), rand.Next(image.Height));
    Point p4 = new Point(image.Width, rand.Next(image.Height));
    Point[] p = { p1, p2, p3, p4 };
    Pen pen = new Pen(Color.Gray, 1);
    g.DrawBeziers(pen, p);
  }

  

  //逐個繪製文字
  for (int i = 0; i < str.Length; i++)
  {
    string strChar = str.Substring(i, 1);
    int deg = rand.Next(-15, 15);
    float x = (image.Width / str.Length / 2) + (image.Width / str.Length) * i;
    float y = image.Height / 2;
    //隨機字體大小
    Font font = new Font("Consolas", rand.Next(16, 24), FontStyle.Regular);
    SizeF size = g.MeasureString(strChar, font);
    Matrix m = new Matrix();
    //旋轉
    m.RotateAt(deg, new PointF(x, y), MatrixOrder.Append);
    //扭曲
    m.Shear(rand.Next(-10, 10) * 0.03f, 0);
    g.Transform = m;
    //隨機漸變畫筆
    Brush brushPen = new LinearGradientBrush(rect, Color.FromArgb(rand.Next(0, 256), 0, 0), Color.FromArgb(0, 0, rand.Next(0, 256)),     rand.Next(90));
    g.DrawString(str.Substring(i, 1), font, brushPen, new PointF(x - size.Width / 2, y - size.Height / 2));

    g.Transform = new Matrix();
  }

  g.Save();
  Response.ContentType = "image/jpeg";
  Response.Clear();
  Response.BufferOutput = true;
  image.Save(Response.OutputStream, ImageFormat.Jpeg);

  //釋放使用的資源
  g.Dispose();
  image.Dispose();
  Response.Flush();

}

執行結果

 

這裡只實現了一個簡單的圖形驗證碼,我這裡只做了兩條幹擾線,其實還可以做的更逼真更複雜一些,例如可以在背景上面再添加一些噪音點之類的,使字體不顯示的不這麼明顯,從而進行干擾字體。。。。。

當然這裡還只是一個顯示的圖形而已,你的目的肯定是還有一個文本框的,那麼怎麼判斷輸入的驗證碼是否正確呢,驗證碼都出來了,驗證就簡單了,GetRandString(int len)方法返回的是不是就是隨機生成的圖形驗證碼裡面的字元串,只要拿該方法返回的字元串和文本框裡面的記憶體進行比較就知道輸入的驗證碼對不對了。。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、壓縮與解壓縮 1、compress [-rcv] 文件或目錄 <==壓縮 uncompress 文件.Z <==解壓縮 -r:可以連同目錄下的文件也同時進行壓縮 -c:將壓縮數據輸出成standard output(輸出到屏幕) -v:可以顯示出壓縮後的文件信息以及壓縮過程中的一些文件名變化 ( ...
  • 操作系統做什麼? 從不同的視角進行分析: 用戶視角 系統視角 最終定義操作系統 定義1:操作系統是為了實現管理,同時帶來了必不可少的各種類型的浪費 分析:管理硬體資源,同樣帶來的浪費有:記憶體消耗,硬體消耗等。 定義2:操作系統是管理電腦硬體的程式,它還為應用程式提供基礎,並且充當電腦硬體和電腦 ...
  • 防火牆配置(參考 "CentOS7安裝iptables防火牆" ) 檢查是否安裝 先檢查是否安裝了iptables service iptables status 安裝iptables yum install y iptables 升級iptables yum update iptables 安裝i ...
  • CLR就是公共運行時,本文就對c#編寫SQL StoredProcedures的過程進行簡單講解。 【步驟】 2. 3. 7.打開設置 8. 註意刪除方式:註意刪除Assembly時,一定要先把引用此Assembly的所有東西刪除drop proc QueryQueueSPgo drop assem ...
  • 項目相關的快捷鍵 Ctrl + Shift + B = 生成項目 Ctrl + Alt + L = 顯示Solution Explorer(解決方案資源管理器) Shift + Alt+ C = 添加新類 Shift + Alt + A = 添加新項目到項目 編輯相關的鍵盤快捷鍵 Ctrl + En ...
  • 在.net的項目開發中,經常會對XML文件進行操作,由於XML文件可以實現跨平臺傳輸,較多的應用在數據傳輸中,特總結以下幾種常用的XML操作方法: 1.創建XML文檔: 2.讀取XML文檔中的數據: 3.對XML文檔插入數據: 4.修改XML文檔中的數據: 5.刪除XML文檔中數據: 6.讀取XML ...
  • 1.什麼是ORM ORM的全稱是Object Relational Mapping,即對象關係映射。它的實現思想就是將關係資料庫中表的數據映射成為對象,以對象的形式展現,這樣開發人員就可以把對資料庫的操作轉化為對這些對象的操作。因此它的目的是為了方便開發人員以面向對象的思想來實現對資料庫的操作。 2 ...
  • 文章出處:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...