package pic.util; 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.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class IdentifyingCode { /** * 验证码长度 */ int length = 4; /** * 验证码字体大小 */ int fontSize = 30; /** * 边框补 */ int padding = 0; /** * 是否输出燥点(默认输出) */ boolean chaos = true; /** * 输出燥点的颜色(默认灰色) */ Color chaosColor = Color.lightGray; /** * 自定义背景色(默认白色) */ Color backgroundColor = Color.white; /** * 自定义字体数组 */ String[] fonts = { "Arial", "Georgia","Times New Roman","Blue","Yellow" }; /** * 自定义随机码字符串序列(使用逗号分隔) */ String codeSerial = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,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,O,P,Q,R,S,T,U,V,W,X,Y,Z"; /** * 产生波形滤镜效果 */ private final double PI = 3.1415926535897932384626433832799;//此值越大,扭曲程度越大 /** * 字体长度的一对方法 * @return */ public int getLength() { return length; } public void setLength(int length) { this.length = length; } /** * 字体长度的一对方法 * @return */ public int getFontSize() { return fontSize; } public void setFontSize(int fontSize) { this.fontSize = fontSize; } /** * 边框的一对方法 * @return */ public int getPadding() { return padding; } public void setPadding(int padding) { this.padding = padding; } /** * 是否输出躁点的一对方法 * @return */ public boolean isChaos() { return chaos; } public void setChaos(boolean chaos) { this.chaos = chaos; } /** * 躁点的颜色 * @return */ public Color getChaosColor() { return chaosColor; } public void setChaosColor(Color chaosColor) { this.chaosColor = chaosColor; } /** * 背景颜色 * @return */ public Color getBackgroundColor() { return backgroundColor; } public void setBackgroundColor(Color backgroundColor) { this.backgroundColor = backgroundColor; } /** * 自定义字体样式的数组 * @return */ public String[] getFonts() { return fonts; } public void setFonts(String[] fonts) { this.fonts = fonts; } /** * 自定义随机码字符串序列,表示可输出的数字的范围 * @return */ public String getCodeSerial() { return codeSerial; } public void setCodeSerial(String codeSerial) { this.codeSerial = codeSerial; } /** * 给定范围获得随机颜色 * * @param fc * @param bc * @return */ private 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); } /** * 生成校验码图片 * * @param code * @return */ private BufferedImage CreateImageCode(String code) { int fWidth = this.fontSize + this.padding; //图象的宽度 int imageWidth = (int) (code.length() * fWidth) + 4 + this.padding * 2; //图象的高度 int imageHeight = this.fontSize*2 ; // 在内存中创建图象 BufferedImage bi = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB); //创建画笔 Graphics graphics = bi.getGraphics(); // 将位图填充背景色 graphics.setColor(this.backgroundColor); graphics.fillRect(0, 0, bi.getWidth(), bi.getHeight()); // 生成随机类 Random random = new Random(); // 给背景添加随机生成的燥点,使图象中的认证码不易被其它程序探测到 if (this.chaos) { int c = this.length * 10; for (int i = 0; i < c; i++) { int x = random.nextInt(bi.getWidth()); int y = random.nextInt(bi.getHeight()); graphics.setColor(this.chaosColor);// 设置燥点的颜色 graphics.drawRect(x, y, 1, 1);// 生成燥点 //graphics.drawLine(x, y, y, x);//生成干扰线 } } // 随机字体和颜色的验证码字符 for (int i = 0; i < code.length(); i++) { //设置字体属性 int findex = random.nextInt(this.fonts.length); Font font = new Font(fonts[findex], Font.BOLD, this.fontSize); graphics.setFont(font); int top = (int) ((imageHeight + code.length()*2) / 1.5); if (i % 2 != 1) { top = top - code.length(); } int left = i * fWidth+code.length(); graphics.setColor(this.getRandColor(1 + i, 250 - i)); try { graphics.drawString(code.substring(i, i + 1), left, top); } catch (StringIndexOutOfBoundsException e) { System.out.print(e.toString()); } } // 画一个边框,边框颜色为Color.gray graphics.setColor(Color.gray); graphics.drawRect(0, 0, bi.getWidth() - 1, bi.getHeight() - 1); // 图象生效 graphics.dispose(); // 产生波形 //bi = TwistImage(bi, true, 8, 4); return bi; } /** * 将创建好的图片输出到页面 * * @param bi * @param response */ public void CreateImageOnPage(String code, HttpServletResponse response) { // 设置页面不缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 获取验证码图片 BufferedImage bi = this.CreateImageCode(code); ServletOutputStream os = null; try { os = response.getOutputStream(); // 输出图象到页面,参数1是画板,参数2是后缀名,参数三是输出流 ImageIO.write(bi,"JPEG", os); } catch (IOException e) { e.printStackTrace(); } finally { if(os != null) try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 生成随机字符码 * * @param codeLen * 生成字符码的个数,0则默认的个数 * @return */ public String CreateVerifyCode(int codeLen) { if (codeLen == 0) { codeLen = this.length; } String[] arr = this.codeSerial.split(","); String code = ""; int randValue = -1; Random random = new Random(); for (int i = 0; i < codeLen; i++) { randValue = random.nextInt(arr.length - 1); code += arr[randValue]; } return code; } /** * 生成随机码,默认的方法 * @return */ public String CreateVerifyCode(){ return this.CreateVerifyCode(this.length); } }
引用
接下来的是测试类
IdentifyingCode io = new IdentifyingCode();
//在这里调用CreateVerifyCode()方法产生随机数,下面是4位
String picNum = io.CreateVerifyCode(4);
//然后生成图片
io.CreateImageOnPage(picNum, response);
发表评论
-
8888888888888
2012-07-06 21:26 0public Pooled(String name) ... ... -
77777777777777
2012-07-06 21:26 0public class Pooled extends Thr ... -
444444
2012-07-06 21:25 0public void setDebug(boolean d ... -
33333
2012-07-06 21:25 0switch (repool.getPriority()) ... -
22222
2012-07-06 21:24 0// 初始化线程list private Threa ... -
11111
2012-07-06 21:23 0// 线程数量 private int _threadC ... -
dssds
2012-07-06 21:21 0private static ThreadPool inst ... -
wedawed
2011-05-12 19:06 177# -*- coding: UTF-8 -*- #imp ... -
asa
2011-05-12 18:50 113#任务执行状态 STATE_START = 'STATE_S ... -
asda
2010-11-28 16:32 0引用 <?xml version="1.0&q ... -
使用commons-fileupload组件上传文件
2010-10-07 21:45 1145这是使用了commons-fileupload-1.2.1.j ... -
使用servlet技术来下载文件
2010-10-06 19:56 808要下载一个文件,那么就要知道这个文件mime类型,所以要先把你 ... -
使用dom4j操作xml文件
2010-10-06 19:44 1686第一种,使用dom4j生成一个xml文件 package ... -
使用oreilly上传组件上传文件
2010-10-06 19:30 698public class fileOreilly ex ... -
MD5加密
2010-10-06 19:20 917经过MD5加密后,得到16位的16进制数 public ... -
使用javaMail组件来发送邮件
2010-10-06 19:10 1263为大家介绍javaMail组件的使用,首先是发送普通的邮件 ... -
实现天气预报接口
2010-10-06 18:56 2217透过URL来获取天气预报,在jsp页面将天气显示出来 pa ...
相关推荐
验证码图片生成器是一种用于网络安全验证的技术,主要用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。这个Java源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...
验证码图片生成技术是一种常见的安全措施,用于防止自动化程序如机器人或爬虫进行恶意操作,例如在网站注册、登录、发布评论等环节。易语言是一种中国本土开发的编程语言,其特点是语法简单,易于学习,适合初学者...
它可能包含一个表单,一个`<img>`标签用于显示验证码图片,一个文本框让用户输入验证码,以及一个提交按钮。 总的来说,这个ASP.NET验证码程序通过结合C#的图像处理能力和随机数生成,创建了一个安全且实用的验证...
通过学习这个简单的JS验证码制作,你可以理解验证码的基本原理,并开始探索更复杂的安全验证机制,例如图片验证码(CAPTCHA)、滑动验证码、点选图片验证码等。同时,这也是学习JavaScript和前端开发的一个好起点,...
在这个主题中,我们将深入探讨如何使用Python语言来创建带有噪声的图片验证码。 首先,我们需要了解验证码的基本原理。验证码通常包含随机生成的一串字符,这些字符以图像形式展示,并要求用户输入看到的字符序列。...
(1)创建一个名为“yanzhengma.php”的 PHP 文件,用来制作验证码图片。 (2)开启 session,方便传值来验证用户的输入的内容是否正确。 (3)输出图片格式,header('Content-type:image/png'); //输出头信息,...
图片验证码则需要结合图形库,如Java的`java.awt`和`javax.imageio`包,生成一张包含验证码文字的图片,并添加一些扭曲、噪点等干扰元素,增加机器识别的难度。 在项目中,可能还会包含一些额外的功能,比如: 1. ...
在这个例子中,背景图片被设计成条形,用户需要通过滑动来揭示隐藏的验证码文字。这个条形图片可以是随机生成的数字或字母的组合,确保每次刷新页面时都会改变,增加安全性。 HTML方面,我们可以创建一个`<input>`...
1. **验证码图片生成文件**: 这个文件通常是一个ASP页面,它的主要任务是生成随机的、不可预测的验证码字符串,并将其显示为图像。这个过程涉及以下几个步骤: - 生成随机字符串:字符串可以包含字母、数字,甚至...
基于PHP制作验证码 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要基于PHP中的GD库来实现验证码的制作。 GD(graphic device...
- **客户端显示**:如何在网页上正确显示验证码图片,并提供刷新验证码的选项。 - **验证过程**:用户输入后,服务器如何验证输入的验证码是否正确,以及错误处理机制。 - **安全注意事项**:如何避免常见的...
关于php的验证码制作ppt,可做教学用
这些图片可以是随机生成的数字、字母组合,或者是复杂背景下的可识别对象,用于制作验证码图像。 3. **图片处理**: - 在生成验证码时,服务器会从图像库中随机选择一张图片,然后将图片的某一部分遮挡(通常通过...
识别程序使用delphi语言编写,以dll的方式提供使用,通过简单的函数调用即可识别复杂的验证码图片。 自动识别各种验证码 自动识别; 智能处理各种背景、边框、干扰等; 识别率可达100%(指不太复杂的验证码);本...
在PHP编程中,处理图像是一项常见的任务,包括压缩图片、添加水印以及制作验证码等。这些功能对于网站的性能优化、品牌保护以及用户安全都至关重要。以下是对这些知识点的详细说明: 1. **PHP 图像处理库**: PHP ...
在VB(Visual Basic)编程环境下制作验证码,可以帮助开发者学习和理解图形用户界面(GUI)编程、随机数生成、图像处理以及字符串操作等基础知识。下面将详细探讨VB制作验证码涉及的知识点。 1. **图形库和控件**:...
然而,随着技术的发展,验证码的形式也变得越来越多样化,其中包括图片验证码、滑动验证码、点击验证码等。 在HTML5中,我们可以利用Canvas元素来生成和展示验证码。Canvas是HTML5的一个重要特性,它允许开发者在...
在这个“制作验证码(含有源码)”的压缩包中,包含了实现各种复杂验证码功能的源代码。下面将详细介绍验证码的原理、类型以及可能涉及的技术。 1. 验证码的原理: 验证码的基本原理是让计算机生成一组随机数据,并...
验证码制作,包括加点划线,中文验证码,图片剪切,图片水印等 验证码制作,包括加点划线,中文验证码,图片剪切,图片水印等
本验证码识别DLL可以识别一些纯数字的验证码,压缩包中的字模库是专门为 http://www.haiguan.info/onlinesearch/gateway/Gatewaystate.aspx这个网站量身订做的