import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@SuppressWarnings("serial")
public class CheckCodeImg extends HttpServlet
{
private Font mFont = new Font("Arial Black", Font.PLAIN, 16);
public void init() throws ServletException
{
super.init();
}
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);
System.out.println("http://www.ewuji.net/");
}
private String getRandomChar()
{
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = ’\u0000’;
switch (rand)
{
case 1:
itmp = Math.round(Math.random() * 25 + 65);
ctmp = (char)itmp;
return String.valueOf(ctmp);
case 2:
itmp = Math.round(Math.random() * 25 + 97);
ctmp = (char)itmp;
return String.valueOf(ctmp);
default :
itmp = Math.round(Math.random() * 9);
return String.valueOf(itmp);
}
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
int width=150, height=30;
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(1, 1, width-1, height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1);
g.setFont(mFont);
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
for (int i = 0;i < 70;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
}
String sRand="";
for (int i=0;i<6;i++)
{
String tmp = getRandomChar();
sRand += tmp;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(tmp,15*i+10,15);
}
HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
}
分享到:
相关推荐
在小编知道的验证码的作用有两个,一是在注册的时候防止批量注册,二是防止有所企图的人暴力破解系统。
用JAVA语言写的验证码图片
总结,Java编写图片验证码涉及了网络I/O、图像处理、随机数生成、颜色操作、字体设置等多个方面,是Web开发中实现用户安全验证的重要手段。对于初学者,这是一个很好的练习项目,可以加深对Java图形和网络编程的理解...
用java编写的四位随机的验证码,包括数字跟字母 简单易懂
本项目提供的代码已经实现了Java编写的验证码功能,使用者可以直接调用,无需从头编写。 首先,我们来看`ImgFontByte.java`,这个文件可能包含了生成验证码图片的逻辑。在Java中,通常我们会使用`java.awt`和`javax...
在本项目中,我们关注的是使用Java编程语言实现的一种特殊方法——滴水算法,来解决验证码识别问题。 滴水算法是一种模拟自然界水滴下落过程的图像处理技术,它在验证码识别中的应用主要是通过模拟水滴对图像进行...
- 编写发送短信的代码,生成验证码并存储,然后调用客户端发送短信到指定手机号。 - 用户输入验证码后,验证其有效性。 二、Java邮件发送 1. **邮件发送原理**:JavaMail API是Java用于发送邮件的标准库,它支持...
7. 单元测试:编写测试用例,确保代码在各种情况下都能正确地处理验证码,例如不同类型的验证码、不同的字符组合等。 8. 并行处理:如果需要批量处理大量验证码,可以考虑使用多线程或异步处理来提高效率。 12306...
1. **JAVA基础**:该验证码系统是用JAVA语言编写的,这意味着它利用了JAVA的面向对象特性,类库丰富,以及跨平台的优势。JAVA提供了大量的标准库,如AWT和Swing,用于图形用户界面的构建,可能被用来生成验证码图像...
本项目提供的是一款用Java编写的验证码生成工具,包括showyanzhengma.exe可执行文件、yanzhengma6(50).exe以及yanzhengma6(50).jar文件。 验证码的生成通常包含以下几个关键步骤: 1. **随机字符生成**:验证码...
这个工具类是用Java语言编写的,因此我们可以深入探讨一下Java验证码生成的相关技术和实现。 验证码(CAPTCHA,Completely Automated Public Turing test to tell Computers and Humans Apart)的主要目标是区分...
例如,你可以编写自己的`Generator`实现,生成具有特定风格的验证码,或者实现更复杂的验证逻辑。 总结,Java JCaptcha验证码框架为开发者提供了一种高效且易于集成的验证码解决方案。通过理解和使用JCaptcha,不仅...
8. **异常处理**:在编写代码时,应充分考虑可能的异常情况,如网络故障、API调用失败、验证码过期等,并提供相应的错误信息反馈给用户。 9. **测试**:最后,通过单元测试和集成测试确保验证码发送功能的正确性。...
JSP是Java的一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,使得网页能够动态地生成内容。在这个验证码项目中,JSP可能被用来创建展示验证码的HTML页面。页面上会有一个图片标签,其src属性指向...
本文将详细讲解如何利用Java语言和其内置的awt包,来实现一个简单的登录验证码功能。这个过程涵盖了从创建图像缓冲区、制图、添加干扰纹、设置验证码,直到在网页上展示的各个步骤。 首先,我们要做的是创建一个...
对于算术型验证码,我们需要编写一个类来生成随机的算术问题,并将其与答案一起保存。在用户提交答案时,验证答案是否正确,如果正确则通过验证码验证,否则提示错误。 字符型验证码的生成相对简单,可以直接利用...
java 验证码编写