使用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 相关文章推荐
支持ie与FireFox的剪切板操作代码
Sep 28 Javascript
JQery jstree 大数据量问题解决方法
Mar 09 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
使用JavaScript获取地址栏参数的方法
Dec 19 Javascript
JS模拟简易滚动条效果代码(附demo源码)
Apr 05 Javascript
Bootstrap表单Form全面解析
Jun 13 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
protractor的安装与基本使用教程
Jul 07 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
node 标准输入流和输出流代码实例
Sep 19 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 23 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 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实现Socket服务器的代码
2008/04/03 PHP
深入解析php之sphinx
2013/05/15 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php实现头像上传预览功能
2017/04/27 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python右对齐的实例方法
2020/07/05 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
历史专业个人求职信分享
2013/12/20 职场文书
在校学生职业规划范文
2014/01/08 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS