C#写的较完美验证码通用类
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Web;
- using System.Web.SessionState;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- namespace WebApplication1.验证码
- {
- /// <summary>
- /// 完美随机验证码 0.10
- /// Verion:0.10
- /// Description:随机生成设定验证码,并随机旋转一定角度,字体颜色不同
- /// </summary>
- public class ValidateCode : System.Web.UI.Page
- {
- private void Page_Load(object sender, System.EventArgs e)
- {
- string randomcode = this.CreateRandomCode(4);
- Session["ValidateCode"] = randomcode;
- //ViewState["ValidateCode"] = randomcode;
- this.CreateImage(randomcode);
- }
- /// <summary>
- /// 生成随机码
- /// </summary>
- /// <param name="length">随机码个数</param>
- /// <returns></returns>
- private string CreateRandomCode(int length)
- {
- int rand;
- char code;
- string randomcode = String.Empty;
- //生成一定长度的验证码
- System.Random random = new Random();
- for(int i=0;i<length;i++)
- {
- rand = random.Next();
- if(rand%3 == 0)
- {
- code = (char)('A' + (char)(rand%26));
- }
- else
- {
- code = (char)('0' + (char)(rand%10));
- }
- randomcode += code.ToString();
- }
- return randomcode;
- }
- /// <summary>
- /// 创建随机码图片
- /// </summary>
- /// <param name="randomcode">随机码</param>
- private void CreateImage(string randomcode)
- {
- int randAngle = 45; //随机转动角度
- int mapwidth = (int)(randomcode.Length * 23);
- Bitmap map = new Bitmap(mapwidth,28);//创建图片背景
- Graphics graph = Graphics.FromImage(map);
- graph.Clear(Color.AliceBlue);//清除画面,填充背景
- graph.DrawRectangle(new Pen(Color.Black,0),0,0,map.Width-1,map.Height-1);//画一个边框
- //graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
- Random rand = new Random();
- //背景噪点生成
- Pen blackPen = new Pen(Color.LightGray,0);
- for (int i=0;i<50;i++)
- {
- int x = rand.Next(0,map.Width);
- int y = rand.Next(0,map.Height);
- graph.DrawRectangle(blackPen,x,y,1,1);
- }
- //验证码旋转,防止机器识别
- char[] chars = randomcode.ToCharArray();//拆散字符串成单字符数组
- //文字距中
- StringFormat format = new StringFormat(StringFormatFlags.NoClip);
- format.Alignment = StringAlignment.Center;
- format.LineAlignment = StringAlignment.Center;
- //定义颜色
- Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
- //定义字体
- string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
- for(int i=0;i<chars.Length;i++)
- {
- int cindex = rand.Next(7);
- int findex = rand.Next(5);
- Font f = new System.Drawing.Font(font[findex],13,System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
- Brush b = new System.Drawing.SolidBrush(c[cindex]);
- Point dot = new Point(16,16);
- //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的
- float angle = rand.Next(-randAngle,randAngle);//转动的度数
- graph.TranslateTransform(dot.X,dot.Y);//移动光标到指定位置
- graph.RotateTransform(angle);
- graph.DrawString(chars[i].ToString(),f,b,1,1,format);
- //graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format);
- graph.RotateTransform(-angle);//转回去
- graph.TranslateTransform(2,-dot.Y);//移动光标到指定位置
- }
- //graph.DrawString(randomcode,fontstyle,new SolidBrush(Color.Blue),2,2); //标准随机码
- //生成图片
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- map.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
- Response.ClearContent();
- Response.ContentType = "image/gif";
- Response.BinaryWrite(ms.ToArray());
- graph.Dispose();
- map.Dispose();
- }
- #region Web 窗体设计器生成的代码
- override protected void OnInit(EventArgs e)
- {
- //
- // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /// <summary>
- /// 设计器支持所需的方法 - 不要使用代码编辑器修改
- /// 此方法的内容。
- /// </summary>
- private void InitializeComponent()
- {
- this.Load += new System.EventHandler(this.Page_Load);
- }
- #endregion
- }
- }
C#写的较完美验证码通用类的更多相关文章
- 我写的一个ExcelHelper通用类,可用于读取或生成数据
读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...
- C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone
C# Json反序列化 Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...
- Java 验证码工具类
package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- DataTable转换为List<Model>的通用类
在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便. 所以很多人都是按照以下方式做的: // 获得查询结果DataTable dt = DbHelper ...
- Django子应用里的通用类混合视图处理
# 子应用的views.py此文件用于编写Web应用视图,处理复杂的业务逻辑 #导入方法视图模板 from django.shortcuts import render #导包 from django ...
- Excel通用类工具(二)
前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...
- C#:导入Excel通用类(Xls格式)
PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...
- windows下简单验证码识别——完美验证码识别系统
此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...
随机推荐
- 多个activity跳转保留内存使用intent传递数据问题_新手
/////本来是做的activity跳转,普通那种,但是会在调回来会销毁原来的,重新调用onCreate方法, 后来参考[http://blog.csdn.net/qq_26918031/articl ...
- 【微信小程序】调用wx.request接口需要注意的问题
写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...
- Java面向对象 包
Java面向对象 包 知识概要: (1)包的概念 (2)包的命名 (3)编译执行 (4)导入 (5)包的访问权限 包: 包(package)用于将完成不同功能 ...
- linux上redis安装配置及其防漏洞配置及其攻击方法
Linux上redis安装: 需先在服务器上安装yum(虚拟机可使用挂载的方式安装) 安装配置所需要的环境运行指令: yum -y install gcc 进入解压文件执行make 指令进行编译 执 ...
- ABAP 数值四舍五入函数
VALUE '12.5445' , dat1 . VALUE '12.540'. * 方法一 CALL FUNCTION 'HR_NZ_ROUNDING_DECIMALS' EXPORTING val ...
- MySQL5.7以上Zip版官方安装文档(选译)
前言 在windows上安装Zip版MySQL(选译) 学习mysql的朋友们会发现5.7+版本的mysql变得比以前难安装了许多(当然我们可以选择installer版本,但是这样总感觉对学习mysq ...
- .NET接入接口/请求服务器
之前只调用过自己写的接口,这个是调用外部接口 一.创建方法链接接口 , string method = "Get", string token = null) { if (stri ...
- 怎用不用工具创建一个javaWeb项目
整体步骤是: 1: 新建一个文件夹: 以项目名称命名 2:在新建的文件夹下再新建一个文件夹 WEB-INF (注意:大小写) 和 一个文件 index.jsp : index.jsp里面的代码: ...
- spring-boot学习资料
spring-boot: http://www.ityouknow.com/spring-boot 这里的内容都可以学习下: https://zhuanlan.zhihu.com/dreawer?to ...
- swift 之函数式编程(一)
1. 什么是函数式编程? 函数式编程是阿隆佐思想的在现实世界中的实现, 它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及异变物件. 函数式编程的最重要基础是λ演算.而且λ演算的函數可以接受函 ...