<%@ page contentType="text/html; charset=gb2312"%> JAVA:附加码生成器(图片)
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
JAVA:附加码生成器(图片)
     发布者: 发布时间:2006-07-25
〔Picture.java〕

package creator.common.attachLogin;

import java.io.*;

public class Picture{

final int key=1;

final String error_format_int= "format of color is not rgb.sample \"212|232|0\"";

final String error_color_input="format of color(num|num|num): num in 0-255";

/**格式化输出数据**/

public String manage(String temp){

String returnStr="";

temp = encrypt(temp);

byte[] by =temp.getBytes();

for(int i=0;i<by.length;i++){

returnStr=returnStr+(byte)by[i]+"|";

}

return returnStr;

}

/**格式化输入数据**/

public byte[] disManage(String temp){

int len=0,index=0,i=0,first=0;

while(( i=temp.indexOf("|",first))>-1){

len++;

first=i+1;

}

byte[] by=new byte[len];

first=0;

while(( i=temp.indexOf("|",first))>-1){

by[index]=Byte.parseByte(temp.substring(first,i));

index++;

first=i+1;

}

return by;

}

/**随机生成四位的附加码**/

public String getRandom(){

int i1 = (int)(java.lang.Math.random()*10);

int i2 = (int)(java.lang.Math.random()*10);

int i3 = (int)(java.lang.Math.random()*10);

int i4 = (int)(java.lang.Math.random()*10);

return String.valueOf(i1)+String.valueOf(i2)+String.valueOf(i3)+String.valueOf(i4);

}

/**加密1:错位处理**/

public String encrypt(String randomStr){

String para=random()+randomStr.substring(0,1)+random()+random()+randomStr.substring(1,2);

para= para+random()+randomStr.substring(2);

return jiaMi(para);

}

/**得到随机数0-9之间**/

private String random(){

String temp = String.valueOf((int)(java.lang.Math.random()*10));

return temp;

}

/**加密2:加密处理,此方法可以自己修改**/

private String jiaMi(String str){

byte[] by = str.getBytes();

ByteArrayInputStream in = new ByteArrayInputStream(by);

int ch;

int index=0;

byte[] temp = new byte[in.available()];

while((ch=in.read())!=-1){

temp[index]=(byte)(ch-key);

index++;

}

ByteArrayInputStream ins = new ByteArrayInputStream(temp);

BufferedReader fReader = new BufferedReader(new InputStreamReader(ins));


try{ return fReader.readLine();}catch(Exception e){return "";}

}

/**从给的数字里得到正确的数字**/

public String discrypt(String temp){

String para = jieMi(disManage(temp));

return para.substring(1,2)+para.substring(4,5)+ para.substring(6,8);

}

/**解密处理**/

private String jieMi(byte[] by){

ByteArrayInputStream in = new ByteArrayInputStream(by);

int ch;

int index=0;

byte[] temp = new byte[in.available()];

while((ch=in.read())!=-1){

temp[index]=(byte)(ch+key);

index++;

}

ByteArrayInputStream ins = new ByteArrayInputStream(temp);

BufferedReader fReader = new BufferedReader(new InputStreamReader(ins));

try{ return fReader.readLine();}catch(Exception e){return "";}

}

/**分解rgb格式的颜色 num|num|num**/

public int[] masterData(String temp){

int index_len=0,index=0,next_index=0;

int[] return_arr=new int[3];

boolean break_error=false;

if(getMax(temp,"|")==2){

while((index_len=temp.indexOf("|",next_index))>-1){

if(getInt(temp.substring(next_index,index_len))==256){

break_error = true;

}else{

return_arr[index]=getInt(temp.substring(next_index,index_len));

next_index=index_len+1;

index++;

}

if(break_error) break;

}

if(break_error){

return null;

}else{

return_arr[index] = getInt(temp.substring(next_index));

return return_arr;

}

}else{

System.out.println(error_format_int+":"+temp);

return null;

}

}

private int getMax(String temp,String temp2){

int index=0,index_len=0,index_next=0;

while((index=temp.indexOf(temp2,index_next))>-1){

index_len++;

index_next=index+1;

}

return index_len;

}

private int getInt(String temp){

try{

return Integer.parseInt(temp);

}catch(Exception e){

System.out.println(error_color_input+":"+temp);

return 256;

}

}

}

〔CreateImage.java〕

package creator.common.attachLogin;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.awt.*;

import java.awt.image.*;

import java.awt.image.BufferedImage;

import com.sun.image.codec.jpeg.*;

import com.sun.image.codec.jpeg.JPEGCodec;


public class CreateImage extends HttpServlet {

static final private String CONTENT_TYPE = "text/html; charset=gb2312";

final String input_back_color_error="input rgb backcolor is error";

final String input_fore_color_error="input rgb forecolor is error";

private Picture pic = new Picture();


//Initialize global variables

public void init() throws ServletException {

}

//Process the HTTP Get request

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//生成图片
try{
int imageWidth = 60;
int imageHeight = 20;

BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0,0,imageWidth,imageHeight);
graphics.setColor(Color.white);


FileOutputStream fos = new FileOutputStream("attach.jpg");
BufferedOutputStream bos = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
bos.close();

}catch(Exception e){
System.out.println("生成图片出错!");
}


String queryNum = request.getParameter("Image");

String queryRgb="";

if(request.getParameter("Rgb")!=null){

queryRgb = request.getParameter("Rgb");

}

response.setHeader("Cache-Control","no-store");

response.setContentType("image/jpeg");

ServletOutputStream out=response.getOutputStream();


//jpg格式的背景色图片(于页面风格一样),宽3.6毫米,高1.8毫米

InputStream imageIn = new FileInputStream(new File("attach.jpg"));

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);

BufferedImage image4 = decoder.decodeAsBufferedImage();

queryNum = pic.discrypt(queryNum);

Graphics g = image4.getGraphics();


if(queryRgb.length()>1){

if(pic.masterData(queryRgb)!=null){

int[] arg = pic.masterData(queryRgb);

g.setColor(new Color(arg[0],arg[1],arg[2]));

}

}else{

g.setColor(new Color(255,0,0));

}

g.drawString(queryNum,0,13);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(image4);

out.close();

}


}

〔web.xml〕


<servlet>
<servlet-name>CreateImage</servlet-name>
<servlet-class>javabean.com.CreateImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CreateImage</servlet-name>
<url-pattern>/servlet/CreateImage</url-pattern>
</servlet-mapping>

〔index.jsp〕

<%@page contentType="text/html; charset=gb2312" %>
<%@page import="javabean.com.Picture"%>
<%
Picture pic = new Picture();
String random =pic.getRandom();
String encryRandom= pic.manage(random );
%>
<html>
<head>
<title>登陆窗口</title>
</head>
<body>
<div align="center">
<p align="center">附加码:<input type="attach" size="4">
<img align=absbottom vspace=2 border=0 src="servlet/CreateImage?Image=<%=encryRandom%>&Rgb=255|0|0" title="验证码图片"></p>
<input type="hidden" name="get_attach" value="<%=random%>">
</div>
</body>
</html>
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
JAVA:配置文件读取器
使用JavaExcel API 往excel中插入图片
关于java异常处理机制的深入理解
javascript读取表单的值
Java调用系统执行程序(OS Command)
JavaVM,反射与动态代理
 
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号