使用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监听表单value的修改同步问题,跨浏览器支持
Dec 31 Javascript
使用JavaScript 实现各种跨域的方法
May 08 Javascript
jquery使用animate方法实现控制元素移动
Mar 27 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
May 06 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
Nov 10 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
AngularJS全局警告框实现方法示例
May 18 Javascript
浅谈Node.js 中间件模式
Jun 12 Javascript
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 jQuery
node 文件上传接口的转发的实现
Sep 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文件读写操作之文件写入代码
2011/01/13 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
使用Apache的rewrite
2021/03/09 Servers
11款基于Javascript的文件管理器
2009/10/25 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
python中logging库的使用总结
2017/10/18 Python
python基础练习之几个简单的游戏
2017/11/10 Python
windows下python和pip安装教程
2018/05/25 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python 读写文件的操作代码
2018/09/20 Python
python获取中文字符串长度的方法
2018/11/14 Python
Python如何实现爬取B站视频
2020/05/20 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
销售求职信范文
2014/05/26 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
司机工作自我鉴定
2014/09/19 职场文书
投资入股合作协议书
2014/10/28 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
MySQL数据库 任意ip连接方法
2022/05/20 MySQL