当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 无刷新仿google波形扭曲彩色Asp.net验证码

ASP.NET
C# Quoted-Printable编码、解码
asp.net Google的translate工具翻译 API
.NET读取所有目录下文件正则匹配文本电子邮件
asp.net 半角全角转化工具
AjaxControlToolKit 显示浏览者本地语言的方法
asp.net HTML文件上传标签
ASP.NET 绑定DataSet中的多个表
ASP.NET 重定向的几种方法小结
Asp.Net 重定向必须要知道的一些资料
ASP.NET 导出到Excel时保留换行的代码
Asp.Net Cache缓存使用代码
document.getElementsByName和document.getElementById 在IE与FF中不同实现
GridView单元格合并
asp.net 大文件上传控件
asp.net 日期函数 某月的第一天和最后一天的日期
asp.net 时间类 一周的周一和周末的日期
C# javaScript函数的相互调用
asp.net membership 密码重设
"虚拟路径"..."映射到另一个应用程序,这是不允许的!
如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值

ASP.NET 中的 无刷新仿google波形扭曲彩色Asp.net验证码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 286 ::
收藏到网摘: n/a

网上关于Asp.net验证码的示例是在不少,前一段时间我发布的《51aspx实现的Asp.net无刷新中文验证码》受到了广大网站的转载,但是关于其中无刷新及波形扭曲的文章寥寥无几,示例也几乎难寻,于是我搜集了一些资料写了一个示例免费提供给大家,主要特点如下:

效果图:

 无刷新:也就是一般网站都有的“看不清,点击更换”、“更换验证码”的那种功能,一段js脚本搞定!
 波形扭曲:类似google验证码,这个能更有效的防止验证码被机器人攻破,具体的扭曲程度可以自行设置(正弦曲线Wave扭曲图片产生波形滤镜效果),加加参数也可以改成msn的那种啊,自己举一反三吧!

 彩色:字符颜色都是随机的
 大小写:也是随机的,当然为了输入方便没有对大小写进行限制,也可以自己修改哦
 注释详细:各个参数都有很详细的说明,容易上手

为了显示扭曲效果,默认字体大小为40像素,可以自行修改

关于扭曲的源码:

以下为引用的内容:
1       /// <summary>
 2        /// 正弦曲线Wave扭曲图片(Edit By 51aspx.com)
 3        /// </summary>
 4        /// <param name="srcBmp">图片路径</param>
 5        /// <param name="bXDir">如果扭曲则选择为True</param>
 6        /// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>
 7        /// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>
 8        /// <returns></returns>

 9        public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
10        {
11            System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
12
13            // 将位图背景填充为白色
14            System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
15            graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 00, destBmp.Width, destBmp.Height);
16            graph.Dispose();
17
18            double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
19
20            for (int i = 0; i < destBmp.Width; i++)
21            {
22                for (int j = 0; j < destBmp.Height; j++)
23                {
24                    double dx = 0;
25                    dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
26                    dx += dPhase;
27                    double dy = Math.Sin(dx);
28
29                    // 取得当前点的颜色
30                    int nOldX = 0, nOldY = 0;
31                    nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
32                    nOldY = bXDir ? j : j + (int)(dy * dMultValue);
33
34                    System.Drawing.Color color = srcBmp.GetPixel(i, j);
35                    if (nOldX >= 0 && nOldX < destBmp.Width
36                     && nOldY >= 0 && nOldY < destBmp.Height)
37                    {
38                        destBmp.SetPixel(nOldX, nOldY, color);
39                    }

40                }

41            }

42
43            return destBmp;
44        }

45

关于无刷新的问题我找了很多文章都很复杂,后来想到了一个简单的办法

以下为引用的内容:
<img id="imgVerify" src="VerifyCode.aspx?" alt="看不清?点击更换" onclick="this.src=this.src+'?'" />


一段js代码搞定,不知道其他人是不是还有什么高见?欢迎交流