網上幾種常見校正碼圖片分析

來源:互聯網
上載者:User

一些常見的驗證碼:

功能分析:
一般校正碼具有的功能:
1、顯示內容
顯示內容一般是數字或者數字+字元,還有更變態的,顯示的內容是隨機漢字。
如何隨機產生漢字,請看:
《用C#產生隨機中文漢字驗證碼的基本原理》
http://wulei8899.cnblogs.com/archive/2005/06/29/183200.html

2、內容顯示
內容顯示這裡,有很多做法,常見的有以下幾種:
2.1 以一個不常被看到的字型顯示內容,
2.2 字型隨機傾斜顯示
2.3 每個字隨機顯示不同顏色
2.4 內容隨機顯示在不同位置。
2.5 文字採用就漸層顏色,同一個字就有好幾種顏色組成。

3、背景顯示
常見背景顯示方案:
3.1、使用幹擾線來,後面隨機顯示數條幹擾線,這些線的顏色跟字型的顏色類似
3.2、幹擾點,後面隨機顯示數個幹擾點,這些點的顏色跟字型的顏色類似
3.3、幹擾色塊,後面隨機出現一個色塊進行幹擾

常見幾種開源的校正碼產生代碼


相關文章:ASP.net 驗證碼(C#) 
http://blog.csdn.net/SW515/archive/2005/02/03/279364.aspx
我個人在這些開源校正碼中,最喜歡這個,校正碼不會複雜到使用者識別不了,而程式判斷又有相當的難度

相關文章:ASP 產生 彩色 可變長 驗證碼程式
http://www.codefans.com/ArticleView/Article_6728.html

Asp.Net 動態產生驗證碼
http://sleeping.cnblogs.com/archive/2005/12/19/299980.html

象 DEV-Club 那樣的彩色校正碼
http://www.blueidea.com/tech/program/2003/709.asp

C#的彩色驗證碼
http://www.codefans.com/ArticleView/Article_6745.html

VerifyCode(asp),gif驗證碼產生技術
http://www.codefans.com/ArticleView/Article_6735.html

region 實現一個驗證碼的類
http://www.innerv.com/blogview.asp?logID=509&cateID=5

如何在asp.net中動態產生驗證碼
http://www.dwww.cn/new/2005911154522249.html

256色BMP圖片驗證碼識別指令碼
http://www.51cto.com/html/2005/1101/10438.htm

QQ驗證碼識別原始碼(C#/NET1.1)
http://www.intodigi.com/Net/Website/Program/NET/12082.html

一個例子:

/* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */
 public class ValidateCode : System.Web.UI.Page
 {
  private void Page_Load(object sender, System.EventArgs e)
  {
   this.CreateCheckCodeImage(GenerateCheckCode());
  }

  #region Web Form設計器產生的程式碼
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 設計器支援所需的方法 - 不要使用代碼編輯器修改
  /// 此方法的內容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion

  private string GenerateCheckCode()
  {
   int number;
   char code;
   string checkCode = String.Empty;

   System.Random random = new Random();

   for(int i=0; i<5; i++)
   {
    number = random.Next();

    if(number % 2 == 0)
     code = (char)('0' + (char)(number % 10));
    else
     code = (char)('A' + (char)(number % 26));

    checkCode += code.ToString();
   }

   Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));

   return checkCode;
  }

  private void CreateCheckCodeImage(string checkCode)
  {
   if(checkCode == null || checkCode.Trim() == String.Empty)
    return;

   System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
   Graphics g = Graphics.FromImage(image);

   try
   {
    //產生隨機產生器
    Random random = new Random();

    //清空圖片背景色
    g.Clear(Color.White);

    //畫圖片的背景雜音線
    for(int i=0; i<25; 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 System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
    System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
    g.DrawString(checkCode, font, brush, 2, 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);

    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    Response.ClearContent();
    Response.ContentType = "image/Gif";
    Response.BinaryWrite(ms.ToArray());
   }
   finally
   {
    g.Dispose();
    image.Dispose();
   }
  }
 }

 

  假如以上驗證碼產生器頁面名為:CheckCode.aspx,那麼在登入頁面中使用“<IMG>” 這個 HTML 元素來顯示產生的驗證碼圖片:<IMG src="CheckCode.aspx">
  在登入頁面的登入按鈕的處理事件中使用以下代碼判斷驗證碼:

  private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
  {
   if(Request.Cookies["CheckCode"] == null)
   {
    lblMessage.Text = "您的瀏覽器設定已被禁用 Cookies,您必須設定瀏覽器允許使用 Cookies 選項後才能使用本系統。";
    lblMessage.Visible = true;
    return;
   }

   if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)
   {
    lblMessage.Text = "驗證碼錯誤,請輸入正確的驗證碼。";
    lblMessage.Visible = true;
    return;
   }

   // other code
  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.