Java 二维码

java中的二维码

 

二维码的优缺点

优点:

 1.高密度编码,信息容量大

 2.编码范围广

 3.容错能力强

 4.译码可靠性高

 5.可引入加密措施

 6.成本低,易制作,经久耐用

缺点:

1.手机病毒,钓鱼网站传播的新渠道

2.信息泄露

 

QR Code 三大国际标准之一,专利公开,支持中文。其纠错能力分为4个等级:

1.L级--约可纠错7%的数据码字

2.M级--约可纠错15%的数据码字

3.Q级--约可纠错25%的数据码字

4.H级--约可纠错30%的数据码字

 

实现方法 :

一、 开源项目ZXing

1.  https://github.com/zxing/ 下载最新版本,将两个包core包下的com和javase下面的com拷入到一个自己新建的java工程中,然后导出为jar,就可以在以后的项目中使用了。

制作:

 1 /**
 2  * 
 3  * @author 孩子爹
 4  *
 5  */
 6 public class CreateQrCode {
 7 
 8     /**
 9      * 生成二维码的宽
10      */
11     private int width = 300;
12     /**
13      * 生成二维码的高
14      */
15     private int height = 300;
16     /**
17      * 生成二维码的图片格式
18      */
19     private String format = "png";
20     /**
21      * 生成二维码的内容
22      */
23     private String contents = "孩子爹说:“低头需要勇气,抬头需要底气!”";
24 
25     public CreateQrCode() {
26         createQR();
27     }
28 
29     /**
30      * 制作二维码
31      */
32     private void createQR() {
33         try {
34             // 首先要定义二维码的一些参数
35             HashMap map = new HashMap();
36             // 图片编码格式
37             map.put(EncodeHintType.CHARACTER_SET, "UTF-8");
38             // 容错等级
39             map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
40             // 边框
41             map.put(EncodeHintType.MARGIN, 3);
42 
43             BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height);
44 
45             Path file = new File("D:/孩子爹.png").toPath();
46 
47             MatrixToImageWriter.writeToPath(matrix, format, file);
48         } catch (WriterException e) {
49             e.printStackTrace();
50         } catch (IOException e) {
51             e.printStackTrace();
52         }
53     }
54 
55     public static void main(String[] args) {
56         new CreateQrCode();
57     }
58 
59     public CreateQrCode(int width, int height, String format, String contents) {
60         super();
61         this.width = width;
62         this.height = height;
63         this.format = format;
64         this.contents = contents;
65         createQR();
66     }
67 }
View Code

以下就是生成的图片,有兴趣的可以扫一下。

2.利用开源项目zxing的API,解析这个二维码

 1 public class ParseQrCode {
 2     public static void main(String[] args) {
 3         try {
 4 
 5             File img = new File("d:/孩子爹.png");
 6             BufferedImage image = ImageIO.read(img);
 7             BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
 8             
 9             Map map = new HashMap();
10             map.put(EncodeHintType.CHARACTER_SET, "UTF-8");
11             
12             MultiFormatReader reader = new MultiFormatReader();
13             Result result = reader.decode(bitmap , map);
14             System.out.println("解析结果: " + result.toString());
15             
16         } catch (NotFoundException e) {
17             e.printStackTrace();
18         } catch (IOException e) {
19             e.printStackTrace();
20         }
21     }
22 }
View Code

输出结果:

 二、jqueryqrcode  个人认为此种最简单,生成快

开源网址 https://github.com/jeromeetienne/jquery-qrcode ,下载js库。

官方文档

Let me walk you thru it. First include it in your webpage with the usual script tag

<script type="text/javascript" src="jquery.qrcode.min.js"></script>
Then create a DOM element which gonna contains the generated qrcode image. Lets say a div

<div id="qrcode"></div>
Then you add the qrcode in this container by

jquery('#qrcode').qrcode("this plugin is great");
This is it. see it live.
View Code

制作好的图片另存就可以用了。

二维码扩展

扫描后获得名片信息,可以参照vCard2.1规范

https://zh.wikipedia.org/wiki/VCard

BEGIN:VCARD
VERSION:2.1
N:Gump;Forrest;;Mr.
FN:Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO;GIF:<nowiki>http://www.example.com/dir_photos/my_photo.gif</nowiki>
TEL;WORK;VOICE:(111) 555-1212
TEL;HOME;VOICE:(404) 555-1212
ADR;WORK;PREF:;;100 Waters Edge;Baytown;LA;30314;United States of America
LABEL;WORK;PREF;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:100 Waters Edge=0D=
=0ABaytown\, LA 30314=0D=0AUnited States of America
ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
LABEL;HOME;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:42 Plantation St.=0D=0A=
Baytown, LA 30314=0D=0AUnited States of America
EMAIL:forrestgump@example.com
REV:20080424T195243Z
END:VCARD

名片如下:

 

 

更多java干货交流,欢迎关注微信公众号:haizidie1321
手机公众号搜索:haizidie1321或者扫下面的二维码关注,关注即得java权威电子书。


posted @ 2016-09-09 23:23  孩子爹  阅读(266)  评论(0编辑  收藏  举报