使用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运行耗时操作的延时显示方法
Nov 19 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
Dec 31 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
Dec 13 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
浅谈Node模块系统及其模式
Nov 17 Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
js简单粗暴的发布订阅示例代码
Jan 23 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 ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
python实现爬取千万淘宝商品的方法
2015/06/30 Python
Python实现两款计算器功能示例
2017/12/19 Python
pandas object格式转float64格式的方法
2018/04/10 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
英国电子专家:maplin
2019/09/04 全球购物
"引用"与多态的关系
2013/02/01 面试题
个人求职自荐信范文
2014/06/20 职场文书
村创先争优活动总结
2014/08/28 职场文书
老人节标语大全
2014/10/08 职场文书
教师考核评语大全
2014/12/31 职场文书
python实现自动化群控的步骤
2021/04/11 Python
golang interface判断为空nil的实现代码
2021/04/24 Golang
JavaScript实现简单拖拽效果
2021/09/15 Javascript