验证码的实现

function _hyz()//换一张函数JS代码

{

/*

1. 获取<img>元素

2. 给它的src指向/tools/VerifyCodeServlet

*/

var img=document.getElementById("imgVerifyCode");

//需要给出一个参数,这个参数每次都不同,这样才能刷新浏览器缓存!

img.src = "/tools/VerifyCodeServlet?a="+ new Date().getTime();

}

//jsp中代码

验证码:<input type="text" name="verifyCode"/><br>

<img src="/tools/VerifyCodeServlet" id="imgVerifyCode"/>

<a href="javascript:_hyz()">换一张</a><br>

//servlet中使用验证码代码

public String login(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/*

* 校验验证码

*   1.获取表单中的验证码

*   2.获取图片上的文字

*/

String verifyCode =request.getParameter("verifyCode");

//VerifyCodeServlet会把真正的验证码保存到session中

String vcode =(String) request.getSession().getAttribute("vCode");//

System.out.println(vcode+"  "+verifyCode);

System.out.println(verifyCode.equalsIgnoreCase(vcode));//不区分大小写比较

return null;

}

//生成验证码的过程JAVA代码

public class VerifyCode {

private int w = 70;

private int h = 35;

private Random r = new Random();

// {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}

private String[] fontNames  = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};

private String codes  = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";

private Color bgColor  = new Color(255, 255, 255);

private String text ;

private Color randomColor () {

int red = r.nextInt(150);

int green = r.nextInt(150);

int blue = r.nextInt(150);

return new Color(red, green, blue);

}

private Font randomFont () {

int index = r.nextInt(fontNames.length);

String fontName = fontNames[index];

int style = r.nextInt(4);

int size = r.nextInt(5) + 24;

return new Font(fontName, style, size);

}

private void drawLine (BufferedImage image) {

int num  = 3;

Graphics2D g2 = (Graphics2D)image.getGraphics();

for(int i = 0; i < num; i++) {

int x1 = r.nextInt(w);

int y1 = r.nextInt(h);

int x2 = r.nextInt(w);

int y2 = r.nextInt(h);

g2.setStroke(new BasicStroke(1.5F));

g2.setColor(Color.BLUE);

g2.drawLine(x1, y1, x2, y2);

}

}

private char randomChar () {

int index = r.nextInt(codes.length());

return codes.charAt(index);

}

private BufferedImage createImage () {

BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = (Graphics2D)image.getGraphics();

g2.setColor(this.bgColor);

g2.fillRect(0, 0, w, h);

return image;

}

public BufferedImage getImage () {

BufferedImage image = createImage();

Graphics2D g2 = (Graphics2D)image.getGraphics();

StringBuilder sb = new StringBuilder();

// 向图片中画4个字符

for(int i = 0; i < 4; i++)  {

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;

}

public String getText () {

return text;

}

public static void output (BufferedImage image, OutputStream out)

throws IOException {

ImageIO.write(image, "JPEG", out);

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

VerifyCode vc = new VerifyCode();

BufferedImage image = vc.getImage();//获取一次性验证码图片

// 该方法必须在getImage()方法之后来调用

//        System.out.println(vc.getText());//获取图片上的文本

VerifyCode.output(image, response.getOutputStream());//把图片写到指定流中

// 把文本保存到session中,为LoginServlet验证做准备

request.getSession().setAttribute("vCode", vc.getText());

}

时间: 2024-10-26 10:39:13

验证码的实现的相关文章

php 扭曲验证码

1 <?php 2 3 class image{ 4 public static function code(){ 5 6 $str='abcdefghijklmnopqrstuvwxyz0123456789'; 7 $code = substr(str_shuffle($str),0,5); 8 9 // 2块画布 10 $src = imagecreatetruecolor(60, 25); 11 $dst = imagecreatetruecolor(60, 25); 12 13 // 灰

发送短信验证码按钮 定时器

static int i = 29; @property(nonatomic,strong) NSTimer *timmer;//定时器 - (void)sendNumber{ NSLog(@"发送验证码"); self.getTelephoneCodeBtn.enabled = NO; [self.getTelephoneCodeBtn setTitle:@"已发送" forState:UIControlStateDisabled]; [self.getTelep

ThinkPHP 3.2.3 加减乘法验证码类

ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Verify/ 可以在 Verify.class.php 文件内进行修改,也可以单独写一个类继承自带的验证码类.如果单独写一个继承的类,可以重用父类的属性和方法,但是要注意的是父类中有一些属性和方法是私有(private)的,可以修改这些私有的属性和方法为保护(protected)的,如果不希望修改框架自

制作验证码时 图片无法刷新

1在网页上制作上图中的验证码时,点击图片不能刷新依旧是原图,找了好久终于发现是js语句中的错误,如下: 如果不加后面的new Date().getTime(),每次请求/AuthCode/getAuthCode都是一样的所以图片不会变化,加上之后每次请求会变化,就会重新加载图片了1 function reload(){                    document.getElementById("bt").src="/AuthCode/getAuthCode?&qu

验证码

Random yan=new Random();//随机数种子,注意括号里不要填数 String a="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";//验证码需要的所有字符 String b []=a.split("");//定义一个数组,用““把每个字符分割 System.out.print("生成的验证码为");//第一种方法 /*for(int i = 0;

网站验证码制作

asp.net验证码制作 using System; using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Text; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebPa

自动化测试--登录页面验证码问题

对于web应 用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来 说使用验证码可以有效果的防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性.但对于测试人员来说,不管是进行性能测试还是自动化测试都是一个 棘手的问题. 下面来谈一下处理验证码的几种方法. 去掉验证码 这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境,这样做可省去了测试人员不少麻烦,如果自动化脚

JCaptcha生成计算式验证码

前两天买了张火车票,令人egg碎的验证已经无力吐槽,试了几次都让我开始怀疑我的IQ是不是适合再从事程序猿的这个"神圣的职业"了.今天分享的是一段比较传统而不失实用的验证,验证的意义想必大家都已知晓. 好了,语言总是苍白无力.直入真题来看代码的实现的吧. 操作环境: jboss eap 6.2 tomcat也可以,比较懒直接用的jboss.大家有兴趣也可以试试,支持的服务更多,性能更加稳定些. servlet 麻雀虽小,五脏俱全,做了小例子足以. JCaptcha jcaptcha是一个

PHP利用GD库画图和生成验证码图片

首先得确定php.ini设置有没有打开GD扩展功能,测试如下 print_r(gd_info()); 如果有打印出内容如下,则说明GD功能有打开: Array ( [GD Version] => bundled (2.0.34 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => 1 [GIF Read Support] => 1 [GIF Crea

session cookie 验证码实现

using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Blog.UI { using System.Drawing; using Blog.Common; /// <summary> /// Vcode 的摘要说明 /// </summary> public class Vcode : IHttpHandler,System.Web.Session