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 }
以下就是生成的图片,有兴趣的可以扫一下。
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 }
输出结果:
二、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.
制作好的图片另存就可以用了。
二维码扩展
扫描后获得名片信息,可以参照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权威电子书。