使用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 相关文章推荐
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
文字不间断滚动(上下左右)实例代码
Apr 21 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
JS返回只包含数字类型的数组实例分析
Dec 16 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
May 08 Javascript
Vue调试神器vue-devtools安装方法
Dec 12 Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
VUE写一个简单的表格实例
Aug 06 Javascript
浅析Vue 中的 render 函数
Feb 28 Javascript
JS脚本实现定时到网站上签到/签退功能
Apr 22 Javascript
使用AutoJs实现微信抢红包的代码
Dec 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
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
Js sort排序使用方法
2011/10/17 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
微信小程序如何自定义table组件
2019/06/29 Javascript
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
劳资人员岗位职责
2013/12/19 职场文书
美术教师自我鉴定
2014/02/12 职场文书
文明倡议书范文
2014/04/15 职场文书
护士求职信
2014/07/05 职场文书
民事赔偿协议书
2014/11/02 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python