二维码的知识 看这一篇就够了 使用zxing进行二维码的生成

本文简单地介绍了十几种常见的二维码,并展示如何使用zxing生成各种二维码

本文将详细介绍(相对来说)使用zxing对QrCode的生成

二维码的介绍来自百度百科和某些文献,正所谓,冤有头。。。

代码的实现在代码的第二点给出

使用的包(不使用maven的也可以去下载jar包(废话))

 		<dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.3</version>
        </dependency>



(一) 各类二维码

1. AZTEC

Aztec Code是1995年,由Hand HeldProducts公司的Dr. Andrew Longacre设计。它是一种高容量的二维条形码格式。它可以对ASCII和扩展ASCII码进行编码。当使用最高容量和25%的纠错级别的時候,Aztec可以对3000个字符或者3750个数字进行编码
Aztec的矩阵大小在15 X 15和151 X 151之间变化。每个最小单位非黑即白。它独特的位于正中的模式识别标志和安置算法使Aztec看起来像个旋涡一样。
Aztec打印解决方案允许用户选择大小和纠错级别。一共有36中不同的格式供选择,此外还有19种纠错级别可供选择,默认纠错级别是5级23%。高纠错级别意味着更少的数据容量和更小的误码机会
在这里插入图片描述
场景: 通常用于机票和其他旅行文档以及汽车登记文档。还可以用于医院的患者识别,或识别药物、样本以及与特定患者相关的其他物品。


2. Codabar

Codabar是由Monarch Marking Systems在1972年研制的条码。它是在"2 of 5"后早期阶段引入的条码。
在这里插入图片描述
场景:广泛用于需要序列号的领域,如血库、门到门交货服务订单以及会员卡片管理。


3. CODE_39

CODE 39是 Intermec公司在1975年研制成功的。包括数字、字母和一些符号在内,条码共包括43个字符。
在这里插入图片描述
场景:由于可以处理字母,CODE 39在工业领域必不可少,用于汽车、电子等工厂自动化行业。在美国,汽车工业行动组织已经对其进行了标准化。


4. CODE_93

Code 93码与Code 39码的字符集相同,但93码的密度要比39码高,因而在面积不足的情况下,可以用93码代替39码。它没有自校验功能,为了确保数据安全性,采用了双校验字符,其可靠性比39条码还要高.
在这里插入图片描述
场景:用于汽车、电子等工厂自动化行业,内部管理


5. CODE_128

CODE128码是1981年引入的一种高密度条码,CODE128 码可表示从 ASCII 0 到ASCII 127 共128个字符,故称128码。其中包含了数字、字母和符号字符。
在这里插入图片描述
场景: CODE128码是广泛应用在企业内部管理、生产流程、物流控制系统方面的条码码制,由于其优良的特性在管理信息系统的设计中被广泛使用,CODE128码是应用最广泛的条码码制之一


6. DATA_MATRIX

Data Matrix原名Data code,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。Data Matrix又可分为ECC000-140与ECC200两种类型,ECC000-140具有多种不同等级的错误纠正功能,而ECC200则透过Reed-Solomon演算法产生多项式计算出错误纠正码,其尺寸可以依需求印成不同大小,但采用的错误纠正码应与尺寸配合,由于其演算法较为容易,且尺寸较有弹性,故一般以ECC200较为普遍。
在这里插入图片描述
场景 : 用途详见 https://baike.baidu.com/item/Datamatrix/2016699?fr=aladdin#8


7. EAN_8 和 EAN_13

EAN码是国际物品编码协会制定的一种商品用条码,通用于全世界。EAN码符号有标准版(EAN-13)和缩短版(EAN-8)两种。标准版表示13位数字,又称为EAN13码,缩短版表示8位数字,又称EAN8。两种条码的最后一位为校验位,由前面的12位或7位数字计算得出。
EAN码(英文全称:European Article Number)由前缀码、厂商识别码、商品项目代码和校验码组成。前缀码是国际EAN组织标识各会员组织的代码,我国为690-695;厂商代码是EAN编码组织在EAN分配的前缀码的基础上分配给厂商的代码;商品项目代码由厂商自行编码;校验码为了校验代码的正确性。在编制商品项目代码时,厂商必须遵守商品编码的基本原则:对同一商品项目的商品必须编制相同的商品项目代码;对不同的商品项目必须编制不同的商品项目代码。保证商品项目与其标识代码一一对应,即一个商品项目只有一个代码,一个代码只标识一个商品项目.我国的通用商品条码与其等效。我们日常购买的商品包装上所印的条码一般就是EAN码。另外,图书和期刊作为特殊的商品也采用了EAN13表示ISBN和ISSN。前缀977被用于期刊号ISSN,图书号ISBN用978为前缀,我国被分配使用7开头的ISBN号,因此我国出版社出版的图书上的条码全部为9787开头 .
EAN-13码:由13个数字组成,为EAN的标准编码型式。
EAN- 8码:由8个数字组成,属EAN的简易编码型式。
在这里插入图片描述
场景: 所有在市场流通的商品


8. ITF

