• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#实现的一款比较美观的验证码完整实例

C#实现的一款比较美观的验证码完整实例

作者:smartsmile2012 字体:[增加 减小] 来源:互联网 时间:2017-05-28

smartsmile2012 通过本文主要向大家介绍了c#实现文件下载实例,c#web开发实例,c#串口编程实例,c#窗口界面设计实例,c#实例视频教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#实现的一款比较美观的验证码。分享给大家供大家参考,具体如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
public partial class ValidateCode : System.Web.UI.Page
{
 private int letterWidth = 16;//单个字体的宽度范围
 private int letterHeight = 22;//单个字体的高度范围
 private int letterCount = 4;//验证码位数
 private char[] chars = "0123456789".ToCharArray();
 private string[] fonts = { "Arial", "Georgia" };
 /// <summary>
 /// 产生波形滤镜效果
 /// </summary>
 private const double PI = 3.1415926535897932384626433832795;
 private const double PI2 = 6.283185307179586476925286766559;
 protected void Page_Load(object sender, EventArgs e)
 {
  //防止网页后退--禁止缓存
  Response.Expires = 0;
  Response.Buffer = true;
  Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
  Response.AddHeader("pragma", "no-cache");
  Response.CacheControl = "no-cache";
  string str_ValidateCode = GetRandomNumberString(letterCount);
  HttpCookie objCookie = new HttpCookie("ValidateCode");
  objCookie.Value = str_ValidateCode;
  objCookie.Path = "/";
  objCookie.Expires = DateTime.Now.AddSeconds(1200);
  Response.Cookies.Add(objCookie);
  CreateImage(str_ValidateCode);
 }
 public void CreateImage(string checkCode)
 {
  int int_ImageWidth = checkCode.Length * letterWidth;
  Random newRandom = new Random();
  Bitmap image = new Bitmap(int_ImageWidth, letterHeight);
  Graphics g = Graphics.FromImage(image);
  //生成随机生成器
  Random random = new Random();
  //白色背景
  g.Clear(Color.White);
  //画图片的背景噪音线
  for (int i = 0; i < 10; 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);
  }
  //画图片的前景噪音点
  for (int i = 0; i < 10; i++)
  {
   int x = random.Next(image.Width);
   int y = random.Next(image.Height);
   image.SetPixel(x, y, Color.FromArgb(random.Next()));
  }
  //随机字体和颜色的验证码字符
  int findex;
  for (int int_index = 0; int_index < checkCode.Length; int_index++)
  {
   findex = newRandom.Next(fonts.Length - 1);
   string str_char = checkCode.Substring(int_index, 1);
   Brush newBrush = new SolidBrush(GetRandomColor());
   Point thePos = new Point(int_index * letterWidth + 1 + newRandom.Next(3), 1 + newRandom.Next(3));//5+1+a+s+p+x
   g.DrawString(str_char, new Font(fonts[findex], 12, FontStyle.Bold), newBrush, thePos);
  }
  //灰色边框
  g.DrawRectangle(new Pen(Color.LightGray, 1), 0, 0, int_ImageWidth - 1, (letterHeight - 1));
  //图片扭曲
  //image = TwistImage(image, true, 3, 4);
  //将生成的图片发回客户端
  MemoryStream ms = new MemoryStream();
  image.Save(ms, ImageFormat.Png);
  Response.ClearContent(); //需要输出图象信息 要修改HTTP头
  Response.ContentType = "image/Png";
  Response.BinaryWrite(ms.ToArray());
  g.Dispose();
  image.Dispose();
 }
 /// <summary>
 /// 正弦曲线Wave扭曲图片
 /// </summary>
 /// <param name="srcBmp">图片路径</param>
 /// <param name="bXDir">如果扭曲则选择为True</param>
 /// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>
 /// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>
 /// <returns></returns>
 public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
 {
  System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
  // 将位图背景填充为白色
  System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
  graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);
  graph.Dispose();
  double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
  for (int i = 0; i < destBmp.Width; i++)
  {
   for (int j = 0; j < destBmp.Height; j++)
   {
    double dx = 0;
    dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
    dx += dPhase;
    double dy = Math.Sin(dx);
    // 取得当前点的颜色
    int nOldX = 0, nOldY = 0;
    nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
    nOldY = bXDir ? j : j + (int)(dy * dMultValue);
    System.Drawing.Color color = srcBmp.GetPixel(i, j);
    if (nOldX >= 0 && nOldX < destBmp.Width && nOldY >= 0 && nOldY < destBmp.Height)
    {
     destBmp.SetPixel(nOldX, nOldY, color);
    }
   }
  }
  return destBmp;
 }
 public Color GetRandomColor()
 {
  Random RandomNum_First = new Random((int)DateTime.Now.Ticks);
  System.Threading.Thread.Sleep(RandomNum_First.Next(50));
  Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks);
  int int_Red = RandomNum_First.Next(210);
  int int_Green = RandomNum_Sencond.Next(180);
  int int_Blue = (int_Red + int_Green > 300) ? 0 : 400 - int_Red - int_Green;
  int_Blue = (int_Blue > 255) ? 255 : int_Blue;
  return Color.FromArgb(int_Red, int_Green, int_Blue);// 5+1+a+s+p+x
 }
 // 生成随机数字字符串
 public string GetRandomNumberString(int int_NumberLength)
 {
  Random random = new Random();
  string validateCode = string.Empty;
  for (int i = 0; i < int_NumberLength; i++)
   validateCode += chars[random.Next(0, chars.Length)].ToString();
  return validateCode;
 }
}

</div> <img alt="看不清,换一张" title="看不清,换一张" src="ValidateCode.aspx" style="cursor:pointer" onclick="this.src=this.src+'?r='+Math.random()" /></div>
</div>

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#实现文件上传与下载功能实例
  • C#实现的一款比较美观的验证码完整实例
  • C#实现对文件进行加密解密的方法
  • C#实现彻底删除文件的方法
  • C#实现对图片文件的压缩、裁剪操作实例
  • C#实现洗牌游戏实例
  • C#实现关机重启及注销实例代码
  • C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
  • C#导入导出EXCEL文件的代码实例
  • C#文件操作的简单实例

相关文章

  • 2017-05-28c# 开机启动项的小例子
  • 2017-05-28C#中TextBox实现输入提示功能的方法
  • 2017-05-28c#静态方法和非静态方法详细介绍
  • 2017-05-28C#获取局域网MAC地址的简单实例
  • 2017-05-28C# 线程同步详解
  • 2017-05-28c#删除代码中的单行注释行示例
  • 2017-05-28C#中DropDownList动态生成的方法
  • 2017-05-28关于C#程序优化的五十种方法
  • 2017-05-28使用数字签名实现数据库记录防篡改(Java实现)
  • 2017-05-28C# 写入XML文档三种方法详细介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# DropDownList中点击打开新窗口的方法
    • C#实现多线程的同步方法实例分析
    • C#调用windows api关机(关机api)示例代码分享
    • C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法
    • C# 去除首尾字符或字符串的方法
    • C#使用Process类调用外部程序分解
    • C#使用foreach语句搜索数组元素的方法
    • C#实现将千分位字符串转换成数字的方法
    • C#把整个文件内容读入字符串变量的方法
    • 实例解析C#设计模式编程中简单工厂模式的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有