[分享]验证码之中文验证码_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 839 | 回复: 1   主题: [分享]验证码之中文验证码        上一篇   下一篇 
ruiyu.yu
注册用户
等级:少尉
经验:331
发帖:15
精华:0
注册:1970-1-1
状态:离线
发送短消息息给ruiyu.yu 加好友    发送短消息息给ruiyu.yu 发消息
发表于: IP:您无权察看 2016-10-24 9:34:10 | [全部帖] [楼主帖] 楼主

    这几天在登录一些网站和应用的时候,发现验证码不是以前那种简单的字母加数字的验证码,

而是变成了各种各样的汉字验证码,之后找了相关资料,自己实现了一下,分享给大家。


1、运行后的结果

运行1.png运行3.png运行2.png运行4.png


2、创建web项目,新建一个servlet类

运行5.png


下一步,

运行6.png


3、页面代码

package com.yuyu;


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;


public class ChineseCheckCode extends HttpServlet {


private static final long serialVersionUID = 1L;



public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


this.doPost(request, response);


}



public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");//使客户端浏览器,区分不同种类的数据

response.setContentType("image/jpeg");

response.setHeader("Cache-Control", "no-cache");//response.setHeader 是用来设置返回页面的头信息

response.setHeader("Pragma", "no-cache");

int width = 166;//设置图片高度和宽度

int height = 80;

//图像

BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);//TYPE_INT_BGR:表示一个具有 8 位 RGB 颜色分量的图像

Graphics g = image.getGraphics();

Random random = new Random();

Font myFont = new Font("楷体",Font.ITALIC,26);//Font.ITALIC 斜体

g.fillRect(0, 0, width, height);

g.setFont(myFont);

String sRand = "";

        String ctmp = "";

        

        @SuppressWarnings("unused")

String itmp = "";

        for(int i=0;i<4;i++){//循环4次,生成4个中文字符

       

        String[] rBase = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};//16进制

       

        int r1 = random.nextInt(3)+11;//返回一个11~14的值

        String str_r1 = rBase[r1];

       

        int r2;

        if(r1==13){

        r2 = random.nextInt(7); //0~7

        }

        else{

        r2 = random.nextInt(16);//0~16

        }

       

        String str_r2 = rBase[r2];

        int r3 = random.nextInt(6)+10;//10~16

       

        String str_r3 = rBase[r3];

        int r4;

       

        if(r3==10){

        r4=random.nextInt(15)+1;//1~16

        }

        else if(r3==15){

        r4= random.nextInt(15);

        }

        else{

        r4=random.nextInt(16);

        }

       

        String str_r4 = rBase[r4];

       

        byte[] bytes = new byte[2];

        String r12 = str_r1+str_r2;    

        int tempLow = Integer.parseInt(r12,16);//解析一个字符串,并返回一个整数,按照16进制        

        bytes[0] = (byte)tempLow;

       

        String r34 = str_r3 + str_r4;

        int tempHeight = Integer.parseInt(r34, 16);

        bytes[1]=(byte)tempHeight;

       

        ctmp=new String(bytes);

        sRand+=ctmp;

        Color color = new Color(20+random.nextInt(110));

        g.setColor(color);

        g.drawString(ctmp, width/6*i+23, height/3);

        }

        HttpSession session = request.getSession(true);

        session.setAttribute("randCheckCode", sRand);

        g.dispose();

        ImageIO.write(image, "JPEG", response.getOutputStream());//存储格式图片

}


}


4、发布运行


在浏览器输入框中输入:http://localhost:7001/CheckCode/ChineseCheckCode

(PS:如果不删除前面的那个servlet,输入的时候记得在CheckCode前加上)

运行7.png

这样就完成了。







赞(0)    操作        顶端 
koei123
注册用户
等级:大校
经验:4174
发帖:16
精华:0
注册:2011-7-21
状态:离线
发送短消息息给koei123 加好友    发送短消息息给koei123 发消息
发表于: IP:您无权察看 2018-12-22 5:38:29 | [全部帖] [楼主帖] 2  楼


有点意思~~



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论