简单的验证码CS代码
python趣味小代码
python趣味小代码Python是一种简洁、易学、功能强大的编程语言,让人们能够用更少的代码实现复杂的任务。
除了它的实用性,Python也可以用来编写各种有趣的小程序,帮助我们解决日常生活中的一些有趣问题。
在这篇文章中,我将为您介绍一些有趣的Python小代码。
1. 黑白棋游戏黑白棋是一种经典的棋类游戏,现在我们可以使用Python编写代码来实现一个简单的黑白棋游戏。
我们可以创建一个8x8的棋盘,并使用0表示空白格,1表示黑子,-1表示白子。
接下来,我们可以实现一些游戏逻辑,例如根据规则翻转对方的棋子、判断游戏是否结束等。
通过输入不同的坐标,我们可以在控制台上下棋并观察游戏的进展。
2. 猜数字游戏猜数字游戏是一款大家都熟悉的经典游戏。
使用Python编写一个猜数字游戏可以让我们锻炼逻辑思维,并提高编程技巧。
在这个游戏中,计算机将随机生成一个数字,然后我们可以通过输入不同的数字来猜测。
计算机会根据我们的猜测给出一些提示,例如“猜大了”、“猜小了”或“恭喜猜对了”。
我们可以使用循环和条件语句来实现这个游戏,并设置一个计数器来记录我们猜测的次数。
3. 倒计时时钟使用Python编写一个倒计时时钟可以帮助我们更好地管理时间和任务。
我们可以使用time模块中的sleep函数来实现倒计时的效果。
首先,我们可以设置一个指定的时间长度,并将其转换成秒。
然后,我们可以使用一个循环来不断减少剩余时间,并在控制台上输出剩余时间。
当倒计时结束时,我们可以使用一些提示语句来提醒我们完成了一项任务或可以开始下一个任务。
4. 模拟掷骰子模拟掷骰子是一个有趣而又简单的小程序。
我们可以使用random模块中的randint函数来模拟骰子的投掷,并生成一个1到6之间的随机数。
我们可以使用循环来模拟多次掷骰子的情况,并统计每个点数出现的次数。
通过分析统计结果,我们可以了解到骰子的随机性,并可以将此应用到更复杂的概率问题中。
5. 文字游戏使用Python编写一个文字游戏可以让我们体验字谜、填字游戏等的乐趣。
ASP验证码生成
在Web系统中很多时候需要用到校验码,例如我们经常遇到不少电子邮件、论坛的注册过程需要我们输入校验码,这是为了提高安全性。
今天我们就来讲讲如何生成校验码。
使用来生成校验码图像很方便,网上也有不少教程与文章有介绍,但是都讲的太简单了,不够实用。
我来介绍一点自己的思路,算是抛砖引玉吧。
首先我们来看看,生成校验码的一种常见方式:1.生成校验码的字符串2.将该字符串输出为图像具体步骤下面我们就开始简单的例子来介绍这个过程,首先打开,新建一个Web Site,添加一个新的Web Form,取名为VCode.aspx,在其代码文件(VCode.aspx.vb)中添加一个函数generateVCode,此函数用于生成校验码的字符串,具体代码如下:''' <summary>''' 产生随机数(包含字母与数字)用于校验码''' </summary>''' <param name="CodeLength"></param>''' <returns></returns>''' <remarks></remarks>Private Function generateVCode(ByVal CodeLength As Integer) As StringDim VCode As String = String.EmptyDim randObj As New Random()Dim c As Integer = 63For i As Byte = 1 To CodeLengthc = randObj.Next(35)If c >= 10 Thenc += 7End Ifc += 48VCode += Chr(c)NextReturn VCodeEnd Function上面的的函数使用随机数来代表需要产生的校验码,包含数字与大写的字母。
验证码大全
验证码以下是目前主流验证码,如无特殊要求,请务必使用小写录入,切记不要使用大写!xyxkkejwh gkghhzdx以上验证码来自(全球最大交友网),7-10个字母,输入时间限制很很短(20秒左右),需要快速录入,否则无效!rs4jr9g9 f5hqwp8r q53tgqcv以上验证码来自,网站设定的输入时间限制较长,需要慢慢的准确输入。
lifolid上图尤其要引起注意,这种类型的验证码是纯字母的,看到像数字7的一定是字母L,所以不要输错,毕竟打错是影响准确率的!Cebus possession Hotchkiss 60-48s. $523.514 Linehan此类验证码来自,需要区分大小写!即看到大写就录入大写,看到小写就小写录入!输入时两段码之间打一个空格。
比较繁琐的验证码,有空格,有"-",还有小数点"."和“$”等等符号。
3tx2x6u5 t3gtn8cs g6t5xhnahotmail的验证码系列,主流码出码在TT LA BO里,固定的8个字符(字母加数字混合),输入时间限制很长,可以慢慢输入。
bbyume4h ny8bp4(雅虎)的验证码系列(字母加数字混合),输入时间限制很较短,需要快速录入,所以容易吃码。
FCYVEA 4DZTDT EEV3EW此种验证码比较少见,来自荷兰egv网,具体是否必须区分大小写,不得而知,可以首选大写录入!rabresub miadocaill flystra frfajiv这种类型的验证码是(谷歌)和其旗下(优兔贝视频站)的,红绿蓝三种颜色,东倒西歪,熟练了蛮好打的,小写输入。
grocery johntra forms这也是超级繁琐的验证码,一般情况下上不多见,不必理会。
fihWnTO注意:这类型的验证码需要区分大小写,PF类型验证码,即看到大写字母就输入大写字母,看到小写就小写,必须严格按照图片显示的字母输入!pleasuring brighteners backwooding据我所知这种验证码是AOL中国邮件服务网站的,设计的非常不错的验证码类型,一般很难设计出自动识别的软件来攻克此种验证码。
php手机短信验证代码(共9篇)
php手机短信验证代码(共9篇)篇一:短信验证码PHP代码篇二:用维泰SDK实现发送短信验证码php源码phprequire "httprequest.php";/*' 该示范程序通过:88/ 发送短信''返回值:'返回值大于0表示成功,小于0表示失败。
如果失败,返回信息还包括失败原因的文字描述。
'说明:'返回成功仅表示服务器已经成功接收客户提交的任务,并不表示对方已经收到短信。
'因移动公司对短信内容审核严格,如测试未收到,请及时联系客服'请不要发送"测试","你好","abc"等无意义的内容*/function smsend($strMobile,$strText){//发送短信的服务器地址$strServerURL = ":88/cgi/sendsmsbatch.asp";// 短信账号:免费申请,如有问题请联系QQ732055019// :88/mis/user_reg_form.asp?interest=sms.api $strUser= "username";// 验证密码: 初始密码由平台通过短信发送, 用户可登录平台自己修改$strPass= "userpass";if($strUser==""){echo ("短信帐号没有设定!");return;}if($strPass==""){echo ("短信验证密码没有设定!");return;}if($strMobile==""){echo ("短信接收号码无效!");return;}if($strText=="undefined|| $strText==""){echo ("短信内容不能为空!");return;}if(strlen($strText)69){echo ("短信内容不能超过69个字");return;}//准备表单:使用urlencode对参数进行编码,字符集gb2312 $strForm = "User=. urlencode($strUser);$strForm .= "&Pass=. urlencode($strPass);$strForm .= "&Mobile=. urlencode($strMobile);$strForm .= "&Text=. urlencode($strText);$h= new HttpRequest();$s= $h-request("GET",$strServerURL."?".$strFor m,"");if (strpos($s,"SUCCESS")===false){//出现错误echo ("短信通知发送失败!br.$s);}else {//发送成功echo("短信通知发送成功!");}}htmlheadtitle发送短信通知/titlemeta http-equiv="Content-Typecontent="text/html; charset=gb2312"/headbodybrdiv class="title1"发送短信通知/divdiv class="content1"$strMobile="132****9999";//接收短信的手机号码 $strText="Test SMS";//短信内容(不要超过69个字) smsend($strMobile,$strText);/div/body/htmlphp //httprequest.phpclass HttpRequest{var $_host;var $_uri;var $_port;var $_response;function parseURL($url){$req = $url;$pos = strpos($req, '://');$this-_protocol = strtolower(substr($req, 0, $pos));$req = substr($req, $pos+3);$pos = strpos($req, '/');if($pos === false)$pos = strlen($req);$host = substr($req, 0, $pos);if(strpos($host, ':') === false){$this-_host = $host;$this-_port = ($this-_protocol == 'https') ? 443 : 80;}else{list($this-_host, $this-_port) = explode(':', $host);}$this-_uri = substr($req, $pos);if($this-_uri == '')$this-_uri = '/';}function request($method , $url, $sPostData){$this-parseURL($url);$fp = pfsockopen( $this-_host, $this-_port, &$errno, &$errstr, 120); if( !$fp ) {echo "$errstr ($errno)br\n";return "";}if( strtoupper($method) == "GET"){fputs( $fp, "GET ".$this-_uri.HTTP/1.0\r\n"); }else if( strtoupper($method) == "POST) {fputs( $fp, "POST ".$this-_uri.HTTP/1.0\r\n"); }fputs( $fp, "Accept: */*\n");fputs( $fp, "Host: ".$this-_host."\r\n");fputs( $fp, "Connection: Close\r\n");if( strtoupper($method) == "POST) {$strlength = strlen( $data);fputs( $fp, "Content-type:application/x-www-form-urlencoded\r\n); fputs( $fp, "Content-length: ".$strlength."\r\n");fputs($fp, "\r\n");fputs( $fp, $data."\r\n");}else{fputs($fp, "\r\n");}$this-_response = "";while( !feof( $fp ) ) {$this-_response .= fgets( $fp, 4096);}fclose( $fp);$s = $this-getResponseBody();return $s;}function getResponse(){return $this-_response;}function getResponseBody(){$sKey = "\r\n\r\n";$pos = strpos($this-_response,$sKey);if($pos===false) return "";$str= substr($this-_response,$pos + 4);return $str;}}篇三:用免费短信验证码SDK实现手机注册验证功能用免费短信验证码SDK实现手机注册验证功能第一步获取短信SDK请到Mob官网下载最新版本的SDK,下载回来后解压,可以看到下面的文件结构:其中SMS_SDK.framework 为依赖库文件SMS_SDKDemo 为示例demo ,其中保存了短信SDK的演示项目代码。
验证码大全
验证码以下是目前主流验证码,如无特殊要求,请务必使用小写录入,切记不要使用大写!xyxkkejwh gkghhzdx以上验证码来自(全球最大交友网),7-10个字母,输入时间限制很很短(20秒左右),需要快速录入,否则无效!rs4jr9g9 f5hqwp8r q53tgqcv以上验证码来自,网站设定的输入时间限制较长,需要慢慢的准确输入。
lifolid上图尤其要引起注意,这种类型的验证码是纯字母的,看到像数字7的一定是字母L,所以不要输错,毕竟打错是影响准确率的!Cebus possession Hotchkiss 60-48s. $523.514 Linehan此类验证码来自,需要区分大小写!即看到大写就录入大写,看到小写就小写录入!输入时两段码之间打一个空格。
比较繁琐的验证码,有空格,有"-",还有小数点"."和“$”等等符号。
3tx2x6u5 t3gtn8cs g6t5xhnahotmail的验证码系列,主流码出码在TT LA BO里,固定的8个字符(字母加数字混合),输入时间限制很长,可以慢慢输入。
bbyume4h ny8bp4(雅虎)的验证码系列(字母加数字混合),输入时间限制很较短,需要快速录入,所以容易吃码。
FCYVEA 4DZTDT EEV3EW此种验证码比较少见,来自荷兰egv网,具体是否必须区分大小写,不得而知,可以首选大写录入!rabresub miadocaill flystra frfajiv这种类型的验证码是(谷歌)和其旗下(优兔贝视频站)的,红绿蓝三种颜色,东倒西歪,熟练了蛮好打的,小写输入。
grocery johntra forms这也是超级繁琐的验证码,一般情况下上不多见,不必理会。
fihWnTO注意:这类型的验证码需要区分大小写,PF类型验证码,即看到大写字母就输入大写字母,看到小写就小写,必须严格按照图片显示的字母输入!pleasuring brighteners backwooding据我所知这种验证码是AOL中国邮件服务网站的,设计的非常不错的验证码类型,一般很难设计出自动识别的软件来攻克此种验证码。
easy-captcha 验证码 案例
【主题】easy-captcha验证码案例分析【内容】1. 背景介绍easy-captcha是一个基于Java的开源验证码生成工具,可以轻松地生成各种类型的验证码,包括数字、字母、算术运算等,适用于Web 应用、移动应用等各种场景。
2. easy-captcha的特点easy-captcha具有以下特点:- 简单易用:通过简单的配置即可生成各种类型的验证码。
- 自定义性强:支持自定义验证码长度、宽度、高度等参数。
- 多样化:支持数字、字母、算术运算等多种类型的验证码。
- 高安全性:生成的验证码具有一定的防伪能力,能有效防止恶意攻击和爬虫。
3. easy-captcha在实际项目中的应用以某电商全球信息站为例,介绍easy-captcha在实际项目中的应用情况:- 用户注册:在用户注册页面使用easy-captcha生成验证码,确保用户输入信息的准确性。
- 找回密码:在用户找回密码时使用easy-captcha生成验证码,确保用户身份的真实性。
- 登入验证:在用户登入时使用easy-captcha生成验证码,防止暴力破解和恶意登入。
4. easy-captcha的使用方法介绍easy-captcha的使用方法,包括依赖引入、配置参数、验证码生成等步骤。
5. easy-captcha的优化与性能提升针对easy-captcha在实际应用中可能遇到的性能问题,介绍优化方法,包括验证码缓存、验证码预生成等技术手段,提升验证码生成的性能和用户体验。
6. 结语总结easy-captcha在验证码生成方面的优势和应用案例,展望其在未来的发展前景。
同时提醒开发者在使用easy-captcha时需要注意安全性和性能方面的问题,合理使用并进行定期维护。
7. easy-captcha在安全性方面的应用easy-captcha不仅可以用来增强用户体验,同时也在保障系统安全性方面扮演着重要的角色。
在实际使用中,easy-captcha可以有效地防止恶意攻击,如暴力破解、SQL注入等网络攻击。
简单有趣的python代码
简单有趣的python代码Python是一种简单易学的编程语言,也是非常有趣的一种语言。
下面给大家介绍几个简单有趣的Python代码。
1. 猜数字游戏这是一个简单的猜数字游戏,让用户在1到100之间猜一个随机数。
如果用户猜对了,程序会显示“恭喜你,猜对了!”;如果用户猜错了,程序会提示用户猜的数字是太大还是太小。
```pythonimport randomnum = random.randint(1, 100)guess = int(input('Guess a number between 1 and 100: ')) while guess != num:if guess < num:print('Too low. Try again.')guess = int(input('Guess a number between 1 and 100: ')) else:print('Too high. Try again.')guess = int(input('Guess a number between 1 and 100: ')) print('Congratulations! You guessed the number!')```2. 简单的密码生成器这是一个简单的密码生成器,可以生成随机的8位密码,包括大小写字母、数字和符号。
```pythonimport randomimport stringdef generate_password(length=8):characters = string.ascii_letters + string.digits + string.punctuationpassword = ''.join(random.choice(characters) for i in range(length))return passwordprint(generate_password())```3. 打印九九乘法表这是一个可以打印九九乘法表的程序,使用双重循环。
c语言有趣的代码
c语言有趣的代码C语言是一种强大的编程语言,是许多程序员都必须要掌握的语言之一。
对于那些想要深入学习和掌握C语言的人来说,掌握一些有趣的代码可以是很有帮助的。
本文将介绍一些有趣的C语言代码,这些代码涉及到各种程序设计的领域,从简单的算术操作到复杂的图形和游戏。
1. 打印正弦函数要在C语言中打印正弦函数可以使用数学库函数sin()。
以下是一个简单示例,它将打印出正弦函数的值:#include <stdio.h> #include <math.h>int main() { double angle; double result;// Loop through the angle 0 to 360 degrees, in increments of 10 for (angle = 0.0; angle <= 360.0; angle += 10.0) { result =sin(angle * M_PI / 180.0); // Convert angle to radiansprintf("sin(%f) = %f\n", angle, result); }return 0; }在这个示例中,我们循环从0°到360°,每次以10°的步长递增,并使用sin()函数计算相应角度的正弦。
我们将角度从度数转换为弧度以便计算,然后打印出结果。
2. 凯撒密码凯撒密码是一种简单的置换密码,它将明文中的每个字母替换为一个固定的、用于加密的字母。
这个加密算法可以使用C语言非常容易地实现。
以下是一个示例,它将使用凯撒密码加密输入的字符串:#include <stdio.h>int main() { char str[100]; int key;printf("Enter a string to encrypt: ");gets(str);printf("Enter a key: "); scanf("%d",&key);for (int i = 0; str[i] != '\0'; i++){ if (str[i] >= 'a' && str[i] <= 'z') str[i] = (str[i] - 'a' + key) % 26 + 'a';else if (str[i] >= 'A' && str[i] <= 'Z')str[i] = (str[i] - 'A' + key) % 26 + 'A'; }printf("Encrypted string: %s\n", str);return 0; }在这个示例中,我们首先要求用户提供要加密的字符串和一个密钥。
初学者必会的c语言必背代码
初学者必会的c语言必背代码1、c语言必背100代码,C语言代码大全第一个------乘法表。
用C语言输出9*9成法口诀。
共9行9列,i控制行,j控制列。
2、c语言必背100代码之4×4数组下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,请在空白处完善程序。
3、c语言必背100代码,C语言必背100代码。
古典问题有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?兔子的规律为数列1,1,2,3,5,8,13,21…4、c语言必背100代码素数判断101-200之间有多少个素数,并输出所有素数及素数的个数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
5、c语言必背100代码完数相关代码一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数。
6、c语言必背100代码三角形打印编程打印直角杨辉三角形7、c语言必背100代码平均分问题通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。
#include <stdio.h>#include <stdlib.h>main(){ float a[4][5],sum1,sum2;int i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%f",&a[i][j]);for(i=0;i<3;i++){ sum1=0;for(j=0;j<4;j++)sum1+=a[i][j];a[i][4]=sum1/4;}for(j=0;j<5;j++){ sum2=0;for(i=0;i<3;i++)sum2+=a[i][j];a[3][j]=sum2/3;}for(i=0;i<4;i++){ for(j=0;j<5;j++)printf("%6.2f",a[i][j]);printf("\n");}}8、c语言必背100代码反向输出完善程序,实现将输入的字符串反序输出,如输入windows 输出swodniw。
433模块通讯协议
电脑通讯协议数据格式说明:0XAF,0XAF:同步头0X00,0X00:ID码(一般是0X00,0X00)0XAF:头0X80,0X00:命令码(上位机发码是0X80,YY,单片几发码给电脑0X00,YY)LEN:数据长度是从LEN开始到CS的数据个数,不包括LEN和CSCS:是验证码,CS前面所有数据之和%0XFF结束码:0X0D 0X0A举例:设置空中参数为9600代码为:AF AF 00 00 AF 80 03 02 04 00 96 0D 0A读取空中参数代码为:AF AF 00 00 AF 80 04 02 00 00 93 0D 0A//*************************************************************** ****02发码设置串口AF AF 00 00 AF 80 01 LEN XX YY CS 0D 0AXX:01-120002-240003-480004-960005-1920006-3840007-5670008-115200YY:00-无验证01-偶验证02-奇验证答应回码AF AF 00 00 AF 00 01 LEN XX YY CS 0D 0AXX:01-120002-240003-480005-1920006-3840007-5670008-115200YY:00-无验证01-验证02-奇验证//*************************************************************** ****03读串口参数//读串口参数//AF AF 00 00 AF 80 02 LEN 00 00 CS 0D 0A//答应参数//AF AF 00 00 AF 00 02 LEN XX YY CS 0D 0AXX:01-120002-240003-480004-960005-1920006-3840007-5670008-115200YY:00-无验证01-偶验证02-奇验证//*************************************************************** ****04设空中参数////AF AF 00 00 AF 80 03 LEN XX YY CS 0D 0A//XX 01-120002-240003-480004-960005-1920006-3840007-5670008-115200YY=0//答应参数//AF AF 00 00 AF 00 03 LEN XX YY CS 0D 0A//XX 01-120002-240003-480005-1920006-3840007-5670008-115200YY=0//*************************************************************** ****05读空中参数//AF AF 00 00 AF 80 04 LEN 00 00 CS 0D 0A//答应参数//AF AF 00 00 AF 00 04 LEN XX YY CS 0D 0A//XX 01-120002-240003-480004-960005-1920006-3840007-5670008-115200YY=0//*************************************************************** ****06设信道 *///AF AF 00 00 AF 80 05 LEN XX YY CS 0D 0A//XX 01-第一通道()// 02-第二通道()// 03-第三通道()// 04-第四通道()// 05-第五通道()// 06-第六通道()// 07-第七通道()// 08-第七通道()注:这8个信道是YRM100F型号的信道//YY=0//答应参数//AF AF 00 00 AF 00 05 LEN XX YY CS 0D 0A//XX 01-第一通道()// 02-第二通道()// 03-第三通道()// 04-第四通道()// 05-第五通道()// 06-第六通道()// 07-第七通道()// 08-第七通道()注:这8个信道是YRM100F型号的信道//YY=0//*************************************************************** ****07读信道*///AF AF 00 00 AF 80 06 LEN 00 00 CS 0D 0A//答应参数//AF AF 00 00 AF 00 06 LEN XX YY CS 0D 0A//XX 01-第一通道()// 02-第二通道()// 03-第三通道()// 04-第四通道()// 05-第五通道()// 06-第六通道()// 07-第七通道()// 08-第七通道()注:这8个信道是YRM100F型号的信道//YY=0//*************************************************************** ****发射功率设置:1级--- AF AF 00 00 AF 80 13 02 01 00 A3 0D 0A 1mw2级--- AF AF 00 00 AF 80 13 02 02 00 A4 0D 0A 3mw3级--- AF AF 00 00 AF 80 13 02 03 00 A5 0D 0A 5mw4级--- AF AF 00 00 AF 80 13 02 04 00 A6 0D 0A 10mw5级--- AF AF 00 00 AF 80 13 02 05 00 A7 0D 0A 20mw6级--- AF AF 00 00 AF 80 13 02 06 00 A8 0D 0A 50mw7级--- AF AF 00 00 AF 80 13 02 07 00 A9 0D 0A 100mw读取场强发送命令:AF AF 00 00 AF 80 1A 02 00 00 A9 0D 0A返回举例:AF AF 00 00 AF 00 1A 02 89 00 B2 0D 0AAF AF 00 00 AF 00 1A 02 72 00 9B 0D 0AAF AF 00 00 AF 00 1A 02 1F 00 48 0D 0A红色数值越大表示场强越大ID设置读取:读取命令:AF AF 00 00 AF 80 0D 02 00 00 9C 0D 0A设置ID为00001:AF AF 00 00 AF 80 0C 02 00 01 9C 0D 0A设置ID为00002:AF AF 00 00 AF 80 0C 02 00 02 9D 0D 0A设置ID为00003:AF AF 00 00 AF 80 0C 02 00 03 9E 0D 0A。
弹出层
div弹出层,我没有点击事件,是页面一加载就弹出来,你也可以改成$("#id").click(fun ction(){});放这里面就可以点击某个id事件来弹出层了,上预览图:页面加载完成时:当验证码得到焦点时:实现这个ajax为了节约时间,用户名/密码/验证码我都没判断是否为空,我也没用数据库,登录用户名和密码都是admin登录成功时:这里说明一下,由于时间有限,你可以把这个登录成功或者登录失败,效果做一下,直接在登录窗口上放一个<div id="message"><div>然后设置其样式,把提示内容追加上去,根据自己个人需求来,下面贴我的全部代码:静态页面login.html代码如下图所示:login.html1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht tp:///TR/xhtml1/DTD/xhtml1-transitional.dtd">2<html xmlns="/1999/xhtml">3<head>4<title>mydream_后台登录</title>5<link href="css/login.css" rel="stylesheet" type="text/css"/> 6<script src="../js/jquery-1.4.1-vsdoc.js" type="text/javascrip t"></script>7<script src="js/login.js" type="text/javascript"></script>8</head>9<body>10<div id="login" class="login">11<div class="title"><b>管理员登录</b></div>12<div class="pad">13<div><p class="selectinput loginpsw"><label>用户名:</label><inputtype="text" tabindex="1" class="txt" size="36" name="username" id="tx tName"/></p></div>14<div><p class="selectinput loginpsw"><label>密 码:</label><input type="password" tabindex="1" class="txt" size="36" name="password" id="txtPassword"/></p></div>15<div><div><p class="selectinput loginpsw"><label>验证码:</label>< input type="text" tabindex="1" class="txt" size="36" name="code" id=" txtCode"/></p></div></div>16<div><input id="btnLogin" type="button" value="登录"/></div>17</div>18<div class="divCode"><img alt="验证码" title="点击刷新验证码" src= "../ashx/verifyCode.ashx"/></div>19</div>20</body>21</html>login.html层叠样式表login.css代码如下所示:login.css1.selectinput{margin-bottom:10px;width:224px;height:20px;background -color:#FFF;border:1px solid;border-color:#999 #CCC #CCC #999;}2.selectinput .txt{float:left;width:165px;border:none;}3.loginpsw label{float:left;display:inline;margin:0 0 0 4px;width:50px;height:auto;line-height:150%; color:#339900}4body,td,input,textarea,select,button{color:#666;font:12px/1.6em Ve rdana,Helvetica,Arial,sans-serif;}5input,select,button{vertical-align:middle;}6.txt,.txtarea{padding:2px;*padding:0 2px;height:16px;*height:20px; border:1px solid;border-color:#999 #CCC #CCC #999;background:#FFF;}7body{ margin:0 auto;}8.login{border:solid 3px #339900; width:360px; height:223px;display: none; z-index:101;position:absolute; background-color:#FFFFFF;}9.login .title{width:100%;height:30px;line-height:30px; border-bott om:solid 1px #339900;}10.login .title b{ padding-left:5px; color:#000000;}11.login .pad{padding-left:35px;}12.login .divCode{width:80px; height:30px;position:relative;top: -32 px;left:170px; display:none;}13.login #btnLogin{width:55px; height:28px;}14#greybackground{background:#000000;width:100%; display:block; z-in dex:100; top:0px; left:0px; position:absolute;}login.html页面所需js文件login.js代码如下所示:login.js1/// <reference path="/js/jquery-1.4.1-vsdoc. js" />2 $(document).ready(function() {3var screenwidth, screenheight, mytop, getPosLeft, getPosTop4 screenwidth = $(window).width();5 screenheight = $(window).height();6//获取滚动条距顶部的偏移7 mytop = $(document).scrollTop();8//计算弹出层的left9 getPosLeft = screenwidth / 2 - 200;10//计算弹出层的top11 getPosTop = screenheight / 2 - 150;12//css定位弹出层13 $("#login").css({ "left": getPosLeft, "top": getPosTop });14//当浏览器窗口大小改变时15 $(window).resize(function() {16 screenwidth = $(window).width();17 screenheight = $(window).height();18 mytop = $(document).scrollTop();19 getPosLeft = screenwidth / 2 - 200;20 getPosTop = screenheight / 2 - 150;21 $("#login").css({ "left": getPosLeft, "top": getPosTop + m ytop });22 });23//当拉动滚动条时,弹出层跟着移动24 $(window).scroll(function() {25 screenwidth = $(window).width();26 screenheight = $(window).height();27 mytop = $(document).scrollTop();28 getPosLeft = screenwidth / 2 - 200;29 getPosTop = screenheight / 2 - 150;30 $("#login").css({ "left": getPosLeft, "top": getPosTop + m ytop });31 });32//失去焦点与得到焦点33 $("#txtCode").focus(function() {34 $(".divCode").fadeIn(1200);35 });36 $("#txtCode").blur(function() {37 $(".divCode").fadeOut();38 });39 $("#login").fadeIn("slow"); //toggle("slow");40//获取页面文档的高度41var docheight = $(document).height();42//追加一个层,使背景变灰43 $("body").append("<div id='greybackground'></div>");44 $("#greybackground").css({ "opacity": "0.1", "height": docheig ht });45//登录46 $("#btnLogin").click(function() {47 $.get("../ashx/login.ashx",48 { name: $("#txtName").val(),49 pwd: encodeURIComponent($("#txtPassword").val()),50 code: $("#txtCode").val()51 },52function(data) {53switch (data) {54case "code error":55 alert("验证码错误!");56break;57case "success":58 alert("登录成功!");59break;60case "false":61 alert("登录失败!");62break;63default:64 alert("数据加载失败,请稍后再试!");65break;66 }67 });68 });69 });login.html交互的后台cs文件login.ashx代码如下所示:login.ashx1 <%@ WebHandler Language="C#" Class="login" %>23using System;4using System.Web;5using System.Web.SessionState;67public class login : IHttpHandler, IRequiresSessionState8 {9public void ProcessRequest(HttpContext context)10 {11string code = context.Request.QueryString["code"];12 context.Response.ContentType = "text/plain";13if (code.ToLower() != context.Session["checkCode"].ToStrin g())14 {15 context.Response.Write("code error");16 }17else18 {19string name = context.Request.QueryString["name"];20string pwd = HttpUtility.UrlDecode(context.Request.Que ryString["pwd"]);21if (name == "admin" && pwd == "admin")22 {23 context.Response.Write("success");24 }25else26 {27 context.Response.Write("false");28 }29 }30 }3132public bool IsReusable33 {34get35 {36return false;37 }38 }3940 }login.html页面验证码文件verifyCode.ashx代码如下所示:verifyCode1 <%@ WebHandler Language="C#" Class="verifyCode" %>23using System;4using System.Web;5using System.Web.SessionState;//第一步导入命名空间6using System.Drawing;78public class VerifyCode : IHttpHandler, IRequiresSessionState 9 {//第二步实现接口就和平常一样可以使用session1011public void ProcessRequest(HttpContext context)12 {13string checkCode = this.CreateRandomCode(4).ToLower();14 context.Session["checkCode"] = checkCode;15this.CreateImage(context, checkCode);16 }1718public bool IsReusable19 {20get21 {22return false;23 }24 }2526///<summary>27///按位生成随机28///</summary>29///<param name="codeCount"></param>30///<returns></returns>31private string CreateRandomCode(int codeCount)32 {33int number;34string checkCode = String.Empty;35 Random random = new Random();36for (int i = 0; i < codeCount; i++)37 {38 number = random.Next(100);39switch (number % 3)40 {41case0:42 checkCode += ((char)('0' + (char)(number % 1 0))).ToString();43break;44case1:45 checkCode += ((char)('a' + (char)(number % 2 6))).ToString();46break;47case2:48 checkCode += ((char)('A' + (char)(number % 2 6))).ToString();49break;50default:51break;52 }53 }54return checkCode;55 }5657///<summary>58///根据字符生成图片59///</summary>60///<param name="context"></param>61///<param name="checkCode"></param>62private void CreateImage(HttpContext context,string checkCode) 63 {64int randAngle = 45;//随机转动角度65int iwidth = (int)(checkCode.Length * 23);66//封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成,指定的宽度和高度。
ASP.net验证码实现代码(C#)
验证码实现代码(C#)public class ValidateCode : System.Web.UI.Page{private void Page_Load(object sender, System.EventArgs e){this.CreateCheckCodeImage(GenerateCheckCode());}#region Web 窗体设计器⽣成的代码override protected void OnInit(EventArgs e){//// CODEGEN: 该调⽤是 Web 窗体设计器所必需的。
//InitializeComponent();base.OnInit(e);}/// <summary>/// 设计器⽀持所需的⽅法 - 不要使⽤代码编辑器修改/// 此⽅法的内容。
/// </summary>private void InitializeComponent(){this.Load += new System.EventHandler(this.Page_Load);}#endregionprivate string GenerateCheckCode(){int number;char code;string checkCode = String.Empty;System.Random random = new Random();for(int i=0; i<5; i++){number = random.Next();if(number % 2 == 0)code = (char)('0' + (char)(number % 10));elsecode = (char)('A' + (char)(number % 26));checkCode += code.ToString();}Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));return checkCode;}private void CreateCheckCodeImage(string checkCode){if(checkCode == null || checkCode.Trim() == String.Empty)return;System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g = Graphics.FromImage(image);try{//⽣成随机⽣成器Random random = new Random();//清空图⽚背景⾊g.Clear(Color.White);//画图⽚的背景噪⾳线for(int i=0; i<25; i++){int x1 = random.Next(image.Width);int x2 = random.Next(image.Width);int y1 = random.Next(image.Height);int y2 = random.Next(image.Height);g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);}Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);g.DrawString(checkCode, font, brush, 2, 2);//画图⽚的前景噪⾳点for(int i=0; i<100; i++){int x = random.Next(image.Width);int y = random.Next(image.Height);image.SetPixel(x, y, Color.FromArgb(random.Next()));}//画图⽚的边框线g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);System.IO.MemoryStream ms = new System.IO.MemoryStream();image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);Response.ClearContent();Response.C;Response.BinaryWrite(ms.ToArray());}finally{g.Dispose();image.Dispose();}}} 假如以上验证码⽣成器页⾯名为:CheckCode.aspx,那么在登录页⾯中使⽤“<IMG>” 这个 HTML 元素来显⽰⽣成的验证码图⽚:<IMG src="CheckCode.aspx"> 在登录页⾯的登录按钮的处理事件中使⽤以下代码判断验证码:private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e){if(Request.Cookies["CheckCode"] == null){lblMessage.Text = "您的浏览器设置已被禁⽤ Cookies,您必须设置浏览器允许使⽤ Cookies 选项后才能使⽤本系统。
C#验证码 详细制作方法
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
</script>
<head runat="server">
3 在初始登录界面增加imgebutton控件 this.ibtnValidate.ImageUrl = "./ValidateCode.aspx";
/****************************************************
return HttpContext.Current.Session["CheckCode"].ToString();
}
#region 验证码图片生成修饰,防破解
private void CreateImages(string checkCode)
Session["checkkey"] = validateCodeCreateClass.DrawImage(); //Session["checkkey"] 是我自己定义的为了以后使用
}
3 在第二步新建的页面里 修改脚本
<html xmlns="/1999/xhtml">
{
public ValidateCodeCreateClass()
{
}
//画图,供web页面调用
public string DrawImage()
前端开发实训案例网页验证码的生成与验证
前端开发实训案例网页验证码的生成与验证前端开发实训案例网页验证码的生成与验证为了保证网页的安全性和防止机器人恶意攻击,很多网站在用户进行注册、登录或者提交表单等操作时会要求用户输入验证码。
验证码是一种基于图像识别的技术,通过生成和验证验证码,可以有效防止机器人的自动化行为,确保用户身份的真实性。
本文将介绍前端开发中实现网页验证码的生成与验证的案例,并提供相应的代码实例。
1. 网页验证码的生成在前端开发中,验证码的生成是通过服务器端应用和前端代码联动来实现的。
以下是一种常见的验证码生成方法:首先,我们需要在服务器端生成验证码图片。
可以使用第三方库、自定义脚本或开源工具来实现这一步骤。
生成验证码图片的关键是要确保图片上的字符是随机的、干扰元素适当,并且字体、大小、颜色等可配置。
接下来,在前端页面中使用<img>标签将验证码图片展示给用户。
同时,在用户填写验证码的输入框旁边提供一个刷新按钮,点击按钮可以重新加载生成新的验证码图片。
2. 网页验证码的验证用户输入验证码后,前端需要将验证码的值发送给服务器端进行验证。
下面是一个网络验证码验证的示例过程:首先,前端需要获取用户输入的验证码值,可以使用JavaScript的相关API来获取。
然后,前端通过AJAX等方式将验证码的值发送给服务器端。
服务器端会将用户输入的验证码值与之前生成的验证码值进行比对。
如果验证码验证成功,服务器端会返回一个验证通过的信息(如JSON格式的数据)给前端;否则,返回一个验证失败的信息。
前端根据服务器端返回的响应,可以展示相应的提示信息给用户,例如验证码正确、验证码错误等提示。
3. 安全性考虑为了保证验证码的安全性,防止机器人攻击,有以下几点需要注意:首先,生成的验证码要足够随机,不能出现重复的情况,且需要有一定复杂度。
可以使用混合字母、数字和特殊字符的组合,增加验证码的难度。
其次,验证码的图片要有适当的干扰元素,使机器无法简单识别。
c语言摩斯密码代码
c语言摩斯密码代码一、引言摩斯密码是一种通过长短电信号的组合,模拟不同英文字母和数字的方式,常用于无线电通讯的加密。
通过使用C语言编写摩斯密码代码,我们可以将其应用到计算机通讯中,实现加密通讯的目的。
本文将介绍如何使用C语言编写摩斯密码代码,并展示一段示例代码。
二、代码实现1.代码框架以下是一个简单的C语言摩斯密码代码框架,用于生成摩斯密码:```c#include<stdio.h>#include<stdlib.h>#include<time.h>voidencrypt(char*message,char*code){inti;for(i=0;message[i]!='\0';i++){//处理字母和数字if(isalpha(message[i])){//加密规则...code[i]=...;}elseif(isdigit(message[i])){//加密规则...code[i]=...;}}code[i]='\0';//字符串结尾符}intmain(){charmessage[]="Hello,world!";//要加密的消息charcode[strlen(message)+1];//生成的摩斯密码encrypt(message,code);//加密函数调用printf("摩斯密码:%s\n",code);//输出加密后的摩斯密码return0;}```上述代码中,`encrypt`函数用于将消息转换为摩斯密码,并存储在`code`字符串中。
在主函数中,我们定义了一个要加密的消息`message`,并调用`encrypt`函数将其转换为摩斯密码。
最后,我们输出加密后的摩斯密码。
2.加密规则摩斯密码的加密规则取决于不同的应用场景和需求。
一般来说,可以通过以下方式对字母和数字进行加密:*对于字母,可以使用长短电信号组合的不同组合来模拟不同的字母。
获取验证码方法
获取验证码⽅法/*** @MethodName getVerificationCode* @Description TODO 获取验证码* @Author zak*///想要获取验证码可以直接调⽤这个⽅法public static String genCodes(int length, long num) {String results="";for(int j=0;j<num;j++){String val = "";Random random = new Random();for(int i = 0; i < length; i++){String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; // 输出字母还是数字if("char".equalsIgnoreCase(charOrNum)) // 字符串{int choice = random.nextInt(2) % 2 == 0 ? 65 : 97; //取得⼤写字母还是⼩写字母val += (char) (choice + random.nextInt(26));}else if("num".equalsIgnoreCase(charOrNum)) // 数字{val += String.valueOf(random.nextInt(10));}}val= val.toLowerCase();if(results.contains(val)){continue;}else{return val;}}return results;}只输出数字的验证码public static String genCodes(int length, long num) {String results="";for(int j=0;j<num;j++){String val = "";Random random = new Random();for(int i = 0; i < length; i++){// String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; // 输出字母还是数字//// if("char".equalsIgnoreCase(charOrNum)) // 字符串// {// int choice = random.nextInt(2) % 2 == 0 ? 65 : 97; //取得⼤写字母还是⼩写字母// val += (char) (choice + random.nextInt(26));// }// else if("num".equalsIgnoreCase(charOrNum)) // 数字// {val += String.valueOf(random.nextInt(10));// }}val= val.toLowerCase();if(results.contains(val)){continue;}else{return val;}}return results;}调⽤的例⼦,把验证码存⼊redis中 /*** @MethodName getVerificationCode* @Description TODO 获取验证码* @Author zak*/@ApiOperation(value = "获取验证码")@ApiImplicitParam(name = "${pk.attrname}", value = "获得${className}模块详细数据", required = true,dataType = "${pk.attrType}") @NoToken@ResponseBody@RequestMapping(value = "/getVerificationCode.api")public String getVerificationCode() {//获取验证码String code = VerificationCodeUtils.genCodes(4, 1);//获取ipString ip = IpUtils.getIpAdrress(request);//设置验证码五分钟有效期RBucket<String> keyObj = redissonService.getRBucket(ip); keyObj.set(code, 5, TimeUnit.MINUTES);return code;}。
C#简单数字验证码解析
C#简单数字验证码解析这⼏天都在研究验证码解析,写了⼀个DEMO,对于纯数字且⽣成位置变化频率较低的图⽚识别效果还算满意,准确率在80%以上,更⾼级别的验证码还有待研究。
具体实现思路:以4位数字的验证码为例1、⼈⼯将验证码的4位数字每位对应的代码存⼊数据库中,每位存⼊0-9对应的代码,每个数可以多存这样可以提⾼识别率;2、获取验证码以后,对其进⾏去背景、灰度处理、去噪点处理、分⽚处理以后⽣成每位数字对应的代码;3、去背景⾊,这⼀步的⽬的是把验证码和背景颜⾊区别开来。
去除背景的算法,依赖于验证码图像的特征:1、⾸先需要知道背景⾊最简单的⽅法就是把最左上⾓的点的量化值作为背景⾊。
优化⼀点可以取图像矩形的topleft,topright,bottomleft,bottomright这4个点⽐对。
或者取更边界上更多点⽐对。
2、扫描m*n图像矩形,从每个具有背景⾊的点出发找到整个连接块,设置matrix[i,j]=0。
这是⼀个很简单的带剪枝的DFS算法,很快就能把背景⾊去除,本例⽤第⼆种。
4、去噪声:这⼀步要取出图像上的孤⽴点。
这些孤⽴点被认为是噪声。
孤⽴点的定义:某个点,周围没有与该点等值的点。
或者某个连接块,该连接块的元素的个数⼩于某个给定值K,把元素个数很⼩的连接块也定义为孤⽴点,有助于去处噪声。
去噪声算法:参照去背景算法。
5、图像锐化:图像锐化的⽬的是增强边界。
这⼀步是可选的。
看验证码的情况,这⼀步可以跳过。
6、图⽚有效区域截取:这个操作是将图⽚除验证码字符以外的边框去掉,只留下验证码字符图⽚,这样保证分⽚的准确性。
7、图⽚分⽚处理,这个处理是将整个图⽚分割成单个字符图⽚。
1、连接块法:找到矩阵中除背景外所有的连接块,把每个连接块作为⼀个⼦图。
不适⽤于⼦图存在断裂的情形。
实现:带剪枝的DFS。
2、⼦图分割:如果验证码是定长的,且字符之间等距。
可以⽤⼀个简单的垂直分割把⼦图提取出来。
这种⽅法适⽤于⼦图断裂,⽤连接块法提取失败的情形。
C#图片验证码识别代码
去噪:用于验证码图片识别的类续(C#代码)自从发表了用于验证码图片识别的类(C#代码)后,不断有网友下载这个类后,问如何用于一些特定的验证码。
总结一下网友们的提问,很多都是不会从复杂背景中提到干净的字符图片来,这主要就是一个去噪问题,即除去图片上的背景、干扰点、干扰线等信息。
这当中要用到很多图像学数学算法,首先声明,本人不是学图像学的,以下方法理论说得不对,敬请多批评指正。
1、如何设前景/背景的分界值UnCodebase类中有一个GetPicValidByValue( int dgGrayValue) 函数,可以得到前景的有效区域,常有人问我前景/背景的分界值dgGrayValue是如何确定的(常用的是灰度128)。
这个值的获取是有数学算法,叫最大类间方差法,即图像的前后景的平方差为最大时的值就是我们关心的分界值,对付如这样较复杂的背景非常管用,下面是具体的C#代码。
///<summary>///得到灰度图像前景背景的临界值最大类间方差法,yuanbao,2007.08///</summary>///<returns>前景背景的临界值</returns>public int GetDgGrayValue(){int[] pixelNum = new int[256]; //图象直方图,共256个点int n, n1, n2;int total; //total为总和,累计值double m1, m2, sum, csum, fmax, sb; //sb为类间方差,fmax存储最大方差值int k, t, q;int threshValue = 1; // 阈值int step = 1;//生成直方图for (int i =0; i < bmpobj.Width ; i++){for (int j = 0; j < bmpobj.Height; j++){//返回各个点的颜色,以RGB表示pixelNum[bmpobj.GetPixel(i,j).R]++; //相应的直方图加1}}//直方图平滑化for (k = 0; k <= 255; k++){total = 0;for (t = -2; t <= 2; t++) //与附近2个灰度做平滑化,t值应取较小的值{q = k + t;if (q < 0) //越界处理q = 0;if (q > 255)q = 255;total = total + pixelNum[q]; //total为总和,累计值}pixelNum[k] = (int)((float)total / 5.0 + 0.5); //平滑化,左边2个+中间1个+右边2个灰度,共5个,所以总和除以5,后面加0.5是用修正值}//求阈值sum = csum = 0.0;n = 0;//计算总的图象的点数和质量矩,为后面的计算做准备for (k = 0; k <= 255; k++){sum += (double)k * (double)pixelNum[k]; //x*f(x)质量矩,也就是每个灰度的值乘以其点数(归一化后为概率),sum为其总和n += pixelNum[k]; //n为图象总的点数,归一化后就是累积概率}fmax = -1.0; //类间方差sb不可能为负,所以fmax初始值为-1不影响计算的进行n1 = 0;for (k = 0; k < 256; k++) //对每个灰度(从0到255)计算一次分割后的类间方差sb{n1 += pixelNum[k]; //n1为在当前阈值遍前景图象的点数if (n1 == 0) { continue; } //没有分出前景后景n2 = n - n1; //n2为背景图象的点数if (n2 == 0) { break; } //n2为0表示全部都是后景图象,与n1=0情况类似,之后的遍历不可能使前景点数增加,所以此时可以退出循环csum += (double)k * pixelNum[k]; //前景的“灰度的值*其点数”的总和 m1 = csum / n1; //m1为前景的平均灰度m2 = (sum - csum) / n2; //m2为背景的平均灰度sb = (double)n1 * (double)n2 * (m1 - m2) * (m1 - m2); //sb为类间方差if (sb > fmax) //如果算出的类间方差大于前一次算出的类间方差 {fmax = sb; //fmax始终为最大类间方差(otsu)threshValue = k; //取最大类间方差时对应的灰度的k就是最佳阈值}}return threshValue;}2、如何去除干扰点/干扰线2.1 干扰点/干扰线的特征分析现在网上的大多数的验证码都是加了干扰的,一般分为干扰点和干扰线,如下图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
};
private string makeChars(Байду номын сангаас
{
var arr = new char[length];
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
{
private Random random = new Random();
private int length=6;
private char[] chars =
{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
var bytes = createImage(capcha);
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(bytes);
}
public void ProcessRequest(HttpContext context)
{
var capcha = makeChars();
context.Session["capcha"] = capcha;
using System.Web.SessionState;
namespace ZitCms1127Exams.images
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler,IRequiresSessionState
//var fileNameWithoutExt = random.Next(1, 5);
//var fileName = fileNameWithoutExt + ".jpg";
//context.Response.WriteFile(fileName);
{
get
{
return false;
}
}
}
}
for (int i = 0; i < length; i++)
{
arr[i] = chars[random.Next(chars.Length)];
}
return new string(arr);
, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q'
//context.Response.BinaryWrite();
}
private byte[] createImage(string capcha)
{
var img = new Bitmap(20 * length, 30);
var gh = Graphics.FromImage(img);
gh.FillRectangle(Brushes.BlanchedAlmond, 0, 0, 20*length, 30);
gh.DrawString(capcha, new Font("新宋体", 20, GraphicsUnit.Pixel), Brushes.BlueViolet, 3, 3);
gh.DrawLine(Pens.Teal, 0, 30, 20*length, 0);
var ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg);
var bytes = ms.ToArray();
ms.Close();
ms.Dispose();
gh.Dispose();
img.Dispose();
return bytes;
}
public bool IsReusable