ITF条码,又称交叉二五条码,
在这里插入图片描述
场景:主要用于运输包装,是印刷条件较差,不允许印刷EAN-13和UPC-A条码时应选用的一种条码


9. MAXICODE

1980年代晚期,美国知名的UPS(United Parcel Service)快递公司认知到利用机器辨读资讯可有效改善作业效率、提高服务品质而研发的条码。
在这里插入图片描述


10. PDF417

PDF417二维条码是一种堆叠式二维条码,目前应用最为广泛。PDF417条码是由美国SYMBOL公司发明的,PDF(Portable Data File)意思是“便携数据文件”。组成条码的每一个条码字符由4个条和4个空共17个模块构成,故称为PDF417条码。 PDF417条码需要有417解码功能的条码阅读器才能识别。PDF417条码最大的优势在于其庞大的数据容量和极强的纠错能力
在这里插入图片描述
场景:详见 https://baike.baidu.com/item/PDF417%E4%BA%8C%E7%BB%B4%E6%9D%A1%E7%A0%81/6054434?fr=aladdin#9


11. RSS_14 And RSS_EXPANDED

RSS系列条码是一维码和二维码的组合码。
在这里插入图片描述
场景:非常小的产品项目


12. UPC-A And UPC_E

UPC-A 条码是美国较常用也较被广泛认可的条码类型。它主要用于零售行业,例如杂货店。UPC-A 由统一杂货产品代码委员会与 IBM 联合开发,自 1974 年开始使用。首例被扫描的 UPC 条码是一包箭牌果味口香糖。这包口香糖后来被陈列在史密森尼博物馆。
UPC-A 条码由 12 位组成。开头是个单数字系统字符,指示条码的分类方式:普通产品、加权项目、药物、优惠等。后面是个五位的制造商代码,接下来是个五位的产品代码,最后是个校验位。每位由不同宽度的两个条纹和两个空格的独有标识样式表示。除了数字之外,不能使用任何字母或其他特殊字符。
在这里插入图片描述
UPC-E 条码是一款通用产品条码,在美国应用较广泛。UPC-E 是标准尺寸的 UPC-A 数字条码的压缩版,用于国内的杂货店和其他零售场所。压缩版主要用于包装上没有足够面积显示全尺寸 UPC-A 条码的小尺寸产品。
UPC-E 条码只有UPC-A 的一半大小,即6 位。除此之外,这两种条码的结构相似,开头一位指示被扫描产品的类型(普通产品、优惠、加权产品等),后面是制造商代码、产品代码以及保证准确性的校验位。UPC-E 的尺寸之所以减小是因为它删掉了全尺寸代码中的所有额外的零:即产品代码前和制造商代码后面的零。
在这里插入图片描述


13.QR_CODE

QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
这个网上有很多资料,不多加解释。


(二)代码实现

AZTEC

//编码内容
String contents = "hello";
//编码方式
BarcodeFormat format = BarcodeFormat.AZTEC;
//宽度
int width = 150;
//高度
int height = 150;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");
hints.put(EncodeHintType.AZTEC_LAYERS, -1);

BitMatrix bitMatrix = new AztecWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\" + UUID.randomUUID() + ".png");
ImageIO.write(bufferedImage, "png", file);
Codabar


//编码内容
String contents = "15900000000";
//编码方式
BarcodeFormat format = BarcodeFormat.CODABAR;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new CodaBarWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\CODABAR.png");
ImageIO.write(bufferedImage, "png", file);
CODE_39

//编码内容
String contents = "15900000000";
//编码方式
BarcodeFormat format = BarcodeFormat.CODE_39;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new Code39Writer().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\CODE_39.png");
ImageIO.write(bufferedImage, "png", file);
CODE_93


//编码内容
String contents = "hello";
//编码方式
BarcodeFormat format = BarcodeFormat.CODE_93;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new Code93Writer().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\CODE_93.png");
ImageIO.write(bufferedImage, "png", file);

CODE_128


//编码内容
String contents = "hello";
//编码方式
BarcodeFormat format = BarcodeFormat.CODE_128;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new Code128Writer().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\CODE_128.png");
ImageIO.write(bufferedImage, "png", file);

DATA_MATRIX


//编码内容
String contents = "hello";
//编码方式
BarcodeFormat format = BarcodeFormat.DATA_MATRIX;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new DataMatrixWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\DATA_MATRIX.png");
ImageIO.write(bufferedImage, "png", file);

EAN_8 和 EAN_13


//编码内容
//690表示国家代码:中华人民共和国
//1234表示生产商代码
//56789表示产品代码
String contents = "690123456789";
//编码方式
BarcodeFormat format = BarcodeFormat.EAN_13;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new EAN13Writer().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\EAN_13.png");
ImageIO.write(bufferedImage, "png", file);

ITF


//编码内容
String contents = "0053611912";
//编码方式
BarcodeFormat format = BarcodeFormat.ITF;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new ITFWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\ITF.png");
ImageIO.write(bufferedImage, "png", file);

PDF417


