使用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 相关文章推荐
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
纯CSS打造的导航菜单(附jquery版)
Aug 07 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
jQuery学习笔记之jQuery的DOM操作
Dec 22 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 Javascript
Swiper实现轮播图效果
Jul 03 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
JavaScript函数的4种调用方法实例分析
Mar 05 Javascript
基于Node的Axure文件在线预览的实现代码
Aug 28 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 Javascript
JavaScript实现商品评价五星好评
Nov 30 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
php实现源代码加密的方法
2015/07/11 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
javascript常用函数(2)
2015/11/05 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
美国校园市场:OCM
2017/06/08 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
道路交通安全实施方案
2014/03/12 职场文书
爱护公共设施标语
2014/06/24 职场文书
学校党员对照检查材料
2014/08/28 职场文书
表扬通报怎么写
2015/01/16 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js