热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> Silverlight>>正文内容

Silverlight实现验证码【附示例源码】

发布时间:2010年05月04日点击数: 佚名

由于其强大的文本、图形操作能力和强大的相互调用通过使用脚本DOM,似乎是一个完美的正验证码引擎。   【源码下载

验证码是一种通过回复测试用来确定一个信任度,确定最终用户是真正的人,而不是“机器人”。例如你在论坛上、注册表单,提交留言和其他地方看到的的验证码,都可能受到脚本机器的攻击。通常,一个验证码涉及到播放声音或显示一个扭曲的图象,人类能够识别,但模式匹配和/或光学字符识别(OCR)技术却很难准确的破译。由于测试是由计算机发出来测试一个人,它常常被称为反向测试(反向测试是由人类设计的,用来测试计算机)。

验证码最关键的是,这也使得很难,如果不是不可能,脚本软件确定挑战的答案。 Asirra验证器是一个随机显示猫和狗图像的例子。用户被要求通过点击确定哪支是猫。这对人来说是很容易,但这个测试是非常困难的计算机算法。

某天我正在编码,它告诉我silverlight能很完美的实现验证器。它非常容易和简单的文本操作和模糊图形图像,更远的是,它的输出不是一个一个机器人可以解析的简单位图。相反,它是一个交互式脚本插件用来识别图像,它必须有它自己的Silverlight引擎,能够扫描和识别Silverlight的渲染。

我开始编写一个实际例子。我刻意保持它的基本 ,以便让你读的时候有兴趣和机会扩展和增加功能。

第一步是创建一个要使用的简单的验证类。

  1. //====================================================================== 
  2. // 
  3. //        Copyright (C) 2010-2011 Rockay.Lau 
  4. //        All rights reserved 
  5. //         
  6. //        CLR版本:            4.0.30319.1 
  7. //        新建项输入的名称: CaptchaViewModel 
  8. //        机器名称:            ROCKAY 
  9. //        命名空间名称:      SilverlightCaptcha,MVVM 
  10. //        文件名:              CaptchaViewModel 
  11. //        当前系统时间:      5/3/2010 7:53:48 PM 
  12. // 
  13. //        当前登录用户名:   Administrator 
  14. //        创建年份:           2010 
  15. // 
  16. //        created by Theo at  5/3/2010 7:53:48 PM 
  17. //        http://Rockay.cnblogs.com 
  18. // 
  19. //====================================================================== 
  20. using System; 
  21. using System.Windows.Browser; 
  22.  
  23. namespace SilverlightCaptcha.MVVM 
  24.     /// <summary> 
  25.     /// captcha视图模型 
  26.     /// </summary> 
  27.     [ScriptableType] 
  28.     public class CaptchaViewModel 
  29.     { 
  30.         /// <summary> 
  31.         /// 客户端引用key 
  32.         /// </summary> 
  33.         private const string CAPTCHA_KEY = "SilverCaptcha"
  34.  
  35.         /// <summary> 
  36.         /// 数组 
  37.         /// </summary> 
  38.         private static readonly char[] _charArray = "ABCDEFGHJKLMNPRSTUVWXYZ23456789刘其超小笨蛋".ToCharArray(); 
  39.  
  40.         /// <summary> 
  41.         /// captcha文本 
  42.         /// </summary> 
  43.         public string CaptchaText { getset; } 
  44.  
  45.         /// <summary> 
  46.         /// 构造验证码 
  47.         /// </summary> 
  48.         public CaptchaViewModel() 
  49.         { 
  50.             char[] captcha = new char[8]; 
  51.             Random random = new Random(); 
  52.             for (int x = 0; x < captcha.Length; x++) 
  53.             { 
  54.                 captcha[x] = _charArray[random.Next(_charArray.Length)]; 
  55.             } 
  56.  
  57.             CaptchaText = new string(captcha); 
  58.             HtmlPage.RegisterScriptableObject(CAPTCHA_KEY, this); 
  59.         } 
  60.  
  61.         /// <summary> 
  62.         /// Returns true if ,based on the response,the user appears to the human 
  63.         /// </summary> 
  64.         /// <param name="challengeResponse">the response to the captcha challenge</param> 
  65.         /// <returns>匹配成功返回true,反之为匹配失败</returns> 
  66.         public bool IsHuman(string challengeResponse) 
  67.         { 
  68.             return challengeResponse.Trim().ToUpper().Equals(CaptchaText); 
  69.         } 
  70.     } 

下面就是最终的效果:

错误时

正确时

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作