使用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实现有效时间的控制,并显示将要过期的时间
Jan 02 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
Sep 09 Javascript
js过滤HTML标签完整实例
Nov 26 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
May 20 Javascript
javascript 中select框触发事件过程的分析
Aug 01 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
Node.js中的不安全跳转如何防御详解
Oct 21 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
Aug 16 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
node.js事件轮询机制原理知识点
Dec 22 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实现mysql事务处理的方法
2014/12/25 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python基于ID3思想的决策树
2018/01/03 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python阶乘求和的代码详解
2020/02/14 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
Python实现壁纸下载与轮换
2020/10/19 Python
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
初中优秀班集体申报材料
2014/05/01 职场文书
三八妇女节活动总结
2014/05/04 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
《鲸》教学反思
2016/02/23 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书