【转】ASP.NET中文验证码详解
CheckCode.aspx.cs:
2{
3protected void Page_Load(object sender, EventArgs e)
4{
5GraphicsImage(4); //调用方法生成四位汉字验证码
6}
7
8private object[] CreateString(int strlength)
9{
10//定义一个数组存储汉字编码的组成元素
11string[] str = new string[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
12"e", "f" };
13
14Random ran = new Random(); //定义一个随机数对象
15object[] bytes = new object[strlength];
16for (int i = 0; i < strlength; i++)
17{
18//获取区位码第一位
19int ran1 = ran.Next(11, 14);
20string str1 = str[ran1].Trim();
21
22//获取区位码第二位并防止数据重复
23ran = new Random(ran1 * unchecked((int)DateTime.Now.Ticks) + i);
24int ran2;
25if (ran1 == 13)
26{
27ran2 = ran.Next(0, 7);
28}
29else
30{
31ran2 = ran.Next(0, 16);
32}
33string str2 = str[ran2].Trim();
34
35//获取区位码第三位
36ran = new Random(ran2 * unchecked((int)DateTime.Now.Ticks) + i);
37int ran3 = ran.Next(10, 16);
38string str3 = str[ran3].Trim();
39
40//获取区位码第四位
41ran = new Random(ran3 * unchecked((int)DateTime.Now.Ticks) + i);
42int ran4;
43if (ran3 == 10)
44{
45ran4 = ran.Next(1, 16);
46}
47else if (ran3 == 15)
48{
49ran4 = ran.Next(0, 15);
50}
51else
52{
53ran4 = ran.Next(0, 16);
54}
55string str4 = str[ran4].Trim();
56
57//定义字节变量存储产生的随机汉字区位码
58byte byte1 = Convert.ToByte(str1 + str2, 16);
59byte byte2 = Convert.ToByte(str3 + str4, 16);
60
61byte[] stradd = new byte[] { byte1,byte2};
62//将产生的汉字字节放入数组
63bytes.SetValue(stradd, i);
64}
65return bytes;
66}
67
68private string GetString(int length)
69{
70Encoding gb = Encoding.GetEncoding("gb2312");
71object[] bytes = CreateString(length);
72
73//根据汉字字节解码出中文汉字
74string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
75string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
76string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
77string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));
78
79string str = str1 + str2 + str3 + str4;
80Response.Cookies.Add(new HttpCookie("CheckCode", str));
81return str;
82}
83
84private void GraphicsImage(int length)
85{
86System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((GetString(length).Length *
8722.5)), 22);
88Graphics g = Graphics.FromImage(image); //创建画布
89
90try
91{
92//生成随机生成器
93Random random = new Random();
94
95//清空图片背景色
96g.Clear(Color.White);
97
98//画图片的背景噪音线
99for (int i = 0; i < 1; i++)
100{
101int x1 = random.Next(image.Width);
102int x2 = random.Next(image.Width);
103int y1 = random.Next(image.Height);
104int y2 = random.Next(image.Height);
105
106g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
107}
108
109Font font = new System.Drawing.Font("Couriew New", 12, System.Drawing.FontStyle.Bold );
110System.Drawing.Drawing2D.LinearGradientBrush brush = new
111System.Drawing.Drawing2D.LinearGradientBrush
112(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
113g.DrawString(GetString(length), font, brush, 2, 2);
114
115//画图片的前景噪音点
116for (int i = 0; i < 50; i++)
117{
118int x = random.Next(image.Width);
119int y = random.Next(image.Height);
120
121image.SetPixel(x, y, Color.FromArgb(random.Next()));
122}
123
124//画图片的边框线
125g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
126System.IO.MemoryStream ms = new System.IO.MemoryStream();
127image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
128Response.ClearContent();
129Response.ContentType = "image/Gif";
130Response.BinaryWrite(ms.ToArray());
131}
132catch (Exception ms)
133{
134Response.Write(ms.Message);
135}
136}
137}
138
引用文件:
2 {
3 HttpCookie cookie = Request.Cookies["CheckCode"];
4 if (cookie.Value == this.TextBox3.Text.Trim())
5 {
6 Response.Write("<script>alert('验证码正确!')</script>");
7 }
8 else
9 {
10 Response.Write("<script>alert('验证码错误!')</script>");
11 }
12 }
转载于:https://www.cnblogs.com/milk3q/archive/2008/01/10/1034161.html
【转】ASP.NET中文验证码详解相关推荐
- java做jsp问题_java/jsp中 中文问题详解
java/jsp中 中文问题详解 更新时间:2006年10月13日 00:00:00 作者: 预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多 ...
- python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...
Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...
- elasticsearch-.yml(中文配置详解)
此elasticsearch-.yml配置文件,是在$ES_HOME/config/下 elasticsearch-.yml(中文配置详解) # ======================== El ...
- php推荐码生成,最新最全PHP生成制作验证码代码详解(推荐),验证码详解_PHP教程...
最新最全PHP生成制作验证码代码详解(推荐),验证码详解 1.0 首先先看代码 好,现在结合以上代码,来分析分析以上用到的几个函数: ① imagecreatetruecolor(); imagecr ...
- ASP.NET页面事件详解
ASP.NET页面事件详解 ASP.NET页面事件详解 1.Page_Init()事件 当页面初始化时发生此事件.可以利用Page_Init()将该事件与要在.NET页面上显示控件之前的运行的代码建立 ...
- Asp.Net+Jquery.Ajax详解5-$.getScript
目录(已经更新的文章会有连接,从7月25日开始,每2到3天更新一篇): Asp.Net+Jquery.Ajax详解1-开篇(2012.07.25发) Asp.Net+Jquery.Ajax详解2-$. ...
- ASP.NET 操作Cookie详解 增加,修改,删除
ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...
- ASP.NET 运行时详解 揭开请求过程神秘面纱
对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...
- 史上最详细的Pytorch版yolov3代码中文注释详解(四)
史上最详细的Pytorch版yolov3代码中文注释详解(一):https://blog.csdn.net/qq_34199326/article/details/84072505 史上最详细的Pyt ...
最新文章
- linux samba 空目录,linux Samba搭建
- php gdk,gdk.php
- 【计算机图形学课程】一.MFC基本绘图函数使用方法
- Objective-c:NSString的常用方法
- html里面布局的优劣,HTML与CSS布局技巧总结
- centos怎么用命令行启动mysql_centos怎么用命令行启动mysql数据库
- burpsuite字典破解密码
- FLask框架AJAX操作
- vs2017+BabeLua+Cocos2dx3.10配置
- 当update语句提交后,数据库做了哪些操作?
- 交流电过零点检测电路总结
- CryptoNight
- OS=Windows and the assembly descriptor contains a *nix-specific root-relative-reference (starting wi
- LQ0141 纸张尺寸【水题】
- 微信小程序wxs将数字转换为汉字
- C++笔记8:C++提高编程2:STL---标准模板库
- 开源中国源码学习(六)——ButterKnife的使用
- Ubuntu 10.10 最全的更新源收集(ubuntu yuan)
- opencv图像分割合成_OpenCV图像分割-watershed
- [NOIP2017 提高组] 时间复杂度
热门文章
- java堆外内存6_Java堆外内存排查小结
- oracle11g ora 12545,sqlplus本地登录报错ORA-12545
- 判断点是否在凸多边形内
- python语言程序的特点_Python语言有哪些优点?
- AtCoder AGC029E Wandering TKHS
- Linux系统怎么挂载安卓手机,NFS挂载Android文件系统
- 一加3t刷机后还卡_OPPO A5?A7?A57?刷机注意:这几款手机千万别混淆!
- 性能测试方案_MeterSphere案例分享丨基于JMeter的性能测试方案演进之路
- kettle对字符串去除空格_整理|ABAP基础知识二:常用字符串处理
- javaweb-服务器输出字符数据到浏览器