java 验证码

int width = 97;

    int height = 46;

    StringBuffer bu=new StringBuffer();

    BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);    //创建BufferedImage类的对象

    Graphics g = image.getGraphics();     //创建Graphics类的对象

    //Graphics2D g2d=(Graphics2D)g;      //通过Graphics类的对象创建一个Graphics2D类的对象

    Random random = new Random();      //实例化一个Random对象

    Font mFont = new Font("华文宋体", Font.BOLD, 30);  //通过Font构造字体

    g.setColor(ImageUtils.getRandColor(200, 250));     //改变图形的当前颜色为随机生成的颜色

    g.fillRect(0, 0, width , height);     //绘制一个填色矩形

    //画一条折线  

    //BasicStroke bs=new BasicStroke(2f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); //创建一个供画笔选择线条粗细的对象

    //g2d.setStroke(bs);     //改变线条的粗细

    //g.setColor(Color.DARK_GRAY);  //设置当前颜色为预定义颜色中的深灰色

    //int[] xPoints=new int[3];

    //int[] yPoints=new int[3];

    //for(int j=0;j<3;j++){

     //xPoints[j]=random.nextInt(width - 1);

     //yPoints[j]=random.nextInt(height - 1);

    //}

    //g.drawPolyline(xPoints, yPoints,3);

    //生成并输出随机的验证文字  

    g.setFont(mFont);  

    int itmp=0;

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

     if(random.nextInt(2)==1){

      itmp=random.nextInt(26)+65; //生成A~Z的字母

     }else{

      itmp=random.nextInt(10)+48; //生成0~9的数字

     }

     char ctmp=(char)itmp;

     bu.append(ctmp);

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

     g.setColor(color);

     /****随机缩放文字并将文字旋转指定角度**/

     //将文字旋转指定角度

     Graphics2D g2d_word=(Graphics2D)g;

     AffineTransform trans=new AffineTransform();

     trans.rotate(random.nextInt(45)*3.14/180,15*i+10,7);

     //缩放文字

     float scaleSize=random.nextFloat()+0.8f;

     if(scaleSize>1.1f) scaleSize=1f;

     trans.scale(scaleSize, scaleSize);

     g2d_word.setTransform(trans);

     /************************/

     g.drawString(String.valueOf(ctmp),13 * i + 23, 29);

    }

  g.dispose();

  req.getSession().setAttribute("verifyCode",bu.toString());

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

  res.setHeader("Cache-Control", "no-cache");

  res.setDateHeader("Expires", 0);

  res.setContentType("image/jpeg");

     ImageIO.write(image, "jpeg", res.getOutputStream());

 

 

 

 

/**

  * 产生随机颜色

  *

  * @param num1

  * @param num2

  * @return Color

  */

 public static Color getRandColor(int num1, int num2) {

  Random random = new Random();

  if (num1 > 255)

   num1 = 255;

  if (num2 > 255)

   num2 = 255;

  int r = num1 + random.nextInt(num2 - num1);

  int g = num1 + random.nextInt(num2 - num1);

  int b = num1 + random.nextInt(num2 - num1);

  return new Color(r, g, b);

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个Java验证码登录的示例代码: ```java // 生成验证码 String verifyCode = VerifyCodeUtils.generateVerifyCode(4); // 将验证码存入session request.getSession().setAttribute("verifyCode", verifyCode); // 生成验证码图片 response.setContentType("image/png"); BufferedImage image = VerifyCodeUtils.getImage(verifyCode, 100, 40); ImageIO.write(image, "png", response.getOutputStream()); ``` 上述代码中,`VerifyCodeUtils`是一个自定义的工具类,用于生成验证码验证码图片。在生成验证码时,我们将验证码存入session中,以便后续验证。在生成验证码图片时,我们设置了图片的类型为PNG,并将图片输出到response的输出流中,以便前端页面显示。 接下来是一个验证码登录的示例代码: ```java // 获取用户输入的验证码 String userInputVerifyCode = request.getParameter("verifyCode");// 获取session中存储的验证码 String sessionVerifyCode = (String) request.getSession().getAttribute("verifyCode"); // 验证码校验 if (userInputVerifyCode == null || !userInputVerifyCode.equalsIgnoreCase(sessionVerifyCode)) { // 验证码错误 return "verifyCodeError"; } else { // 验证码正确,进行登录操作 // ... } ``` 上述代码中,我们首先获取用户输入的验证码和session中存储的验证码,然后进行验证码校验。如果验证码校验失败,我们返回一个错误页面;如果验证码校验成功,我们进行登录操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大•虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值