JSP验证码实现代码 (1)
注册登陆界面验证码的作用及代码实现
注册登陆界⾯验证码的作⽤及代码实现简介:验证码的作⽤:主要是为了有效防⽌机器恶意注册,对某⼀个特定已注册⽤户⽤特定程序暴⼒破解⽅式进⾏不断的登陆尝试。
验证码是现在很多⽹站注册/登录时必填的,虽然对⽤户可能有点⿇烦,但是对⽹站/社区来说这个功能还是很有必要,也很重要,不少⽹站为了防⽌⽤户利⽤机器⼈⾃动注册、登录、灌⽔,都采⽤了验证码技术。
所谓验证码,就是将⼀串随机产⽣的数字或符号,⽣成⼀幅图⽚,图⽚⾥加上⼀些⼲扰象素(防⽌OCR),由⽤户⾁眼识别其中的验证码信息,输⼊表单提交⽹站验证,验证成功后才能使⽤某项功能。
在这⾥想要提醒⼤家要保护⾃⼰的密码,尽量使⽤混杂了数字、字母、符号在内的6位以上密码,不要使⽤诸如1234之类的简单密码或者与⽤户名相同、类似的密码。
任何时候在任何地⽅都不要随意设置密码,保护你⾃⼰的密码也是保护你⾃⼰,免得你的账号给⼈盗⽤给⾃⼰带来不必要的⿇烦。
常见的验证码:1.四位数字,随机的⼀数字字符串,最原始的验证码,验证作⽤⼏乎为零。
2.⽹站⽤户登录⽤的是GIF格式,⽬前常⽤的随机数字图⽚验证码。
图⽚上的字符⽐较中规中矩,验证作⽤⽐上⼀个好。
没有基本图形图像学知识的⼈,不可破!可惜读取它的程序,在CSDN使⽤它的第⼀天,好像就在论坛⾥发布了。
3.QQ⽹站⽤户登录⽤的是PNG格式,图⽚⽤的随机数字+随机⼤写英⽂字母,整个构图有点张扬,每刷新⼀次,每个字符还会变位置呢!有时候出来的图⽚,⼈眼都识别不了,厉害啊…4.MS的申请时候的是, 随机数字+随机⼤写英⽂字母+随机⼲扰像素+随机位置。
5.的Gmail注册时候的是JPG格式,随机英⽂字母+随机颜⾊+随机位置+随机长度。
6,其他各⼤论坛的是XBM格式,内容随机。
实现代码:⽣成验证码图⽚(dlimage.jsp):1 <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8" %>2 2 <%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜⾊3 3 Random random = new Random();4 4 if (fc > 255)5 5 fc = 255;6 6 if (bc > 255)7 7 bc = 255;8 8 int r = fc + random.nextInt(bc - fc);9 9 int g = fc + random.nextInt(bc - fc);10 10 int b = fc + random.nextInt(bc - fc);11 11 return new Color(r, g, b);12 12 }%>13 13 <%14 14 //设置页⾯不缓存15 15 response.setHeader("Pragma", "No-cache");16 16 response.setHeader("Cache-Control", "no-cache");17 17 response.setDateHeader("Expires", 0);18 1819 19 // 在内存中创建图象20 20 int width = 75, height = 32;21 21 BufferedImage image = new BufferedImage(width, height,22 22 BufferedImage.TYPE_INT_RGB);23 2324 24 // 获取图形上下⽂25 25 Graphics g = image.getGraphics();26 2627 27 //⽣成随机类28 28 Random random = new Random();29 2930 30 // 设定背景⾊31 31 g.setColor(getRandColor(200, 250));32 32 g.fillRect(0, 0, width, height);33 3334 34 //设定字体35 35 g.setFont(new Font("Times New Roman", Font.BOLD, 18));//18是设置的字体⼤⼩36 3637 37 //画边框38 38 g.setColor(new Color(0, 0, 0));39 39 g.drawRect(0, 0, width - 1, height -1);// 细线围成的边框范围40 4041 41 // 随机产⽣155条⼲扰线,使图象中的认证码不易被其它程序探测到42 42 g.setColor(getRandColor(160, 200));43 43 for (int i = 0; i < 155; i++) {44 44 int x = random.nextInt(width);45 45 int y = random.nextInt(height);46 46 int xl = random.nextInt(12);47 47 int yl = random.nextInt(12);48 48 g.drawLine(x, y, x + xl, y + yl);49 49 }50 5051 51 // 取随机产⽣的认证码(4位数字)52 52 String sRand = "";53 53 for (int i = 0; i < 4; i++) {54 54 String rand = null;55 55 //随机⽣成数字或者字母56 56 if (random.nextInt(10) > 5) {57 57 rand = String.valueOf((char)(random58 58 .nextInt(10) + 48));59 59 } else {60 60 rand = String.valueOf((char)(random61 61 .nextInt(26) + 65));62 62 }63 63 sRand += rand;64 64 // 将认证码显⽰到图象中65 65 g.setColor(new Color(random.nextInt(80), random66 66 .nextInt(80), random.nextInt(80)));67 67 //调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成68 68 g.drawString(rand, 15 * i + 10, 16);69 69 }70 7071 71 // 将认证码存⼊SESSION72 72 session.setAttribute("rand", sRand);73 7374 74 // 图象⽣效75 75 g.dispose();76 7677 77 // 输出图象到页⾯78 78 ImageIO.write(image, "JPEG", response.getOutputStream());79 79 %>在注册或登陆页⾯中引⽤⽣成的验证码图⽚:<!-- 验证码图⽚的⽣成--><img id="code" src="dlimage.jsp"/><a href="#" onclick="javascript:var dt=new Date();document.getElementById('code').src='dlimage.jsp?dt='+dt;"> <img alt="看不清,换⼀张"src="dlimages/1.png"/></a>(*区分字母⼤⼩写)检验验证码输⼊正确与否:<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %><html><head><title>注册出现问题</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><META HTTP-EQUIV="Pragma" CONTENT="no-cache"><META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"><META HTTP-EQUIV="Expires" CONTENT="0"></head><body><%String rand = (String)session.getAttribute("rand");<!-系统随机产⽣的验证码-->String input = request.getParameter("rand");<!--⽤户输⼊的验证码--> if (input.equals(rand)){%><!-- 验证码正确的情况下 --><jsp:forward page="dl.jsp"/> <!-- 此处重定向到的页⾯可改为登录成功后可进⼊的页⾯ --><%} else {%>系统产⽣的验证码为: <%= rand %><br/>您输⼊的验证码为: <%= input %><br/><!--验证码错误情况下-->认证失败,请返回登录界⾯,重新输验证码!<br/><a href="dl.jsp">返回登录界⾯</a><%}%></body></html>。
JSP图片验证码技巧
JSP图片验证码技巧JSP图片验证码技巧图片验证码的实现主要的技术点是如何生成一个图片。
生成图片可以使用java.awt包下的类来实现。
下面,店铺为大家搜索整理了JSP图片验证码技巧,希望能给大家带来帮助!我们先写一个简单的生成图片的程序HelloImage.java。
以下是代码部分。
package com.vogoal.test;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/***@************************** create a image*/public class HelloImage {public static void main(String[] args){BufferedImage image = new BufferedImage(80, 25,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(new Color(255,255,255));g.fillRect(0, 0, 80, 25);g.setColor(new Color(0,0,0));g.drawString("HelloImage",6,16);g.dispose();try{ImageIO.write(image, "jpeg", new File("C:\\helloImage.jpeg"));}catch(IOException e){e.printStackTrace();}}}编译后,在DOS下调用这个程序,正常情况下,会在C盘根目录下生成一张名字helloImage.jpeg为的图片。
使用JSP实现简单的用户登录注册页面示例代码解析
使⽤JSP实现简单的⽤户登录注册页⾯⽰例代码解析实验要求:将实验2中的系统⽤户登录和注册页⾯改为JSP页⾯,并部署⾃⼰的Web应⽤于Tomcat服务器中具体要求:完成登录JSP页⾯设计和注册页⾯设计在登录页⾯表单中使⽤request对象获取⽤户信息,建⽴新的JSP页⾯完成登录验证(⽤户名和密码⾃⼰指定即可)。
验证结果显⽰(如登录成功/⽤户名密码错误,可以使⽤JavaScript,也可以使⽤新的JSP页⾯)。
在注册页⾯表单中使⽤request对象获取⽤户注册信息(注册项⽬由⾃⼰指定),在新的JSP页⾯显⽰⽤户注册信息,并提⽰注册成功。
代码登录页⾯index.html<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>jsp作业</title><link href="css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="stylesheet"></head><body><nav class="navbar navbar-default"><div class="container-fluid"><div class="navbar-header"><a class="navbar-brand" href="./" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >jsp作业</a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li><a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登录</a></li></ul></div></div></nav><div class="container"><div class="jumbotron"><h1>Hello, world!</h1><p>这是⼀个jsp作业</p></div></div></body></html>登录页⾯login.jsp<%@ page contentType="text/html; charset=utf-8" language="java"%><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>登录</title><link href="css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="stylesheet"></head><body><nav class="navbar navbar-default"><div class="container-fluid"><div class="navbar-header"><a class="navbar-brand" href="./" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >jsp作业</a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li><a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登录</a></li></ul></div></div></nav><div class="container"><div class="row"><div class="col-md-4"></div><div class="col-md-4"><form class="form-signin" method="post" action="login-check.jsp"><h2 class="form-signin-heading">登录到jsp作业</h2><label for="">⽤户名</label><input type="text" name="username" id="username" class="form-control" placeholder="请输⼊⽤户名" required autofocus><br><label for="">密码</label><input type="password" name="password" id="password" class="form-control" placeholder="请输⼊密码" required><div class="checkbox"><label><input type="checkbox" value="remember-me" checked="checked"> 记住密码</label></div><button type="submit" class="btn btn-primary" id="btn-login">登录</button><a href="reg.jsp" rel="external nofollow" rel="external nofollow" class="btn btn-default">注册</a></form></div><div class="col-md-4"></div></div></body></html>登录结果页⾯login-check.jsp<%@ page contentType="text/html; charset=utf-8" language="java"%><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>登录</title><link href="css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="stylesheet"></head><body><nav class="navbar navbar-default"><div class="container-fluid"><div class="navbar-header"><a class="navbar-brand" href="./" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >jsp作业</a><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li><a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登录</a></li></ul></div></div></nav><div class="container"><div class="row"><div class="col-md-4"></div><div class="col-md-4"><form class="form-signin" method="post" action="login-check.jsp"><h2 class="form-signin-heading">登录到jsp作业</h2><label for="">⽤户名</label><input type="text" name="username" id="username" class="form-control" placeholder="请输⼊⽤户名" required autofocus><br><label for="">密码</label><input type="password" name="password" id="password" class="form-control" placeholder="请输⼊密码" required><div class="checkbox"><label><input type="checkbox" value="remember-me" checked="checked"> 记住密码</label></div><button type="submit" class="btn btn-primary" id="btn-login">登录</button><a href="reg.jsp" rel="external nofollow" rel="external nofollow" class="btn btn-default">注册</a></form></div><div class="col-md-4"></div></div></body></html>注册页⾯reg.jsp<%@ page contentType="text/html; charset=utf-8" language="java"%><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>注册</title><link href="css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="stylesheet"></head><body><nav class="navbar navbar-default"><div class="container-fluid"><div class="navbar-header"><a class="navbar-brand" href="./" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >jsp作业</a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li><a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登录</a></li></ul></div></div></nav><div class="container"><div class="row"><div class="col-md-4"></div><div class="col-md-4"><form class="form-signin" action="reg-submit.jsp" method="post"><h2 class="form-signin-heading">注册到jsp作业</h2><div id="info"></div><label for="">⽤户名</label><input type="text" name="username" id="username" class="form-control" placeholder="请输⼊⽤户名" required autofocus><br><label for="">密码</label><input type="password" name="password" id="password" class="form-control" placeholder="请输⼊密码" required><br><label for="">重复密码</label><input type="password" name="password2" id="password2" class="form-control" placeholder="请再次输⼊密码" required maxLength="16"><br><button type="submit" class="btn btn-primary" id="btn-reg">注册</button><a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-default" id="btn-reg">返回登录</a> </form></div><div class="col-md-4"></div></div></body></html>注册结果页⾯reg-submit.jsp<%@ page contentType="text/html; charset=utf-8" language="java"%><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>结果</title><link href="css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="stylesheet"></head><body><nav class="navbar navbar-default"><div class="container-fluid"><div class="navbar-header"><a class="navbar-brand" href="./" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >jsp作业</a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li><a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登录</a></li></ul></div></div></nav><div class="container"><% String username = request.getParameter("username");String password = request.getParameter("password");String password2 = request.getParameter("password2");%><%if(password.equals(password2)){out.println("<div class='alert alert-success' role='alert'>注册成功</div>");out.println("<ul class='list-group'>");out.println("<li class='list-group-item'>⽤户名:" + username + "</li>");out.println("<li class='list-group-item'>密码:" + password + "</li>");out.println("</ul>");else{out.println("<div class='alert alert-danger' role='alert'>两次密码输⼊不⼀致,请重新输⼊</div>"); }%><!-- <%=username %><%=password %><%=password2 %> --></div>效果到此这篇关于使⽤JSP实现简单的⽤户登录注册页⾯⽰例代码解析的⽂章就介绍到这了,更多相关JSP实现简单的⽤户登录注册页⾯内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
php验证码实例
php验证码实例
一、概述
验证码(CAPTCHA)是一种用于验证用户是否为人类的技术,通过向用户显示一些扭曲的字符或完成一些图像识别任务来确保不是机器人提交表单。
在PHP中,我们可以使用GD库来创建自定义的验证码。
本文将介绍一个简单的PHP验证码实例,包括生成验证码图像、验证用户输入和防止验证码被恶意破解的方法。
二、准备工作
在开始之前,请确保你的PHP环境已启用GD库。
你可以通过在PHP配置文件(php.ini)中取消注释以下行来启用GD库:
然后重启Web服务器以使更改生效。
三、验证码生成
下面是一个简单的PHP验证码生成示例代码:
在上述代码中,我们使用GD库创建了一个指定宽度和高度的空白图像,并随机生成了一些扭曲的字符。
我们使用imagettftext函数将字符绘制到图像上,并使用imagepng函数将图像输出为PNG格式。
最后,我们使用imagedestroy函数销毁图像资源。
你可以根据需要调整代码中的参数,例如更改验证码长度、字体样式等。
四、验证码验证与防止恶意破解
在生成验证码后,我们需要验证用户输入的验证码是否正确。
以下是一个简单的验证码验证示例代码:。
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的演示项目代码。
jsp使用md5加密进行登录验证
jsp使用md5加密进行登录验证JSP(JavaServer Pages)是一种用于动态生成HTML页面的技术,而MD5(Message Digest Algorithm 5)是一种常用的加密算法。
在使用JSP进行登录验证时,可以结合MD5算法对用户密码进行加密存储,提高安全性。
下面我将为你详细介绍如何在JSP中使用MD5加密进行登录验证。
1.导入MD5算法库2.加密用户密码在用户注册或者保存密码的过程中,将用户输入的密码通过MD5算法进行加密,然后将加密后的密文保存到数据库中。
可以在JSP页面中编写一个函数,调用MD5算法库实现密码的加密过程。
例如:```javaString plainPassword = request.getParameter("password");String encryptedPassword = encryptPassword(plainPassword);//加密函数public String encryptPassword(String password)tryMessageDigest md = MessageDigest.getInstance("MD5");byte[] messageDigest = md.digest(password.getBytes();StringBuilder sb = new StringBuilder(;for (byte b : messageDigest)sb.append(String.format("%02x", b));}return sb.toString(;} catch (NoSuchAlgorithmException e)e.printStackTrace(;}return null;```3.登录验证在登录过程中,将用户输入的密码同样进行MD5加密,然后与存储在数据库中的密文进行比对。
jsp页面验证码
AJAX+jsp无刷新验证码实例(完整代码)1.login.jsp<%@ pagelanguage="java"contentType="text/html;charset=gb2312"import = "java.util.*"import = "java.sql.*"import = "java.text.*"import = "java.io.*"%><%@ include file="../conn.jsp"%><%request.setCharacterEncoding("gb2312");%><%String username=request.getParameter("name");String pass=request.getParameter("pws");String num=request.getParameter("num");String random=(String)session.getAttribute("random");if(num!=null&&random!=null){if(num.equals(random)){Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("select * from admin where admin='"+username+"' and pass='"+pass+"'");if(rs.next()){String id=rs.getString("id");session.setAttribute("id",id);response.sendRedirect("admin.jsp");}rs.close();stmt.close();conn.close();}}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>两岸咖啡</title><link href="../include/style.css" rel="stylesheet" type="text/css" /><script src="net.js"></script><script type="text/javascript">var times=0;function subform(){var gtext=this.req.responseText;var info=document.getElementById("info");if(gtext.indexOf("validate_successful")!=-1){//info.innerHTML="<font color=green>验证码通过</font>";document.forms["form"].submit();//当得到的值表示合法,则验证码通过。
生成验证码的几种方式
⽣成验证码的⼏种⽅式⽣成验证码的⼏种⽅式1,在jsp页⾯中直接⽣成验证码image.jsp源码://image.jsp<%@ page contentType="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"pageEncoding="GBK"%><%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜⾊Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}%><%//设置页⾯不缓存response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);// 在内存中创建图象// 通过这⾥可以修改图⽚⼤⼩int width = 85, height = 23;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下⽂// g相当于笔Graphics g = image.getGraphics();//⽣成随机类Random random = new Random();// 设定背景⾊g.setColor(getRandColor(200, 250));// 画⼀个实⼼的长⽅,作为北京g.fillRect(0, 0, width, height);//设定字体g.setFont(new Font("⿊体", Font.PLAIN, 18));//画边框g.setColor(Color.BLUE);g.drawRect(0,0,width-1,height-1);// 随机产⽣155条⼲扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 155; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产⽣的认证码(4位数字)//String rand = request.getParameter("rand");//rand = rand.substring(0,rand.indexOf("."));String sRand = "";// 如果要使⽤中⽂,必须定义字库,可以使⽤数组进⾏定义// 这⾥直接写中⽂会出乱码,必须将中⽂转换为unicode编码String[] str = { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K","L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X","Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j","k", "m", "n", "p", "s", "t", "u", "v", "w", "x", "y", "z","1", "2", "3", "4", "5", "6", "7", "8", "9" };for (int i = 0; i < 5; i++) {String rand = str[random.nextInt(str.length)];sRand += rand;// 将认证码显⽰到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));//调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成 g.drawString(rand, 16 * i + 6, 19);}// 将认证码存⼊SESSIONsession.setAttribute("rand", sRand);// 图象⽣效g.dispose();// 输出图象到页⾯ImageIO.write(image, "JPEG", response.getOutputStream());out.clear();out = pageContext.pushBody();%>login.jsp源码(使⽤验证码的页⾯)://使⽤验证码的页⾯login.jsp<%@ page contentType="text/html" pageEncoding="GBK"%><html><head><title>登陆页⾯</title><script>function reloadImage() {document.getElementById('identity').src = 'image.jsp?ts=' + new Date().getTime();}</script></head><body><center><%// 乱码解决request.setCharacterEncoding("GBK");%><h1>登陆程序</h1><hr><%=request.getAttribute("info") != null ? request.getAttribute("info") : ""%><form action="check.jsp" method="post">⽤户ID:<input type="text" name="mid"><br>密码:<input type="password" name="password"><br>验证码:<input type="text" name="code" maxlength="5" size="5"><img src="image.jsp" id="identity" onclick="reloadImage()" title="看不清,点击换⼀张"> <br><input type="submit" value="登陆"><input type="reset" value="重置"></form></center></body></html>效果如下:2,使⽤Servlet⽣成验证码IdentityServlet.java源码://IdentityServlet.java代码如下:package com.helloweenvsfei.servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class IdentityServlet extends HttpServlet {/****/private static final long serialVersionUID = -479885884254942306L;public static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };public static Random random = new Random();public static String getRandomString() {StringBuffer buffer = new StringBuffer();for (int i = 0; i < 6; i++) {buffer.append(CHARS[random.nextInt(CHARS.length)]);}return buffer.toString();}public static Color getRandomColor() {return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));}public static Color getReverseColor(Color c) {return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getBlue());}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/jpeg");String randomString = getRandomString();request.getSession(true).setAttribute("randomString", randomString);int width = 100;int height = 30;Color color = getRandomColor();Color reverse = getReverseColor(color);BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = bi.createGraphics();g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));g.setColor(color);g.fillRect(0, 0, width, height);g.setColor(reverse);g.drawString(randomString, 18, 20);for (int i = 0, n = random.nextInt(100); i < n; i++) {g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);}// 转成JPEG格式ServletOutputStream out = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(bi);out.flush();}public static void main(String[] args) {System.out.println(getRandomString());}}Web..xml源码://Web.xml的配置为:<servlet><servlet-name>IdentityServlet</servlet-name><servlet-class>com.helloweenvsfei.servlet.IdentityServlet</servlet-class></servlet><servlet-mapping><servlet-name>IdentityServlet</servlet-name><url-pattern>/servlet/IdentityServlet</url-pattern></servlet-mapping>identity.html源码://测试页⾯identity.html为:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>identity.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=GB18030"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body><script>function reloadImage() {document.getElementById('btn').disabled = true;document.getElementById('identity').src='servlet/IdentityServlet?ts=' + new Date().getTime(); }</script><img src="servlet/IdentityServlet" id="identity" onload="btn.disabled = false; "/> <input type=button value=" 换个图⽚ " onclick="reloadImage()" id="btn"></body></html>3,在Struts2应⽤中⽣成验证码RandomNumUtil.java源码://RandomNumUtil.javapackage org.ml.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;public class RandomNumUtil {public static final char[] CHARS = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','2', '3', '4', '5', '6', '7', '8','9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm','n', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};private ByteArrayInputStream image;// 图像private String str;// 验证码/*** 构造⽅法调⽤初始化属性⽅法*/private RandomNumUtil() {init();}/*** 取得RandomNumUtil实例*/public static RandomNumUtil Instance() {return new RandomNumUtil();}/*** 取得验证码图⽚*/public ByteArrayInputStream getImage() {return this.image;}/*** 取得图⽚的验证码*/public String getString() {return this.str;}/*** 初始化属性否具体⽅法*/private void init() {// 在内存中创建图象int width = 85, height = 18;//设置图形的⾼度和宽度,以及RGB类型BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下⽂Graphics g = image.getGraphics();// ⽣成随机类Random random = new Random();// 设定背景⾊g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);// 设定字体g.setFont(new Font("Times New Roman", Font.PLAIN, 18));// 随机产⽣255条⼲扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 255; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产⽣的认证码(6位数字)StringBuffer sRand = new StringBuffer();for (int i = 0; i < 6; i++) {String rand = String.valueOf(CHARS[random.nextInt(CHARS.length-1)]);//从字符数组中随机产⽣⼀个字符sRand.append(rand);// 将认证码显⽰到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));// 调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成g.drawString(rand, 13 * i + 6, 17);}// 赋值验证码this.str = sRand.toString();// 图象⽣效g.dispose();//下⾯将⽣成的图形转变为图⽚ByteArrayOutputStream output = new ByteArrayOutputStream();ByteArrayInputStream input = null;try {ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);ImageIO.write(image, "JPEG", imageOut);//将图像按JPEG格式写⼊到imageOut中,即存⼊到output的字节流中 imageOut.close();//关闭写⼊流input = new ByteArrayInputStream(output.toByteArray());//input读取output中的图像信息} catch (Exception e) {System.out.println("验证码图⽚产⽣出现错误:" + e.toString());}this.image = input;/* 赋值图像 */}/** 给定范围获得随机颜⾊*/private Color getRandColor(int fc, int bc) {Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}}RandomAction.java源码://RandomAction.java的代码:package org.ml.action;import java.io.ByteArrayInputStream;import org.ml.util.RandomNumUtil;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class RandomAction extends ActionSupport {private ByteArrayInputStream inputStream;public String execute() throws Exception {RandomNumUtil rdnu = RandomNumUtil.Instance();//取得随机验证码产⽣类的对象this.setInputStream(rdnu.getImage());// 取得带有随机字符串的图⽚ActionContext.getContext().getSession().put("random", rdnu.getString());// 取得随机字符串放⼊HttpSession return SUCCESS;}public void setInputStream(ByteArrayInputStream inputStream) {this.inputStream = inputStream;}public ByteArrayInputStream getInputStream() {return inputStream;}}struts.xml配置://struts.xml配置为:<!-- Random验证码 --><action name="rand" class="org.ml.action.RandomAction"><result type="stream" name="success"><param name="contentType">image/JPEG</param><param name="inputName">inputStream</param></result></action>HTML中的表单源码://HTML中的表单代码为:<tr height="35"><td width="14%" class="top_hui_text"><span class="login_txt">验证码:</span></td><td colspan="2" class="top_hui_text"><input type="text" name="rand" id="rand" size="6"maxlength="6"><script type="text/javascript">function changeValidateCode(obj) {//获取当前的时间作为参数,⽆具体意义var timenow = new Date().getTime();//每次请求需要⼀个不同的参数,否则可能会返回同样的验证码//这和浏览器的缓存机制有关系,也可以把页⾯设置为不缓存,这样就不⽤这个参数了。
Jsp学生信息管理系统登录验证全代码
1.jsp登录界面 Login.jspNo.:00000000000000587 <%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type"content="text/html;charset=UTF-8"><title>用户登录界面</title></head><form action="LoginServlet"method="post"><body bgcolor="blue"><marquee direction="right"onmouseover="stop()"onmouseout="start()"style="font-family: 楷体_GB2312"><p><font size="10px"color="red">学生信息信息管理系统</font></p></marquee><table align=center width="237"><tr><td><table width=100%><tr><td colspan=6><font size=2><div id="b2bContent"style="FILTER: revealTrans(Duration = 1, Transition =</font></td></tr><tr><td align=center STYLE='cursor: hand'><font size=2><div class="b2bbutton"id="bt0"onclick="javascript:showPage(0);clearTimeout(theTimer);theTimer=s etTimeout('turnPage()',speed);checkBt();">1</div></font></td><td align=center STYLE='cursor: hand'><font size=2><div class="b2bbutton"id="bt1"onclick="javascript:showPage(1);clearTimeout(theTimer);theTimer=s etTimeout('turnPage()',speed);checkBt();">2</div></font></td><td align=center STYLE='cursor: hand'><font size=2><div class="b2bbutton"id="bt2"onclick="javascript:showPage(2);clearTimeout(theTimer);theTimer=s etTimeout('turnPage()',speed);checkBt();">3</div></font></td><td align=center STYLE='cursor: hand'><font size=2><div class="b2bbutton"id="bt3"onclick="javascript:showPage(3);clearTimeout(theTimer);theTimer=s etTimeout('turnPage()',speed);checkBt();">4</div></font></td><td align=center STYLE='cursor: hand'><font size=2><div class="b2bbutton"id="bt4"onclick="javascript:showPage(4);clearTimeout(theTimer);theTimer=s etTimeout('turnPage()',speed);checkBt();">5</div></font></td><td align=center STYLE='cursor: hand'><font size=2><div class="b2bbutton"id="bt5"onclick="javascript:showPage(5);clearTimeout(theTimer);theTimer=s etTimeout('turnPage()',speed);checkBt();">6</div></font></td></tr></table><script language="javascript">b2bStr = new Array();b2bStr[0]= "<div style='float:left; width:100%;overflow:hidden;'><a href=1.gif target=_blank><img src=1.gif width=214px height=145px border=0></a><br><a target=_blank title=太阳岛公园一角 href=1.gif>太阳岛公园一角</a></div>";width:100%;overflow:hidden;'><a href=2.gif target=_blank><img src=2.gif width=214px height=145px border=0></a><br><a target=_blank title=太阳岛公园湖光山色 href=2.gif>太阳岛公园湖光山色</a></div>";b2bStr[2] = "<div style='float:left; width:100%;overflow:hidden;'><a href=3.gif target=_blank><img src=3.gif width=214px height=145px border=0></a><br><a target=_blank title=哈尔滨雪雕 href=3.gif>哈尔滨雪雕</a></div>";b2bStr[3] = "<div style='float:left; width:100%;overflow:hidden;'><a href=4.gif target=_blank><img src=4.gif width=214px height=145px border=0></a><br><a target=_blank title=镜泊湖 href=4.gif>镜泊湖</a></div>";b2bStr[4] = "<div style='float:left; width:100%;overflow:hidden;'><a href=5.gif target=_blank><img src=5.gif width=214px height=145px border=0></a><br><a target=_blank title=太阳岛公园瀑布 href=5.gif>太阳岛公园瀑布</a></div>";b2bStr[5] = "<div style='float:left; width:100%;overflow:hidden;'><a href=6.gif target=_blank><img src=6.gif width=214px height=145px border=0></a><br><a target=_blank title=镜泊湖夜色 href=6.gif>镜泊湖夜色</a></div>";var page=0;var speed=3000;function showPage(id){setTransition();b2bContent.innerHTML=b2bStr[id];b2bContent.filters.revealTrans.play();}function turnPage(){showPage(page);theTimer=setTimeout("turnPage()", speed);checkBt();page++;if(page>=6) page=0;}function checkBt(){for(var i=0;i<6;i++){btObj=eval('bt'+i);if(page==i){btObj.style.color='#FFFFFF';btObj.style.backgroundCol or='#FF781C';}else{btObj.style.color='#000000';btObj.style.backgroundColor='#F7 F7F7';}}}function setTransition(){b2bContent.filters.revealTrans.Transition=Math.round(Math.random( )*23);b2bContent.filters.revealTrans.apply();}turnPage();</script></TD></TR></table><hr color="green"width="540"><table align="center"><tr><td>用户名:<input type="text"name="username"size="8" maxlength="6"></td></tr><tr><td>密 码:<input type="password" name="password"size="10"maxlength="6"></td></tr><tr><td><input type="submit"value="登录"> <input type="reset"value="取消"></td></table></form></body></html>2.java代码(1)User.Java 定义的属性和数据库中的字段相对应package com.softeem.dt;public class User {private int id;private String username;private String password;private String xh;private String college;public int getId(){return id;}public void setId(int id){this.id = id;}public String getUsername() {return username;}ername = username;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}public String getXh() {return xh;}public void setXh(String xh) {this.xh = xh;}public String getCollege() {return college;}public void setCollege(String college) { this.college = college;}}(2)UserDAO.java 操作数据库tb_user,验证用户登录package com.softeem.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.softeem.db.DBManager;import er;public class UserDAO {/***验证用户登录*@return*/public boolean checkDenglu(User user) {boolean flag = false;// 获得数据库连接Connection conn = DBManager.getConnection();// 用select * from查询数据库中的所有字段String sql = "select count(*) from tb_user where username=? and password=?";try {PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, user.getUsername());pst.setString(2, user.getPassword());ResultSet rs = pst.executeQuery();while (rs.next()) {int count = rs.getInt(1);//用count和0比较,若大于0表示该用户存在,否则不存在if(count > 0){flag = true;}}} catch (SQLException e) {e.printStackTrace();}return flag;}}3.LoginServlet,点击登录跳转到服务器端package com.softeem.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import er;/*** Servlet implementation class LoginServlet*/public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public LoginServlet() {super();}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super.doGet(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取表单数据//处理乱码request.setCharacterEncoding("utf-8");String username = request.getParameter("username");String password = request.getParameter("password");//封装到user对象中User user = new User();user.setUsername(username);user.setPassword(password);//调用dao的checkLogin方法UserDAO dao = new UserDAO();boolean flag = dao.checkLogin(user);String message = null;String path = null;if(flag){message = "登录成功";path="success.jsp";request.getSession().setAttribute("user", user);}else{message ="对不起密码错误,请重新输入!";path="fail.jsp";}//response返回messageresponse.setCharacterEncoding("utf-8");response.getWriter().write(message);*///属于服务器跳转,浏览器地址栏没有发生改变request.getRequestDispatcher(path).forward(request,response);}}青年人首先要树雄心,立大志,其次就要决心作一个有用的人才。
实现带有验证码的简易登录页面
实现带有验证码的简易登录页⾯需求: 1. 访问带有验证码的登录页⾯login.jsp 2. ⽤户输⼊⽤户名,密码以及验证码。
* 如果⽤户名和密码输⼊有误,跳转登录页⾯,提⽰:⽤户名或密码错误 * 如果验证码输⼊有误,跳转登录页⾯,提⽰:验证码错误 * 如果全部输⼊正确,则跳转到主页success.jsp,显⽰:⽤户名,欢迎您login.jsp页⾯代码:<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>login</title><script> /*分析:点击图⽚,需要换⼀张1.给图⽚绑定单击事件2.重新设置图⽚的src属性值 */ window.onload = function(){ document.getElementById("img").onclick = function(){ this.src="/yanzhengma_war_exploded/checkCodeServlet?time="+new Date().getTime(); } }</script> <style>div{color: red;}</style></head><body><form action="/yanzhengma_war_exploded/loginServlet" method="post"><table><tr><td>⽤户名</td><td><input type="text" name="username"></td></tr><tr><td>密码</td><td><input type="password" name="password"></td></tr><tr><td>验证码</td><td><input type="text" name="checkCode"></td></tr><tr><td colspan="2"><img id="img" src="/yanzhengma_war_exploded/checkCodeServlet"></td></tr><tr><td colspan="2"><input type="submit" value="登录"></td></tr></table></form><div><%=request.getAttribute("cc_error") == null ? "" : request.getAttribute("cc_error")%></div><div><%=request.getAttribute("login_error") == null ? "" : request.getAttribute("login_error") %></div></body></html>⽣成验证码的代码:@WebServlet("/checkCodeServlet")public class CheckCodeServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置验证码框的宽、⾼int width = 100;int height = 50;//1.创建⼀对象,在内存中图⽚(验证码图⽚对象)BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//2.美化图⽚//2.1 填充背景⾊Graphics g = image.getGraphics();//画笔对象g.setColor(Color.PINK);//设置画笔颜⾊g.fillRect(0,0,width,height);//2.2画边框g.setColor(Color.BLUE);//宽⾼不减⼀,会有⼀半的边框样式体现不出来g.drawRect(0,0,width - 1,height - 1);String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";//⽣成随机⾓标Random ran = new Random();StringBuilder sb = new StringBuilder();//验证码有4个数,故循环四次for (int i = 1; i <= 4; i++) {int index = ran.nextInt(str.length());//获取字符char ch = str.charAt(index);//随机字符sb.append(ch);//2.3写验证码g.drawString(ch+"",width/5*i,height/2);}String checkCode_session = sb.toString();//将验证码存⼊sessionrequest.getSession().setAttribute("checkCode_session",checkCode_session);//2.4画⼲扰线g.setColor(Color.GREEN);//随机⽣成坐标点for (int i = 0; i < 10; i++) {int x1 = ran.nextInt(width);int x2 = ran.nextInt(width);int y1 = ran.nextInt(height);int y2 = ran.nextInt(height);//两点确定⼀线,点(x1,y1)到点(x2,y2)形成⼀条线g.drawLine(x1,y1,x2,y2);}//3.将图⽚输出到页⾯展⽰ImageIO.write(image,"jpg",response.getOutputStream());loginServlet代码:(⽤户的登录涉及到数据库的操作,此处将DAO省去,简化编写)@WebServlet("/loginServlet")public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.设置request编码request.setCharacterEncoding("utf-8");//2.获取参数String username = request.getParameter("username");String password = request.getParameter("password");String checkCode = request.getParameter("checkCode");//3.先获取⽣成的验证码HttpSession session = request.getSession();String checkCode_session = (String) session.getAttribute("checkCode_session");//删除session中存储的验证码,为了防⽌返回登陆页⾯后原验证码依旧可⽤session.removeAttribute("checkCode_session");//3.先判断验证码是否正确if(checkCode_session!= null && checkCode_session.equalsIgnoreCase(checkCode)){//忽略⼤⼩写⽐较//验证码正确//判断⽤户名和密码是否⼀致if("zhangsan".equals(username) && "123".equals(password)){//需要调⽤UserDao查询数据库//登录成功//存储信息,⽤户信息session.setAttribute("user",username);//重定向到success.jspresponse.sendRedirect(request.getContextPath()+"/success.jsp");}else{//登录失败//存储提⽰信息到requestrequest.setAttribute("login_error","⽤户名或密码错误");//转发到登录页⾯request.getRequestDispatcher("/login.jsp").forward(request,response);}}else{//验证码不⼀致//存储提⽰信息到requestrequest.setAttribute("cc_error","验证码错误");//转发到登录页⾯request.getRequestDispatcher("/login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response);}}success.jsp页⾯代码:<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><h1><%=request.getSession().getAttribute("user")%>,欢迎您</h1></body></html>。
验证码讲解代码
<dd>验证码:<input type="text"name="yzm"class="text yzm"/><img src="code.php"/></dd>=================================================================================== ===============================================Code.php页面<?phpsession_start();//随机4个16进制的随机数for($i=0;$i<4;$i++){$_nmsg.=dechex(mt_rand(0, 15));}//随机码保存在session里,可以持久$_SESSION['code']=$_nmsg;//创建一张图像$width=75;$height=25;$_img=imagecreatetruecolor($width, $height);//imagecreatetruecolor -- 新建一个真彩色图像,resource imagecreatetruecolor ( int x_size, int y_size )//将图片变成白色$_white=imagecolorallocate($_img,255,255,255);//imagecolorallocate -- 为一幅图像分配颜色,int imagecolorallocate ( resource image, int red, int green, int blue )//填充背景imagefill($_img,0,0,$_white);//imagefill -- 区域填充,bool imagefill ( resource image, int x, int y, int color )//创建黑色边框$_flag=false;if($_flag){$_black=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagerectangle($_img,0,0,$width-1,$height-1,$_black);//imagerectangle -- 画一个矩形,bool imagerectangle ( resource image, int x1, int y1, int x2, int y2, int col )}//随即画6线条for($i=0;$i<6;$i++){$_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,25 5));imageline($_img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand( 0,$height),$_rnd_color);//imageline -- 画一条线段,bool imageline ( resource image, int x1, int y1, int x2, int y2, int color )}//随即雪花for($i=0;$i<100;$i++){$_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand( 200,255));imagestring($_img ,1,mt_rand(1,$width),mt_rand(1,$height),'*', $_rnd_color);//imagestring -- 水平地画一行字符串,bool imagestring ( resource image, int font, int x, int y, string s, int col )}//输出验证码for($i=0;$i<strlen($_SESSION['code']);$i++){$_rnd_color=imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,20 0));imagestring($_img,mt_rand(4,5),$i*$width/4+mt_rand(1,10),mt_rand(1,$height/2),$ _SESSION['code'][$i],$_rnd_color);}//输出图像header('Content-Type:image/pnd');imagepng($_img);//imagepng -- 以PNG 格式将图像输出到浏览器或文件,bool imagepng ( resource image [, string filename] )//销毁图像imagedestroy($_img);//imagedestroy -- 销毁一图像,bool imagedestroy ( resource image )?>。
js常用正则表达式表单验证代码(最全面)
js 常用正则表达式表单验证代码方法一:var re=/正则表达式/;re.test($("txtid").val())方法二:$("txtid").val.match(/正则表达式/);附:验证数字的正则表达式集(转载)验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$验证非零的正整数:^\+?[1-9][0-9]*$验证非零的负整数:^\-[1-9][0-9]*$验证非负整数(正整数+ 0)^\d+$验证非正整数(负整数+ 0)^((-\d+)|(0+))$验证长度为3的字符:^.{3}$验证由26个英文字母组成的字符串:^[A-Za-z]+$验证由26个大写英文字母组成的字符串:^[A-Z]+$验证由26个小写英文字母组成的字符串:^[a-z]+$验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$验证由数字、26个英文字母或者下划线组成的字符串:^\w+$验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\" 等字符:[^%&',;=?$\x22]+验证汉字:^[\u4e00-\u9fa5],{0,}$验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
常用的js验证数字
常用的js验证数字,电话号码,传真,邮箱,手机号码,邮编,日期1、数字function testisNum(object){var s =document.getElementById(object.id).value;if(s!=""){if(isNaN(s)){alert("请输入数字");object.value="";object.focus();}}}2、电话号码,传真//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”function isT el(object){//国家代码(2到3位)-区号(2到3位)-电话号码(7到8位)-分机号(3位)"var s =document.getElementById(object.id).value;var pattern =/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;//var pattern=/(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;if(s!=""){if(!pattern.exec(s)){alert('请输入正确的电话号码:电话号码格式为国家代码(2到3位)-区号(2到3位)-电话号码(7到8位)-分机号(3位)"');object.value="";object.focus();}}}3、邮箱function Check(object){var s =document.getElementById(object.id).value;var pattern =/^[a-zA-Z0-9_\-]{1,}@[a-zA-Z0-9_\-]{1,}\.[a-zA-Z0-9_\-.]{1,}$/;if(s!=""){if(!pattern.exec(s)){alert('请输入正确的邮箱地址');object.value="";object.focus();}}}4、手机号码//校验手机号码:必须以数字开头,除数字外,可含有“-”function isMobile(object){var s =document.getElementById(object.id).value;var reg0 = /^13\d{5,9}$/;var reg1 = /^153\d{4,8}$/;var reg2 = /^159\d{4,8}$/;var reg3 = /^0\d{10,11}$/;var my = false;if (reg0.test(s))my=true;if (reg1.test(s))my=true;if (reg2.test(s))my=true;if (reg3.test(s))my=true;if(s!=""){if (!my){alert('请输入正确的手机号码');object.value="";object.focus();}}}//校验日期function isdate(object){var s =document.getElementById(object.id).value;var pattern=/^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2] [0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\ /\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[ \-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/;if(s!=""){if(!pattern.exec(s)){alert('请输入正确的日期');object.value="";object.focus();}}}5、邮编//校验(国内)邮政编码function isPostalCode(object){var s =document.getElementById(object.id).value;var pattern =/^[0-9]{6}$/;if(s!=""){if(!pattern.exec(s)){alert('请输入正确的邮政编码');object.value="";object.focus();}}}6、日期//校验日期function isdate(object){var s =document.getElementById(object.id).value;var pattern=/^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2] [0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\ /\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[ \-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/;if(s!=""){if(!pattern.exec(s)){alert('请输入正确的日期');object.value="";object.focus();}}}一、清除空格String.prototype.trim = function()//去除空格{return this.replace(/(^[\s]*)|([\s]*$)/g, "");}二、检查一个字符串是否包含特殊字符/*功能:检查传入的字符串中是否包含特殊字符参数:str-要检查的字符串输出:"1"表示字符串不包含特殊字符,验证成功;否则返回"0"相关说明:空字符串可通过验证*/function CheckSpecialString(str){StringFilter = new Array ("'" ,"\\", ".", ",", ";", "/","<","}","%","*");//可以向StringFilter中添加要过滤的字符i=StringFilter.length;j=str.length;for (k=0;k<i;k++){for (m=0;m<j;m++){temp1=str.charAt(m);temp2=StringFilter[k];if (temp1==temp2){return 0;}}}return 1;}三、检查一个字符串是否为中文/*功能:检查传入的字符串是否为中文参数:str-要检查的字符串输出:true表示验证成功,false表示验证不成功相关说明:空字符串可以通过验证,且包含中文的特殊字符*/function IsChineseString(str){var pattern_cn = /^([\u4E00-\u9FA5]|[\uFE30-\uFFA0])*$/gi;if(pattern_cn.test(str)){return true;}else{return false;}}四、检查一个字符串中是否包含全角空格/*功能:检查传入的字符串是否为中文参数:str-要检查的字符串输出:true表示验证成功(不饮食全解空格),false表示验证不成功相关说明:空字符串可以通过验证*/function FullSpace(str){var Reg = /\/;var booleanT = Reg.test(str);if (booleanT == true){return false;}return true;}五、比较两个字符串形式的日期大小/*比较两个字符串形式的日期大小功能:比较两个字符串形式的日期大小参数:firstDate-要检查日期字符串,字符串形式为"2007/05/08"或“2007-05-08”secondDate-要检查的日期字符串,字符串形式为"2007/05/08"或“2007-05-08”输出:true表示第一个日期大于第二个日期,false表示第二个日期大于或等于第一个日期相关说明:空字符串可以通过验证*/function DateExample(firstDate,secondDate){if ( firstDate.indexOf("-") > 0){firstDate = firstDate.replace(/-/g,"/") ;}if ( secondDate.indexOf("-") > 0){secondDate = secondDate.replace(/-/g,"/") ;}var FirstDate = new Date(Date.parse(firstDate)) ;var SecondDate = new Date(Date.parse(secondDate)) ;alert( FirstDate > SecondDate );}六、检查一个字符串是否为一个IP地地/*功能:检查传入的字符串是否为一个IP地址参数:str-要检查的字符串输出:true表示验证成功,false表示验证不成功相关说明:空字符串不可以通过验证*/function CheckIP(str){var Reg =/^([1-9]|[1-9]\d|1\d{2}|2[0-1]\d|22[0-3])(\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}$/;var booleanT = Reg.test(str);return booleanT ;}七、整除函数function Div(exp1, exp2){var n1 = Math.round(exp1); //四舍五入var n2 = Math.round(exp2); //四舍五入var rslt = n1 / n2; //除if (rslt >= 0){rslt = Math.floor(rslt); //返回值为小于等于其数值参数的最大整数值。
验证码的原理及实现方法
验证码的原理及实现方法
一、验证码的原理
验证码,又叫做认证码或者动态口令,是一种动态的密码使用的机制。
简单来说,它是一种随机生成的临时密码,用于验证用户或者系统的身份
确认,主要是用来防止恶意攻击的一种技术。
验证码的最主要的作用就是用于身份识别、保护系统安全性,它需要
用户在使用系统之前先输入一定的字符,才能继续使用系统,用以判断用
户的认证信息,避免恶意的用户登陆系统。
而在验证码输入的过程中,用
户需要正确输入验证码,验证码的文字内容一般由数字或者字母组成,且
每次都是不同的,注意,验证码是不区分大小写字母的,这样,它就可以
防止机器自动登录,即使有人知道用户名和密码也需要输入新的验证码,
才能进行登录,这样就可以有效的防止恶意攻击。
二、实现方法
(1)采用复杂而随机的图形和数字
在系统实现验证码技术时,可以采用复杂而随机的图形和数字来生成
验证码,这样可以降低攻击者破解验证码的可能性。
当用户来到网站时,
系统会生成一个随机的验证码,同时系统会将此验证码与该用户的身份相
关联。
Java开发完整短信验证码功能的全过程
Java开发完整短信验证码功能的全过程⽬录前⾔闲扯使⽤技术所需知识储备实现步骤总结前⾔现代互联⽹项⽬中,很多场景下都需要使⽤⼀种叫做验证码的技术,常⽤的有图⽚验证码,滑块验证码,短信验证码等,本⽂章描述的就是短信验证码的⼀个使⽤教程,从0开始完成⼀个验证码功能的开发。
闲扯是不是看着导语很⾼⼤上我才不会说是因为最近不知道写啥才⽔的⼀篇⽂章但是嘛,我要争取做到⽔⽂章也⽔的特别认真,让读者可以根据本⽂的教程实现验证码功能使⽤技术Java:所使⽤的后端技术JSP:所使⽤的前端技术阿⾥云短信服务:发送短信Redis:存储验证码实现超时过期以及验证功能所需知识储备Java基础知识Ajax基础Redis基础实现步骤⾸先我们需要找⼀个提供短信服务的商户,随便在哪⾥找都⼀样,为了避免⼴告嫌疑我就不在此推荐了,购买商家的短信服务后会拿到⼀些参数,⽐如说请求地址,请求⽅式,token等,如下图所⽰然后找到接⼝的调⽤样例,按照调⽤样例传相应的参数即可实现短信发送这步没什么说的,就是调⽤API,完成这步之后,就可以发送短信了,当然这个是第⼀步,距离正式完成还差很远。
这⾥有⼀个⼩的细节,就是我们发送短信,其中这个验证码是我们⾃⼰⽣成的,然后以参数的形式传给接⼝,所以这⾥的验证码需要我们⾃⼰产⽣贴⼀段产⽣验证码的代码// 仅供参考根据业务去⽣成即可// ⽣成验证码StringBuilder builder = new StringBuilder();for (int i = 0; i < 6; i++) {int random = (int) (Math.random() * 10);builder.append(random);}String code = builder.toString();第⼆步要做的操作就是要将第⼀步发送的验证码,如果发送成功了的话,我们要将该验证码保存起来,⽅便后续的验证,本⼈这⾥使⽤了SpringBoot整合Redis,直接使⽤RedisTemplente实现的,和原⽣实现是类似的,就是将验证码和⼿机号存⼊Redis。
JSP实验代码
JSP实验代码作业一:实训三使用表格进行页面布局1、用户投票页面的制作要求利用表格布局页面,制作投票页面,效果参考图2-19所示,。
图2-19 投票界面要求:(1)利用表格进行布局实验代码:<html><head><title>投票界面</title><title> New Document </title><meta name="Generator" content="EditPlus"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""></head><body bgcolor="silver" ><center><table bgcolor="white" width="178"height="380" border="0" cellspacing="0" cellpadding="0"><tr align="left" bgcolor="white"><td><img src="images/zxdc.jpg" alt="" width="178" height="27" ></td></tr><tr align="left" bgcolor="white"><td><img src="images/vote.gif" alt="" width="13" height="15" >你认为C语言课程在程序设计中的重要性</td></tr><tr><td><input type="radio" name="1" value="" >1.非常重要,学好它就可以独立完成程序设计</td></tr><tr><td><input type="radio" name="1" value="" >2.非常重要,但要辅以其他可成才能做好程序设计</td></tr><tr><td><input type="radio" name="1" value="" >3.一般重要,仅仅是基础启蒙课</td></tr><tr><td><input type="radio" name="1" value="" >4.不重要,学好其他课程也可以做程序员</td></tr><tr><td><input type="submit" name="2" value="提交" > <input type="submit" name="2" value="结果" > </td></tr></table></center></body></html>2、用户注册页面的制作要求利用表格进行布局,制作用户注册界面,效果参考图2-20所示:图2-20 用户注册界面要求:(1)利用表格进行布局实验代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><title> New Document </title><meta name="Generator" content="EditPlus"><meta name="Author" content=""><meta name="Keywords" content=""><meta name="Description" content=""></head><body><table width="900" border="1" align="center" cellspacing="2" cellpadding="3" bordercolor="#385610"><td colspan="2" align="center" bgcolor=HTML\images\bg1.gif>用户注册</td></tr><tr><td width="" alight="right">用户名:<br>注册用户名长度不超过0-10字节</br></td><td width=""><input type="text" name="" value="" /></td></tr><tr><td aligh="right">性别:<br>请选择您的性别</br></td><td width=""><input type="radio" name="1" value="" /><img src="images\Male.gif" alt="" width="23" height="21" />男孩<input type="radio" name="1" value="" /><img src="images\Female.gif" alt="" width="23" height="21" />女孩</td></tr><tr><td aligh="right">密码(至少六位):<br>请输入密码,区分大小写</br>请不要使用任何类似‘*’、‘ ’或HTML字符</td><td width=""><input type="password" name="" value="" /></td></tr><tr><td aligh="right">密码(至少六位):<br>请在输入一遍确认</br></td><td width=""><input type="password" name="" value="" /></td></tr><td aligh="right">密码问题:<br>忘记密码的提示问题</br></td><td width=""><input type="text" name="" value="" /></td></tr><tr><td aligh="right">问题答案:<br>忘记密码的提示问题答案,用于取回论坛密码</br></td><td width=""><input type="text" name="" value="" /></td></tr><tr><td aligh="right">Email地址:<br>请输入有效的邮件地址,这将使您使用到论坛中的所有功能</br></td><td width=""><input type="text" name="" value="" /><input type="button" name="" value="检测账号" /></td></tr><tr><td aligh="right"><font color=red>*</font>一卡通账号:<br>请输入有效的一卡通账号,这才能使您注册</br></td><td width=""><input type="text" name="" value="" /></td></tr><tr><td aligh="right"><font color=red>*</font>一卡通密码:<br>请输入有效的一卡通密码,否则不能使您注册</br></td><td width=""><input type="text" name="" value="" /></td></tr><td colspan="2" align="left"><input type="checkbox" name="" value="" />显示高级用户设置选项<input align="center" type="button" name="" value="注册" /><input align="center" type="button"name="" value="清除" /></td></table></body></html>作业二基于脚本语言的综合实训1、要求参考铁路客户服务中心网站的页面风格设计页面。
js表单验证代码大全
关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制、判断字符长度、js限制输入、限制不能输入、textarea 长度限制2.:js判断汉字、判断是否汉字、只能输入汉字3:js判断是否输入英文、只能输入英文4:js只能输入数字,判断数字、验证数字、检测数字、判断是否为数字、只能输入数字5:只能输入英文字符和数字6: js email验证、js 判断email 、信箱/邮箱格式验证7:js字符过滤,屏蔽关键字8:js密码验证、判断密码2.1: js 不为空、为空或不是对象、判断为空、判断不为空2.2:比较两个表单项的值是否相同2.3:表单只能为数字和"_",2.4:表单项输入数值/长度限定2.5:中文/英文/数字/邮件地址合法性判断2.6:限定表单项不能输入的字符2.7表单的自符控制2.8:form文本域的通用校验函数1. 长度限制<script>function test(){if(document.a.b.value.length>50){alert("不能超过50个字符!");document.a.b.focus();return false;}}</script><form name=a onsubmit="return test()"><textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea><input type="submit" name="Submit" value="check"></form>2. 只能是汉字<input onkeyup="value="/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')"> 3." 只能是英文<script language=javascript>function onlyEng(){if(!(event.keyCode>=65&&event.keyCode<=90))event.returnvalue=false;}</script><input onkeydown="onlyEng();">4. 只能是数字<script language=javascript>function onlyNum(){if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&even t.keyCode<=105)))//考虑小键盘上的数字键event.returnvalue=false;}</script><input onkeydown="onlyNum();">5. 只能是英文字符和数字<input onkeyup="value="/oblog/value.replace(/[\W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('t ext').replace(/[^\d]/g,''))">6. 验证油箱格式<SCRIPT LANGUAGE=javascript RUNAT=Server>function isEmail(strEmail) {if(strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)return true;elsealert("oh");}</SCRIPT><input type=text onblur=isEmail(this.value)>7. 屏蔽关键字(这里屏蔽***和****)<script language="javascript1.2">function test() {if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){ alert(":)");a.b.focus();return false;}}</script><form name=a onsubmit="return test()"><input type=text name=b><input type="submit" name="Submit" value="check"></form>8. 两次输入密码是否相同<FORM METHOD=POST ACTION=""><input type="password" id="input1"><input type="password" id="input2"><input type="button" value="test" onclick="check()"></FORM><script>function check(){with(document.all){if(input1.value!=input2.value){alert("false")input1.value = "";input2.value = "";}else document.forms[0].submit();}}</script>够了吧 :)屏蔽右键很酷oncontextmenu="return false" ondragstart="return false" onselectstart="return false"加在body中二2.1 表单项不能为空<script language="javascript"><!--function CheckForm(){if (.value.length == 0) {alert("请输入您姓名!");.focus();return false;}return true;}--></script>2.2 比较两个表单项的值是否相同<script language="javascript"><!--function CheckForm()if (document.form.PWD.value != document.form.PWD_Again.value) { alert("您两次输入的密码不一样!请重新输入.");document.ADDUser.PWD.focus();return false;}return true;}--></script>2.3 表单项只能为数字和"_",用于电话/银行帐号验证上,可扩展到域名注册等<script language="javascript"><!--function isNumber(String){var Letters = "1234567890-"; //可以自己增加可输入值var i;var c;if(String.charAt( 0 )=='-')return false;if( String.charAt( String.length - 1 ) == '-' )return false;for( i = 0; i < String.length; i ++ ){c = String.charAt( i );if (Letters.indexOf( c ) < 0)return false;}return true;}function CheckForm(){if(! isNumber(document.form.TEL.value)) {alert("您的电话号码不合法!");document.form.TEL.focus();return false;}return true;}--></script>2.4 表单项输入数值/长度限定<script language="javascript"><!--function CheckForm(){if (document.form.count.value > 100 || document.form.count.value < 1) {alert("输入数值不能小于零大于100!");document.form.count.focus();return false;}if (document.form.MESSAGE.value.length<10){alert("输入文字小于10!");document.form.MESSAGE.focus();return false;}return true;}//--></script>2.5 中文/英文/数字/邮件地址合法性判断<SCRIPT LANGUAGE="javascript"><!--function isEnglish(name) //英文值检测{if(name.length == 0)return false;for(i = 0; i < name.length; i++) {if(name.charCodeAt(i) > 128)return false;}return true;}function isChinese(name) //中文值检测{if(name.length == 0)return false;for(i = 0; i < name.length; i++) {if(name.charCodeAt(i) > 128)return true;}return false;}function isMail(name) // E-mail值检测{if(! isEnglish(name))return false;i = name.indexOf(" at ");j = name dot lastIndexOf(" at ");if(i == -1)return false;if(i != j)return false;if(i == name dot length)return false;return true;}function isNumber(name) //数值检测{if(name.length == 0)return false;for(i = 0; i < name.length; i++) {if(name.charAt(i) < "0" || name.charAt(i) > "9") return false;}return true;}function CheckForm(){if(! isMail(form.Email.value)) {alert("您的电子邮件不合法!");form.Email.focus();return false;}if(! isEnglish(.value)) {alert("英文名不合法!");.focus();return false;}if(! isChinese(name.value)) {alert("中文名不合法!");name.focus();return false;}if(! isNumber(form.PublicZipCode.value)) {alert("邮政编码不合法!");form.PublicZipCode.focus();return false;}return true;}//--></SCRIPT>2.6 限定表单项不能输入的字符<script language="javascript"><!--function contain(str,charset)// 字符串包含测试函数{var i;for(i=0;i<charset.length;i++)if(str.indexOf(charset.charAt(i))>=0)return true;return false;}function CheckForm(){if ((contain(.value, "%\(\)><")) || (contain(document.form.MESSAGE.value, "%\(\)><"))) {alert("输入了非法字符");.focus();return false;}return true;}//--></script>1. 检查一段字符串是否全由数字组成---------------------------------------<script language="Javascript"><!--function checkNum(str){return str.match(/\D/)==null} alert(checkNum("1232142141"))alert(checkNum("123214214a1"))// --></script>2. 怎么判断是否是字符---------------------------------------if (/[^\x00-\xff]/g.test(s)) alert("含有汉字");else alert("全是字符");3. 怎么判断是否含有汉字---------------------------------------if (escape(str).indexOf("%u")!=-1) alert("含有汉字"); else alert("全是字符");4. 邮箱格式验证//函数名:chkemail//功能介绍:检查是否为Email Address//参数说明:要检查的字符串//返回值:0:不是 1:是function chkemail(a){ var i=a.length;var temp = a.indexOf('@');var tempd = a.indexOf('.');if (temp > 1) {if ((i-temp) > 3){if ((i-tempd)>0){return 1;}}}return 0;}5. 数字格式验证--------------------------------------- //函数名:fucCheckNUM//功能介绍:检查是否为数字//参数说明:要检查的数字//返回值:1为是数字,0为不是数字function fucCheckNUM(NUM){var i,j,strTemp;strTemp="0123456789";if ( NUM.length== 0)return 0for (i=0;i<NUM.length;i++){j=strTemp.indexOf(NUM.charAt(i));if (j==-1){//说明有字符不是数字return 0;}}//说明是数字return 1;}6. 电话号码格式验证//函数名:fucCheckTEL//功能介绍:检查是否为电话号码//参数说明:要检查的字符串//返回值:1为是合法,0为不合法function fucCheckTEL(TEL){var i,j,strTemp;strTemp="0123456789-()# ";for (i=0;i<TEL.length;i++){j=strTemp.indexOf(TEL.charAt(i));if (j==-1){//说明有字符不合法return 0;}}//说明合法return 1;}7. 判断输入是否为中文的函数--------------------------------------- function ischinese(s){var ret=true;for(var i=0;i<s.length;i++)ret=ret && (s.charCodeAt(i)>=10000); return ret;}8. 综合的判断用户输入的合法性的函数--------------------------------------- <script language="javascript">//限制输入字符的位数开始//m是用户输入,n是要限制的位数function issmall(m,n){if ((m<n) && (m>0)){return(false);}else{return(true);}}9. 判断密码是否输入一致function issame(str1,str2){if (str1==str2){return(true);}else{return(false);}}10. 判断用户名是否为数字字母下滑线---------------------------------------function notchinese(str){var reg=/[^A-Za-z0-9_]/gif (reg.test(str)){return (false);}else{return(true); }}2.8. form文本域的通用校验函数---------------------------------------作用:检测所有必须非空的input文本,比如姓名,账号,邮件地址等等。
JSP实现登录功能之添加验证码
JSP实现登录功能之添加验证码jsp登陆验证,⽹页登陆验证带验证码校验,登录功能之添加验证码part_1:专门⽤于⽣成⼀个验证码图⽚的类:VerificationCode.Javapackage cn.mike.javase.test;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;import org.junit.Test;/*** @author : Administrator* @function : 这是⽤来测试随机⽣成验证码图⽚的类;*/public class VerificationCode {/*** 单元测试,试⼀下能不能⾃动⽣成验证码图⽚*/// 这个函数是单元测试时使⽤的,这⾥private⼀下外⾯就调⽤不到了;/* @Test *//* public */private void test_fun() {VerificationCode vc = new VerificationCode();BufferedImage image = vc.getImage();try {// ⽣成验证码图⽚,并保存到指定的路径VerificationCode.output(image, new FileOutputStream(new File(".\\image\\vcode_2.jpg")));} catch (FileNotFoundException e) {e.printStackTrace();}// 将随机⽣成的⽂本内容输出到控制台,⽤于校验System.out.println(vc.getText());}private int w = 70;// 宽private int h = 35;// ⾼private String text;// ⽂本内容(验证码字符串)private Random r = new Random();private String[] fontNames = { "宋体", "华⽂楷体", "⿊体", "微软雅⿊", "楷体_GB2312" };// 随机字符集合中不包括0和o,O,1和l,因为这些不易区分private String codes = "23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYXZ";// 验证码图⽚的背景⾊:⽩⾊private Color bgColor = new Color(255, 255, 255);/*** 返回⼀个验证码图⽚buffer对象:BufferedImage*/public BufferedImage getImage() {BufferedImage image = createImage();// 获取绘图环境(画笔⼯具)Graphics2D g2 = (Graphics2D) image.getGraphics();// sb :⽤来保存验证码字符串⽂本内容StringBuilder sb = new StringBuilder();for (int i = 0; i < 4; ++i) {// 随机⽣成4个字符String s = randomChar() + "";sb.append(s);float x = i * 1.0F * w / 4;g2.setFont(randomFont());g2.setColor(randomColor());g2.drawString(s, x, h - 5);}this.text = sb.toString();// 记录验证码⽂本内容drawLine(image);// 画⼲扰线return image;}/*** @return 获取验证码⽂本内容*/public String getText() {return text;}/*** @param image* @param out* 将⽂本写到指定的输出流。
前端开发实训案例网页验证码的生成与验证
前端开发实训案例网页验证码的生成与验证前端开发实训案例网页验证码的生成与验证为了保证网页的安全性和防止机器人恶意攻击,很多网站在用户进行注册、登录或者提交表单等操作时会要求用户输入验证码。
验证码是一种基于图像识别的技术,通过生成和验证验证码,可以有效防止机器人的自动化行为,确保用户身份的真实性。
本文将介绍前端开发中实现网页验证码的生成与验证的案例,并提供相应的代码实例。
1. 网页验证码的生成在前端开发中,验证码的生成是通过服务器端应用和前端代码联动来实现的。
以下是一种常见的验证码生成方法:首先,我们需要在服务器端生成验证码图片。
可以使用第三方库、自定义脚本或开源工具来实现这一步骤。
生成验证码图片的关键是要确保图片上的字符是随机的、干扰元素适当,并且字体、大小、颜色等可配置。
接下来,在前端页面中使用<img>标签将验证码图片展示给用户。
同时,在用户填写验证码的输入框旁边提供一个刷新按钮,点击按钮可以重新加载生成新的验证码图片。
2. 网页验证码的验证用户输入验证码后,前端需要将验证码的值发送给服务器端进行验证。
下面是一个网络验证码验证的示例过程:首先,前端需要获取用户输入的验证码值,可以使用JavaScript的相关API来获取。
然后,前端通过AJAX等方式将验证码的值发送给服务器端。
服务器端会将用户输入的验证码值与之前生成的验证码值进行比对。
如果验证码验证成功,服务器端会返回一个验证通过的信息(如JSON格式的数据)给前端;否则,返回一个验证失败的信息。
前端根据服务器端返回的响应,可以展示相应的提示信息给用户,例如验证码正确、验证码错误等提示。
3. 安全性考虑为了保证验证码的安全性,防止机器人攻击,有以下几点需要注意:首先,生成的验证码要足够随机,不能出现重复的情况,且需要有一定复杂度。
可以使用混合字母、数字和特殊字符的组合,增加验证码的难度。
其次,验证码的图片要有适当的干扰元素,使机器无法简单识别。
验证码是怎样生成的
//产生随机数 Random rnd = new Random(); int randNum = rnd.nextInt() + 1000; String randStr = String.valueOf(randNum); session.setAttribute("randStr", randStr); 4.用画笔画出随机数和干扰点。 g.setColor(Color.black); g.setFont(new Font("", Font.PLAIN, 20)); g.drawString(randStr, 10, 17); //随机产生 100 个干扰点,使图象中的验证码不易被其他程序探测到 for (int i = 0; i < 100; i++){ int x = rnd.nextInt(width); int y = rnd.nextInt(height); g.drawOval(x, y, 1, 1); } 5.输出图像。 // 输出图象到页面 ImageIO.write(Image image, "JPEG", response.getOutputStream()); 6.清除缓冲区。 out.clear(); out = pageContext.pushBody(); 下面通过 6 个步骤在 JSP 页面生成验证码: validate.jsp <%@ page language="java" import="java.awt.*" import="java.awt.image.BufferedImage" import="java.util.*" import="javax.imageio.ImageIO" pageEncoding="gb2312"%> <% response.setHeader("Cache-Control","no-cache"); // 在内存中创建图象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //获取画笔 Graphics g = image.getGraphics(); //设定背景色 g.setColor(new Color(200, 200, 200)); g.fillRect(0, 0, width, height); //取随机产生的验证码(4 位数字) Random rnd = new Random(); int randNum = rnd.nextInt(8999) + 1000; String randStr = String.valueOf(randNum);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先是生成验证码的jsp文件image.jsp
<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="UTF-8"%> <%!
Color getRandColor(int fc,int bc)
{
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
out.clear();//这句针对resin服务器,如果是tomacat可以不要这句
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
g.setColor(new
Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt (110)));
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
引用和刷新验证码代码
<script>
function seeE() {
document.getElementById('vadimg').src='./image.jsp?t='+new
Date().getTime();
}
</script>
<script>
function seeE() {
document.getElementById('vadimg').src='./image.jsp?t='+new
Date().getTime();
}
</script>
检测验证码
<%
String rand = (String)session.getAttribute("rand"); String input = request.getParameter("rand");
if(!rand.equals(input)){
out.print("<script>alert('请输入正确的验证码!
');window.history.go(-1);</script>");
}
%>
通过以上代码可以实现5位任意数字的验证码验证。