//编码内容
String contents = "hello";
//编码方式
BarcodeFormat format = BarcodeFormat.PDF_417;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");
//是否使用紧凑模式
hints.put(EncodeHintType.PDF417_COMPACT, true);
//使用什么压缩模式
hints.put(EncodeHintType.PDF417_COMPACTION, Compaction.AUTO);
//最小和最大行数和列数
Dimensions dimensions = new Dimensions(1,10, 1, 10);
hints.put(EncodeHintType.PDF417_DIMENSIONS, dimensions);

BitMatrix bitMatrix = new PDF417Writer().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\PDF_417.png");
ImageIO.write(bufferedImage, "png", file);

UPC-A


//编码内容
String contents = "12345678790";
//编码方式
BarcodeFormat format = BarcodeFormat.UPC_A;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new UPCAWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\UPC_A.png");
ImageIO.write(bufferedImage, "png", file);

 UPC_E


//编码内容
String contents = "00123457";
//编码方式
BarcodeFormat format = BarcodeFormat.UPC_E;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");

BitMatrix bitMatrix = new UPCEWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\UPC_E.png");
ImageIO.write(bufferedImage, "png", file);

QR_CODE


//编码内容
String contents = "hello 您好";
//编码方式
BarcodeFormat format = BarcodeFormat.QR_CODE;
//宽度
int width = 250;
//高度
int height = 250;
//额外参数
final Map<EncodeHintType,Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf8");
//指定要编码的二维码的准确版本 越大二维码可容纳的数据越大
hints.put(EncodeHintType.QR_VERSION, 1);

BitMatrix bitMatrix = new QRCodeWriter().encode(contents, format, width, height, hints);

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

File file = new File("C:\\Users\\ChenXiaoHui\\Desktop\\QrCode\\QR_CODE.png");
ImageIO.write(bufferedImage, "png", file);


(三)对QrCode二维码的额外参数的说明

EncodeHintType

1. ERROR_CORRECTION

指定要使用的错误纠正程度
类型取决于编码器,例如:QrCode的类型是**ErrorCorrectionLevel**,Aztec的类型是Integer。

2. CHARACTER_SET

指定在适用的情况下使用什么字符编码。(类型为String)。

3. DATA_MATRIX_SHAPE

指定数据矩阵的矩阵形状。(类型为 SymbolShapeHint)。

4. MIN_SIZE 弃用
5. MAX_SIZE 弃用
6. MARGIN

指定生成条形码时使用的空白(以像素为单位)。其意义因格式而异;例如,对于大多数1D格式,它水平地控制条形码前后的空白。(类型为Integer,或整数值的字符串表示形式)。范围为0 - 4

7. PDF417_COMPACT (PDF417:一种二维码)

指定PDF417是否使用紧凑模式(类型为Boolean,或者是"true""false"的字符串)。

8. PDF417_COMPACTION

指定要为PDF417使用什么压缩模式。(类型为Compaction或者是字符串)。

9. PDF417_DIMENSIONS

指定PDF417(类型维度)的最小和最大行数和列数。(类型为Dimensions)。

10. AZTEC_LAYERS(AZTEC 一种二维码)

指定AZTEC二维码所需的层数。
负数(-1、-2、-3、-4)指定一个紧凑的AZTEC二维码。表示使用最小层数(默认)。正数(1、2、3…)指定一个正常的(非紧凑的)阿兹特克代码。(类型为整型,或整型值的字符串)。

11. QR_VERSION

指定要编码的二维码的准确版本。(类型为Integer,或整数值的字符串表示形式)。

12. GS1_FORMAT

指定数据是否应该编码为GS1标准。(类型为Boolean,或者是"true""false"的字符串)。




如果本文有什么有误的,请在评论区指出,我将在看到的第一时间回复验证并修改

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
你可以使用zxing这个开源库来生成二维码。以下是使用Java代码生成二维码的示例: 1. 假设你已经将zxing库添加到了你的项目中,首先需要引入相关的类: ```java import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.common.BitMatrix; import com.google.zxing.client.j2se.MatrixToImageWriter; ``` 2. 然后就可以使用下面的代码来生成二维码: ```java String qrCodeText = "http://www.example.com"; int size = 250; String fileType = "png"; File qrFile = new File("D:/qr.png"); createQRCode(qrFile, qrCodeText, size, fileType); // 生成二维码的方法 public static void createQRCode(File qrFile, String qrCodeText, int size, String fileType) throws WriterException, IOException { // 设置二维码参数 HashMap<EncodeHintType, Object> hintMap = new HashMap<EncodeHintType, Object>(); hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); hintMap.put(EncodeHintType.CHARACTER_SET, "UTF-8"); QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(qrCodeText, BarcodeFormat.QR_CODE, size, size, hintMap); MatrixToImageWriter.writeToFile(bitMatrix, fileType, qrFile); } ``` 在上面的代码中,`qrCodeText`是要生成二维码的文本内容,`size`是二维码的大小,`fileType`是要生成二维码图片的格式,`qrFile`是生成二维码图片文件。 你可以根据自己的需要修改上面的代码,比如可以将生成二维码保存到服务器上,或者在Android平台上使用zxing生成二维码等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值