在Java web中创建简单的5位数字验证码

本验证码是使用JSP来实现,名称命名为:alidate.jsp

<%@ page language="java" contentType="image/jpeg; charset=UTF-8" pageEncoding="UTF-8"%>

<!--导入验证码所需要的包 -->
<%@page import="java.util.*" %>
<%@page import="java.awt.*" %>
<%@page import="java.io.*" %>
<%@page import="java.awt.image.*" %>
<%@page import="javax.imageio.*" %>

<%!
//获取给定范围的随机颜色
Color getRandomColor(int fc,int bc){
Random ran=new Random();
if(fc>255){fc=255;}
if(bc>255){bc=255;}
int r=fc+ran.nextInt(bc-fc);
int g=fc+ran.nextInt(bc-fc);
int b=fc+ran.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=20;                           
//在内存中创建图片
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图形的上下文
Graphics g=image.getGraphics();
g.setColor(getRandomColor(200,250));
g.fillRect(0,0,width,height);
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(new Color(200));
g.drawRect(1,1,width-1,height-1);
g.setColor(getRandomColor(160,200));
//生成一个随机类
Random random=new Random();
//随机产生155条干扰线
for(int i=0;i<155;i++){
int x=random.nextInt(width);
int y=random.nextInt(height);
int x1=random.nextInt(12);
int y1=random.nextInt(12);
g.drawLine(x,y,x+x1,y+y1);
}
//声明验证码字符串
String randomString="";
for(int i=0;i<5;i++){
String randomNumber=String.valueOf(random.nextInt(10));
randomString+=randomNumber;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(randomNumber,13*i+6,16);
}
System.out.print("当前的验证码为:"+randomString);
session.setAttribute("randomString",randomString);
g.dispose();
OutputStream output=response.getOutputStream();
ImageIO.write(image,"JPEG",response.getOutputStream());
output.flush();
out.clear();
out=pageContext.pushBody();
%>

验证码文件创建好了以后,在其他的页面来对其进行引用

例如 :在index.jsp中引用,可在body标签中添加一个IMG标签 <img src="validata.jsp"/>即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值