图片验证码技术

Posted hamburger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片验证码技术相关的知识,希望对你有一定的参考价值。

建立通用功能类 Common.cs

在此类中添加生成随机字符串和字符串转换图片输出的函数

内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.IO;
namespace Cartoon
{


  public class Common
  {
    //获取一个随机字符串
    public static string GetRandom(int n)
    {
      string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghizklmnopqrstuvwxyz1234567890";
      Random random = new Random();
      //生成n位随机数
      string result = string.Empty;
      for (int i = 1; i <= n; i++)
      {
        result += str[random.Next(0, str.Length - 1)].ToString();
      }
      return result;

    }
    //字符串转换图片
    public static void DisplayImage(string str)
    {
      //使用cookies或session传值,用于验证验证码
      //session
      HttpContext.Current.Session["code"] = str;
      //cookies
      System.Web.HttpContext.Current.Response.Cookies["code"].Value = str;
      //创建一个图片区域设置宽度和高度
      Bitmap image = new Bitmap(50, 20);
      //获取这个图片区域,便于在其中添加元素
      Graphics g = Graphics.FromImage(image);
      //设置图片背景为白色
      g.Clear(Color.White);
      //画线构造一些盲点,意思就是让图片显示不清楚
      Random random = new Random();
      for (int i = 0; i < 10; i++)
      {  
        int x1 = random.Next(image.Width);
        int y1 = random.Next(image.Height);
        int x2 = random.Next(image.Width);
        int y2 = random.Next(image.Height);
        g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
      }

      //定义字体对象,设置字体大小

      Font font = new Font("黑体", 12);
      //定义画笔颜色
      SolidBrush brush = new SolidBrush(Color.BlueViolet);
      //定义画笔写信息的位置坐标点,为左上角(0,0)点
      PointF point = new PointF(2, 2);
      //写字符串到图片中
      g.DrawString(str, font, brush, point);
      //给图片画边框
      g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
      //生成一个内存流对象,便于存储并输出图片
      MemoryStream ms = new MemoryStream();
      //保存绘制的图片到内存流ms中
      image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
      //输出二进制图片流
      HttpContext.Current.Response.BinaryWrite(ms.ToArray());



    }
  }

}

 

登陆页面的验证:

protected void jll_Click(object sender, EventArgs e)
{
  string code = Request.Form["check"];
  //使用cookies判断
  if (code == System.Web.HttpContext.Current.Request.Cookies["code"].Value)
  //使用session判断
  if (code == Session["code"].ToString())
  {
    Response.Write("<script>alert(‘right!‘)</script>");
  }
  else
  {
    Response.Write("<script>alert(‘false!‘)</script>");
  }
}

 

以上是关于图片验证码技术的主要内容,如果未能解决你的问题,请参考以下文章

JAVA识别图片验证码

Python 实现简单图片验证码登录

PHP如何将一个验证码图片内容读取出来,都是数字.

验证码的识别

Java如何获取图片验证码保存

字符型图片验证码识别完整过程及Python实现