<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.awt.*"%>
<%@page import="java.io.OutputStream"%>
<%@page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%>
<%@page import="com.sun.image.codec.jpeg.JPEGCodec"%>
<%
//设置页面不缓存
response.setHeader("pragma","no-cache");
response.setHeader("cache-control","no-cache");
response.setDateHeader("expires",0);
response.setContentType("Image/gif");
%>
<%
String s="";
int width=80,height=23;
char[] code=new char[]{
'A','B','C','D','E','F','G','H','I','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','l','m','n','p','q','r','s','t','u','v','w','x','y','z',
'2','3','4','5','6','7','8','9'
};
Random random=new Random();
String strCode;
for(int i=0;i<4;i++)
{
strCode=String.valueOf(code[random.nextInt(code.length)]);
s=s+strCode;
}
//把得到的字符保存到session种
session.setAttribute("code",s);
//定义图像buffer
BufferedImage bufferedImage=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D gra=bufferedImage.createGraphics();
//填充背景颜色
gra.setColor(Color.white);
gra.fillRect(0,0,width,height);
gra.setFont(new Font("宋体",Font.BOLD+Font.ITALIC,20)); //设置字体样式
//画边框
gra.setColor(Color.blue);
gra.drawRect(0,0,width-1,height-1);
//产生干扰线
int x1=0,y1=0,x2=0,y2=0;
for(int i=0;i<30;i++)
{
x1=random.nextInt(100);
y1=random.nextInt(100);
x2=random.nextInt(100);
y2=random.nextInt(100);
gra.setColor(Color.black);
gra.drawLine(x1,y1,x1+x2,y1+y2);
}
//画出每个字符
char c;
for(int i=0;i<4;i++)
{
c=s.charAt(i);
gra.setColor(getColor());
gra.drawString(c+"",i*20+4,20);
}
OutputStream toClient=response.getOutputStream();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(toClient);
encoder.encode(bufferedImage);
toClient.close();
out.clear();
out=pageContext.pushBody();
%>
<%!
private Color getColor()
{
Random random=new Random();
int red=0,green=0,blue=0;
red=random.nextInt(100);
green=random.nextInt(100);
blue=random.nextInt(100);
return new Color(red,green,blue);
}
%>
分享到:
相关推荐
易语言简单验证码识别源码,简单验证码识别,计算验证码,判断一下,判断相差值
本资料包“简单验证码样本集.zip”包含了一个针对简单验证码的训练集,总计10000个样本,每个验证码由四个字符组成,这为开发验证码识别系统提供了基础数据。 验证码的种类多样,包括图像验证码、音频验证码、数学...
用java实现的简单验证码程序,仅仅实现了随机文字,而且只是数字,未加入背景图片和干扰线
这个"安卓简单验证码demo"提供了一个基本的实现,帮助开发者理解如何在Android平台上创建自定义视图来绘制随机的验证码。下面我们将深入探讨相关的知识点。 首先,验证码的核心功能是生成随机的、难以自动识别的...
本文将详细介绍“通用验证码识别工具套件(简单验证码)”及其相关知识点。 该工具套件专为识别简单类型的验证码设计,允许用户自定义配置以适应不同的验证码样式,提升了验证码识别的通用性。这样的工具在某些场景...
本话题将深入探讨简单验证码的识别过程,涉及图像处理、阈值设置、图像识别算法以及图像存储流等关键技术。 首先,图像分割是验证码识别的第一步。在验证码图片中,每个字符通常都是独立的,因此我们需要通过图像...