使用JQuery和s3captche实现一个水果名字的验证


Posted in Javascript onAugust 14, 2009

先看个图片:

使用JQuery和s3captche实现一个水果名字的验证

1.介绍:

 s3captcha是一个非常有用的可以让图片顺序显示的一个JQuery插件。它是通过php实现的。但是我发现很容易把它转化为asp.net和C#的代码。 我做了一个config的配置文件可以在文件中配置图片的源和名字等。

 然后介绍一下s3captcha的实现原理,

使用JQuery和s3captche实现一个水果名字的验证

上图所示是它的实现模式。
1.它随即生成图片的index;
2.把一系列随机数据赋给图片的index.
3.可以从图片列表中选择一个随机的index.
4.让图片随机的显示为一个radio box.
它使用JQuery实现的radio box到图片List的转换。
2.代码:
首先是把图片的index数组顺序打乱,重新输出:

public static List<int> shuffle(List<int> input) 
{ 
List<int> output = new List<int>(); 
Random rnd = new Random(); int FIndex; 
while (input.Count > 0) 
{ 
FIndex = rnd.Next(0, input.Count); 
output.Add(input[FIndex]); 
input.RemoveAt(FIndex); 
} 
input.Clear(); 
input = null; 
rnd = null; 
return output; 
}

使用xml来作为s3captche的配置文件:
<?xml version="1.0" encoding="utf-8" ?> 
<s3capcha> 
<icons> 
<name>apple,cherry,lemon,pear,strawberry</name> 
<title>Apple,Cherry,Lemon,Pear,Strawberry</title> 
<width>33</width> 
<height>33</height> 
<ext>jpg</ext> 
<folder>fruit</folder> 
</icons> 
<message>Verify that you are a human not robot, please choose {0}</message> 
</s3capcha>

GetHtmlCode的代码:
public static string GetHtmlCodes(string PathTo, out int SessionValue) 
{ 
bool HasValue = false; 
if (string.IsNullOrEmpty(Message)) 
HasValue = LoadConfig(); 
else 
HasValue = true; if (HasValue) 
{ 
Random Rnd = new Random(); 
int RandomIndex = Rnd.Next(0,IconNames.Length); 
List<int> values = new List<int>(); 
for(int i = 0; i < IconNames.Length;i++) 
values.Add(i); 
values = shuffle(values); 
string WriteThis = "<div class=\"s3capcha\"><p>" + 
string.Format(Message, "<strong>" + IconTitles[values[RandomIndex]] + 
"</strong>") + "</p>"; 
int[] RandomValues = new int[IconNames.Length]; 
for (int i = 0; i < IconNames.Length; i++) 
{ 
RandomValues[i] = Rnd.Next(); 
WriteThis += string.Format(RowTemplate, 
IconTitles[values[i]], RandomValues[i], 
PathTo + "/icons/" + Folder + "/" + 
IconNames[values[i]] + "." + Extention, 
Width, Height); 
} 
WriteThis += "<div style="\" style="\""clear:left\"></div></div>"; 
SessionValue = RandomValues[RandomIndex]; 
return WriteThis; 
} 
else 
{ 
SessionValue = -1; 
return "Invalid data, config file not found"; 
} 
}

3.使用ajax方法来实现验证信息的判断弹出框:
s3capcha.ashx 用来实现当向服务器请求时,返回html:
public void ProcessRequest (HttpContext context) { 
context.Response.ContentType = "text/html"; int USession; 
context.Response.Write(s3capcha.GetHtmlCodes("../../s3capcha", out USession)); 
context.Session[s3capcha.s3name] = USession; 
context.Response.End(); 
}

verify.ashx文件·来实现验证功能:
public void ProcessRequest(HttpContext context) 
{ 
context.Response.ContentType = "text/plain"; if (s3capcha.Verify(context.Session[s3capcha.s3name], 
context.Request.Form[s3capcha.s3name])) 
context.Response.Write("Success"); 
else 
context.Response.Write("Fail"); 
context.Response.End(); 
}

JQuery实现的ajax代码:
//Javascript codes 
$(document).ready(function() { 
getCapcha(); 
$("form").bind('submit', function() { 
$.ajax({ 
url: 'verify.ashx', 
type: 'POST', 
data: { 's3capcha': $("input[name=s3capcha]:checked").val() }, 
cache: false, 
success: function(data) { 
alert(data); 
getCapcha(); 
} 
}); 
return false; 
}); 
});
Javascript 相关文章推荐
js读取被点击次数的简单实例(从数据库中读取)
Mar 07 Javascript
简介AngularJS中使用factory和service的方法
Jun 17 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
利用transition实现文字上下抖动的效果
Jan 21 Javascript
js实现常见的工具条效果
Mar 02 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
图文介绍Vue父组件向子组件传值
Feb 17 Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
JavaScript学习教程之cookie与webstorage
Jun 23 Javascript
layer 关闭指定弹出层的例子
Sep 25 Javascript
react国际化化插件react-i18n-auto使用详解
Mar 31 Javascript
img标签中onerror用法
Aug 13 #Javascript
什么是JavaScript
Aug 13 #Javascript
Javascript Global对象
Aug 13 #Javascript
Javascript Math对象
Aug 13 #Javascript
Javascript 作用域使用说明
Aug 13 #Javascript
Javascript 继承机制实例
Aug 12 #Javascript
Javascript 继承机制的实现
Aug 12 #Javascript
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
webpack4从0搭建组件库的实现
2020/11/29 Javascript
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
超市国庆节促销方案
2014/02/20 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
公司任命书模板
2014/06/06 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
个人简历求职信范文
2015/03/20 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
Mysql 如何批量插入数据
2021/04/06 MySQL
使用pytorch实现线性回归
2021/04/11 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python