JavaUtil_02_二维码的生成与解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 1.引入jar包  zxing-core-1.7.jar  :   http://viralpatel.net/blogs/download/jar/zxing-core-1.7.jar  zxing-javase-1.

1.引入jar包

 zxing-core-1.7.jar  :   http://viralpatel.net/blogs/download/jar/zxing-core-1.7.jar

 zxing-javase-1.7.jar :  http://viralpatel.net/blogs/download/jar/zxing-j2se-1.7.jar

 

2.工具类—QRCodeUtil.java

  1 package com.ray.util;
  2 
  3 import java.awt.image.BufferedImage;
  4 import java.io.File;
  5 import java.util.Hashtable;
  6 import java.util.Random;
  7 import javax.imageio.ImageIO;
  8 
  9 import com.google.zxing.BarcodeFormat;
 10 import com.google.zxing.Binarizer;
 11 import com.google.zxing.BinaryBitmap;
 12 import com.google.zxing.EncodeHintType;
 13 import com.google.zxing.LuminanceSource;
 14 import com.google.zxing.MultiFormatReader;
 15 import com.google.zxing.MultiFormatWriter;
 16 import com.google.zxing.Result;
 17 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
 18 import com.google.zxing.client.j2se.MatrixToImageWriter;
 19 import com.google.zxing.common.BitMatrix;
 20 import com.google.zxing.common.HybridBinarizer;
 21 
 22 public class QRCodeUtil {
 23 
 24     /**
 25      * 根据内容,生成指定宽高、指定格式的二维码图片
 26      *
 27      * @param text   内容
 28      * @param width  宽
 29      * @param height 高
 30      * @param format 图片格式
 31      * @return 生成的二维码图片路径
 32      * @throws Exception
 33      */
 34     public static String generateQRCode(String text, int width, int height, String format) throws Exception {
 35         Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
 36         hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
 37         BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
 38        
 39         String pathName = "D:/new.png";   //指定输出文件的路径
 40         File outputFile = new File(pathName);
 41         MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
 42      
 43         return pathName;
 44     }
 45     
 46     /**
 47      * 随机生成指定长度的验证码
 48      *
 49      * @param length 验证码长度
 50      * @return 生成的验证码
 51      */
 52     public  static String generateNumCode(int length) {
 53         String val = "";
 54         String charStr = "char";
 55         String numStr = "num";
 56         Random random = new Random();
 57 
 58         //参数length,表示生成几位随机数
 59         for (int i = 0; i < length; i++) {
 60 
 61             String charOrNum = random.nextInt(2) % 2 == 0 ? charStr : numStr;
 62             //输出字母还是数字
 63             if (charStr.equalsIgnoreCase(charOrNum)) {
 64                 //输出是大写字母还是小写字母
 65                 int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
 66                 val += (char) (random.nextInt(26) + temp);
 67             } else if (numStr.equalsIgnoreCase(charOrNum)) {
 68                 val += String.valueOf(random.nextInt(10));
 69             }
 70         }
 71         return val;
 72     }
 73     
 74     /**
 75      * 解析指定路径下的二维码图片
 76      *
 77      * @param filePath 二维码图片路径
 78      * @return
 79      */
 80     public static String parseQRCode(String filePath) {
 81         String content = "";
 82         try {
 83             File file = new File(filePath);
 84             BufferedImage image = ImageIO.read(file);
 85             LuminanceSource source = new BufferedImageLuminanceSource(image);
 86             Binarizer binarizer = new HybridBinarizer(source);
 87             BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
 88             Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
 89             hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
 90             MultiFormatReader formatReader = new MultiFormatReader();
 91             Result result = formatReader.decode(binaryBitmap,  hints);
 92 
 93             System.out.println("result 为:" + result.toString());
 94             System.out.println("resultFormat 为:" + result.getBarcodeFormat());
 95             System.out.println("resultText 为:" + result.getText());
 96             //设置返回值
 97             content = result.getText();
 98         } catch (Exception e) {
 99             e.printStackTrace();
100         }
101         return content;
102     }
103     
104     
105     
106     
107     
108 }
View Code

 

3.测试类—QRCodeTest.java

 1 package com.ray.test;
 2 
 3 import org.junit.Test;
 4 import com.ray.util.QRCodeUtil;
 5 
 6 
 7 public class QRCodeTest {
 8 
 9     @Test
10     public void testQRCode(){
11         //String text = QRCodeUtil.generateNumCode(12);  //随机生成的12位验证码
12         //System.out.println("随机生成的12位验证码为: " + text);
13 
14         String text="你好啊,@¥%2@#$%,//";
15         System.out.println("text");
16         int width = 100;    //二维码图片的宽
17         int height = 100;   //二维码图片的高
18         String format = "png";  //二维码图片的格式
19 
20         try {
21             //生成二维码图片,并返回图片路径
22             String pathName = QRCodeUtil.generateQRCode(text, width, height, format);
23             System.out.println("生成二维码的图片路径: " + pathName);
24 
25             String content = QRCodeUtil.parseQRCode(pathName);
26             System.out.println("解析出二维码的图片的内容为: " + content);
27         } catch (Exception e) {
28             e.printStackTrace();
29         }
30 
31 
32     }
33 
34     
35 
36 }
View Code

 

参考文章:  Java生成、解析二维码  ( http://www.cnblogs.com/xz-luckydog/p/6402568.html)

目录
相关文章
|
小程序
微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
421 0
|
6月前
|
Java API Spring
开源!一款基于Spring Boot的二维码生成和解析工具
开源!一款基于Spring Boot的二维码生成和解析工具
85 1
|
6月前
|
JavaScript
js生成二维码和解析二维码
js生成二维码和解析二维码
91 0
|
Go
Golang 基础案例集合:中文拼音转换、解析二维码、压缩 zip、执行定时任务
曾经,因为不够注重基础吃了好多亏。总是很喜欢去看那些高大上的东西,却忽略了最基本的东西。然后会错误的以为自己懂的很多,但是其实是沙堆中筑高台,知道很多高大上的架构,但是基础的东西却不太了解。我觉得,可
253 0
|
JavaScript
js生成二维码和解析二维码
js生成二维码和解析二维码
166 0
|
传感器 C++ Windows
windows下解析二维码的利器——zbarimg命令
zbarimg是一个windows下用于二维码解析的软件。安装好了后设置PATH环境变量你的系统就会多一个zbarimg命令,对应的文件是zbarimg.exe,在cmd下可以执行并回显结果。在应用程序中可以方便地调用。
335 0
windows下解析二维码的利器——zbarimg命令
|
Java API Spring
开源!一款基于Spring Boot的二维码生成和解析工具
开源!一款基于Spring Boot的二维码生成和解析工具
|
开发工具 Android开发
XQRCode 一个非常方便实用的二维码扫描、解析、生成库
XQRCode 一个非常方便实用的二维码扫描、解析、生成库
603 0
XQRCode 一个非常方便实用的二维码扫描、解析、生成库
28用zxing对二维码的解析
28用zxing对二维码的解析
125 0
|
自然语言处理 Python
用 Python 生成炫酷二维码及解析
用 Python 生成炫酷二维码及解析
274 0
用 Python 生成炫酷二维码及解析

推荐镜像

更多