继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

关于登入(用户名,密码,验证码)

holdtom
关注TA
已关注
手记 1703
粉丝 240
获赞 991

html

关于登入(用户名,密码,验证码)

ajax

关于登入(用户名,密码,验证码)

关于登入(用户名,密码,验证码)

Controller

关于登入(用户名,密码,验证码)

关于登入(用户名,密码,验证码)

UserServiceImpl

关于登入(用户名,密码,验证码)

验证码Controller

关于登入(用户名,密码,验证码)

YzmServiceImpl

关于登入(用户名,密码,验证码)

声明Constant类

关于登入(用户名,密码,验证码)

验证码util类

package com.xinbo.www.utils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import sun.misc.BASE64Encoder;

import javax.imageio.ImageIO;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

public class RandomValidateCodeUtil {

public static final String RANDOMCODEKEY = "randomcode_key";//放到session中的key

private Random random = new Random();

private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生的字符串

private int width = 85;//图片宽

private int height = 36;//图片高

private int lineSize = 40;//干扰线数量

private int stringNum = 4;//随机产生字符数量

private static final Logger logger = LoggerFactory.getLogger(RandomValidateCodeUtil.class);

/**

 * 生成随机图片

 */

public Map<String,String> getRandcode() {

    // BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

    Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作

    g.fillRect(0, 0, width, height);//图片大小

    g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));//字体大小

    g.setColor(getRandColor(110, 133));//字体颜色

    // 绘制干扰线

    for (int i = 0; i <= lineSize; i++) {

        drowLine(g);

    }

    // 绘制随机字符

    String randomString = "";

    for (int i = 1; i <= stringNum; i++) {

        randomString = drowString(g, randomString, i);

    }

    logger.info(randomString);

    //将生成的随机字符串保存到session中

    //session.removeAttribute(RANDOMCODEKEY);

    //session.setAttribute(RANDOMCODEKEY, randomString);

    g.dispose();

    String base64 = null;

    try {

        // 将内存中的图片通过流动形式输出到客户端

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        ImageIO.write(image, "JPEG", baos);//图片格式

        byte[] bytes = baos.toByteArray();

        base64 =  new BASE64Encoder().encodeBuffer(bytes).trim();

    } catch (Exception e) {

        logger.error("将内存中的图片通过流动形式输出到客户端失败>>>>   ", e);

    }

    Map<String,String> map = new HashMap<String,String>();

    map.put("num", randomString);

    map.put("pic", base64);

    return map;

}

/*

 * 获得字体

 */

private Font getFont(){

    return new Font("Fixedsys",Font.CENTER_BASELINE,18);

}

/*

 * 获得颜色

 */

private Color getRandColor(int fc,int bc){

    if(fc > 255)

        fc = 255;

    if(bc > 255)

        bc = 255;

    int r = fc + random.nextInt(bc-fc-16);

    int g = fc + random.nextInt(bc-fc-14);

    int b = fc + random.nextInt(bc-fc-18);

    return new Color(r,g,b);

}

/*

 * 绘制字符串

 */

private String drowString(Graphics g,String randomString,int i){

    g.setFont(getFont());

    g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));

    String rand = String.valueOf(getRandomString(random.nextInt(randString.length())));

    randomString +=rand;

    g.translate(random.nextInt(3), random.nextInt(3));

    g.drawString(rand, 13*i, 16);

    return randomString;

}

/*

 * 绘制干扰线

 */

private void drowLine(Graphics g){

    int x = random.nextInt(width);

    int y = random.nextInt(height);

    int xl = random.nextInt(13);

    int yl = random.nextInt(15);

    g.drawLine(x, y, x+xl, y+yl);

}

/*

 * 获取随机的字符

 */

public String getRandomString(int num){

    return String.valueOf(randString.charAt(num));

}

}

©著作权归作者所有:来自51CTO博客作者1ceMan7的原创作品,如需转载,请注明出处,否则将追究法律责任

j


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP