首页 > 编程知识 正文

图片验证码代码怎么解析,Java实现验证码制作

时间:2023-05-03 14:43:19 阅读:151717 作者:1095

刷新前

刷新后

相关代码

index.jsp

$Title$

看起来不太好。 请点击

功能变更代码

document.getelementbyid('code ' ).src='code.jsp?=' new Date ().getTime );

}

code.jsp

//*

* 1、清空浏览器缓存。

*由于浏览器存储了网站的资源文件和图像,所以浏览器中加载的图像被存储,存储的文件

*与服务器的交互如果不为空,则可能会出现验证更新后无效的问题。

*/

response.setheader('pragma ',' no-cache ' );

response.setheader (' cache-control ',' no-cache ' );

response.setheader('expires ','0' );

//2、调用生成制作的认证码的工具,保存在session中

string code=captcahcode.drawimage (response;

sssion.setattribute('code ',code );

//3、getOutputStream ()解决hasalreadybeencalledforthisresponse异常

out.clear (;

out=pageContext.pushBody (;

%

CaptcahCode.java

package com.alan.code;

import javax.imageio.ImageIO;

import javax.servlet.http.http无servlet轮询;

import java.awt.*;

import Java.awt.font.fontrender context;

import Java.awt.geom.rectangle 2d;

import Java.awt.image.buffered image;

import java.io.IOException;

import java.util.Random;

//*

*验证码工具类

*/

public class CaptcahCode {

//*

*如何生成认证码

* @param response

* @return

*/

publicstaticstringdrawimage (httpservletresponseresponse ) {

//1,使用stringbuilder类处理字符串。 不用字符串。 因为赋值后就不能更改了。

stringbuilder builder=new stringbuilder (;

//2,产生随机数,长度为4

for(intI=0; i 4; I ) {

builder.append(randomchar () );

}

String code=builder.toString (;

//3、定义图像的宽度和高度,并使用BufferedImage对象。

输入宽度=120;

int height=25;

bufferedimagebi=newbufferedimage (width,height,BufferedImage.TYPE_3BYTE_BGR );

//4、获取Graphics2D绘图对象,开始绘制二维码

Graphics2D g=bi.createGraphics (;

//5,定义字符的字体和大小

font font=new font (' Microsoft Yahoo ',Font.PLAIN,20 );

//6,定义字体颜色

color color=new color (0,0,0 );

//设置字体

g.setfont(font );

//设置颜色

g.setcolor(color );

//设定背景

g.setbackground(newcolor ) 226、226和240 );

//开始绘制对象

g.clear rect (0,0,width,height );

//绘制形状,获取矩形对象

fontrendercontextcontext=g.getfontrendercontext (;

rectangle 2d bounds=font.getstring bounds (code,context );

//计算文件的坐标和间隔

doublex=(width-bounds.getwidth ) )/2;

doubley=(height-bounds.getheight ) )/2;

double ascent=bounds.getY (;

double baseY=y - ascent;

g.drawstring(code,(int ) x,(int ) baseY );

//结束描绘

g.dispose (;

try {

imageio.write(bi,' jpg ',response.getOutputStream ) );

//更新响应流

response.flushBuffer (;

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

}

返回代码;

}

//*

*此方法用于用户生成随机的字符和数字

* @return

*/

私有状态字符随机(

//1、定义验证所需的字母和数字

stringstr=' zxcvbnmasdfghjklqwertyuiop 0123456789 ';

//2、定义随机对象

Random random=new Random (;

//3,返回随机字符

return str.charat (random.nextint (str.length () );

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。