你的位置:首页 > ASP.net教程

[ASP.net教程]英文验证码


前几天看的别人写的英文验证码的帖子 自己就引用了  然后整理了一下

 

xaml代码是:

<Window x:Class="SecurityCode.MainWindow"    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    ="http://schemas.microsoft.com/winfx/2006/xaml"    ="http://schemas.microsoft.com/expression/blend/2008"    ="http://schemas.open"    ="clr-namespace:SecurityCode"    mc:Ignorable="d"    x:Name="usercontrol"    Title="MainWindow" MaxHeight="100" Width="900">  <Grid>    <StackPanel Height="50" Orientation="Horizontal">      <Label Content="验证码"></Label>      <TextBox x:Name="SecurityTxt" Width="200">      </TextBox>      <Button Content="发送" Click="Button_Click"></Button>      <Image Width="400" Stretch="None" x:Name="image"></Image>      <Button Content="重新获取验证码" Click="MainWindow_Loaded"></Button>    </StackPanel>  </Grid></Window>

引用的类是:

using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Media;using System.Windows.Shapes;namespace SecurityCode{  public class EnglishSecurityCode  {    /// <summary>    /// 英文字符验证码    /// </summary>    /// <param name="传出验证码"></param>    /// <param name="验证码长度"></param>    /// <returns></returns>    public static byte[] GraphCode(out string code, int codeLength)    {      int Width = 80;//默认为100      int Height = 30;//默认为40      int FontSize = 20;//默认为20      byte[] bytes = GraphCode(out code, codeLength, Width, Height, FontSize);      return bytes;    }    /// <summary>    /// 产生图形验证码    /// </summary>    /// <param name="传出验证码"></param>    /// <param name="验证码字符"></param>    /// <param name="Width"></param>    /// <param name="Height"></param>    /// <param name="FontSize"></param>    /// <returns></returns>    public static byte[] GraphCode(out string Code, int CodeLength, int Width, int Height, int FontSize)    {      string code = string.Empty;      string sCode = string.Empty;      System.Drawing.Color[] oColor ={      System.Drawing.Color.Red,      System.Drawing.Color.Black,      System.Drawing.Color.Bisque,      System.Drawing.Color.White,      System.Drawing.Color.Blue,      };      string[] oFontNames = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };      //验证码的字元集      char[] oCharacter =      {         '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'       };      Random oRnd = new Random();      Bitmap oBmp = null;      Graphics oGraphics = null;      int N1 = 0;      //生成验证码字串      for (N1 = 0; N1 <= CodeLength - 1; N1++)      {        sCode += oCharacter[oRnd.Next(oCharacter.Length)];      }      oBmp = new Bitmap(Width, Height);      oGraphics = Graphics.FromImage(oBmp);      oGraphics.Clear(System.Drawing.Color.White);      try      {        oGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;        Font f = new System.Drawing.Font("宋体", FontSize, (System.Drawing.FontStyle.Bold));        // 前景色        System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Black);        // 背景色        oGraphics.Clear(System.Drawing.Color.White);        // 填充文字        for (int i = 0; i < sCode.Length; i++)        {          oGraphics.DrawString(sCode[i].ToString(), f, b, new System.Drawing.Rectangle(i * (FontSize - 2), 3, (FontSize - 2), Height));        }        // 随机线条        System.Drawing.Pen linePen = new System.Drawing.Pen(System.Drawing.Color.Gray, 0);        Random rand = new Random();        for (int i = 0; i < 3; i++)        {          int x1 = rand.Next(oBmp.Width);          int y1 = rand.Next(oBmp.Height);          int x2 = rand.Next(oBmp.Width);          int y2 = rand.Next(oBmp.Height);          oGraphics.DrawLine(linePen, x1, y1, x2, y2);        }        // 随机点        for (int i = 0; i < 30; i++)        {          int x = rand.Next(oBmp.Width);          int y = rand.Next(oBmp.Height);          oBmp.SetPixel(x, y, System.Drawing.Color.FromArgb(rand.Next(250), rand.Next(250), rand.Next(250)));        }        Code = sCode;        //保存图片数据        MemoryStream stream = new MemoryStream();        oBmp.Save(stream, ImageFormat.Jpeg);        //输出图片流        return stream.ToArray();      }      finally      {        oGraphics.Dispose();      }    }  }}

后台代码是:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace SecurityCode
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
public static string Code = "";
byte[] englishchar;
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
englishchar = EnglishSecurityCode.GraphCode(out Code, 4);
ImageSecurity = BytesToBitmapImage(englishchar);
this.image.Source = ImageSecurity;
}

public ImageSource ImageSecurity
{
get { return (ImageSource)GetValue(ImageSecurityProperty); }
set { SetValue(ImageSecurityProperty, value); }
}
public static readonly DependencyProperty ImageSecurityProperty =
DependencyProperty.Register("ImageSecurity", typeof(ImageSource), typeof(MainWindow), new PropertyMetadata(null));
public static BitmapImage BytesToBitmapImage(byte[] buffer)
{
var bitmap = new BitmapImage();
bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(buffer);
bitmap.EndInit();
return bitmap;

}
private void Button_Click(object sender, RoutedEventArgs e)
{
var str = this.SecurityTxt.Text.ToString().ToLower();
if (str == Code.ToLower())
{
MessageBox.Show("验证正确");
}
else
{
MessageBox.Show("验证错误");
}


}
}
}