使用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 isPrototypeOf和hasOwnProperty使用区别
Mar 04 Javascript
JQuery 操作select标签实现代码
May 14 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
JavaScript中文件上传API详解
Apr 01 Javascript
AngularJS递归指令实现Tree View效果示例
Nov 07 Javascript
详解jQuery的Cookie插件
Nov 23 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
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
URL Rewrite的设置方法
2007/01/02 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
jquery validate demo 基础
2015/10/29 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
Python实现配置文件备份的方法
2015/07/30 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
MYSQL支持事务吗
2013/08/09 面试题
毕业生自荐信
2013/12/14 职场文书
英语简历自我评价
2014/01/26 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
综合素质自我评价评语
2015/03/06 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
golang生成vcf通讯录格式文件详情
2022/03/25 Golang