content: package com.ncst.seckill.util;
  
  import com.ncst.seckill.pojo.SkUser;
  import com.ncst.seckill.pojo.Verify;
  
  import javax.script.ScriptEngine;
  import javax.script.ScriptEngineManager;
  import java.awt.*;
  import java.awt.image.BufferedImage;
  import java.util.Random;
  
  /**
   * @Date 2020/10/19 10:36
   * @Author by LSY
   * @Description
   */
  public class VerifyUtils {
  
  
      public static Verify createVerifyCode(SkUser user, long goodsId) {
          if (user == null || goodsId <= 0) {
              return null;
          }
          int width = 80;
          int height = 32;
          //create the image
          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
          Graphics g = image.getGraphics();
          // set the background color
          g.setColor(new Color(0xDCDCDC));
          g.fillRect(0, 0, width, height);
          // draw the border
          g.setColor(Color.black);
          g.drawRect(0, 0, width - 1, height - 1);
          // create a random instance to generate the codes
          Random rdm = new Random();
          // make some confusion
          for (int i = 0; i < 50; i++) {
              int x = rdm.nextInt(width);
              int y = rdm.nextInt(height);
              g.drawOval(x, y, 0, 0);
          }
          // generate a random code
          String verifyCode = generateVerifyCode(rdm);
          g.setColor(new Color(0, 100, 0));
          g.setFont(new Font("Candara", Font.BOLD, 24));
          g.drawString(verifyCode, 8, 24);
          g.dispose();
          //把验证码存到Verify 中
          int rnd = calc(verifyCode);
  
          //返回 Verify 对象
          Verify verify = new Verify();
          verify.setBufferedImage(image);
          verify.setCalc(rnd);
  
          return verify;
      }
  
      private static int calc(String exp) {
          try {
              ScriptEngineManager manager = new ScriptEngineManager();
              ScriptEngine engine = manager.getEngineByName("JavaScript");
              return (Integer) engine.eval(exp);
          } catch (Exception e) {
              e.printStackTrace();
              return 0;
          }
      }
  
      private static char[] ops = new char[]{'+', '-', '*'};
  
      /**
       * + - *
       */
      private static String generateVerifyCode(Random rdm) {
          int num1 = rdm.nextInt(10);
          int num2 = rdm.nextInt(10);
          int num3 = rdm.nextInt(10);
          char op1 = ops[rdm.nextInt(3)];
          char op2 = ops[rdm.nextInt(3)];
          String exp = "" + num1 + op1 + num2 + op2 + num3;
          return exp;
      }
  
  }
  