二维码

发布于 2019-12-25  120 次阅读


了解一下二维码相关的知识

一维码

介绍

首先,一维码的组成:

那么常见的一维码有:
EAN码、39码、交叉25码、UPC码、128码、93码,ISBN码,及Codabar(库德巴码)等。

EAN 码:是国际通用的符号体系,是一种长度固定、无含意的条码,所表达的 信息全部为数字,主要应用于商品标识。
39码和128码:为目前国内企业内部自定义码制,可以根据需要确定条码的长度和信息,它编码的信息可以是数字,也可以包含字母,主要应用于工业生产线领域、图书管理等。
93码:是一种类似于39码的条码,它的密度较高,能够替代39码。
25码:主要应用于包装、运输以及国际航空系统的机票顺序编号等。
Codabar码:应用于血库、图书馆、包裹等的跟踪管理。
ISBN:用于图书管理。

我们日常生活中,其实39码使用的最为广泛,那接下来我们看看39码是如何实现的吧!!

39码条形码的实现

我们都知道,条形码是由黑色和白色组成。那我们就可以将黑色看成1,把白色看成0,这样这么一串条形码就可以转换成一串二进制数了。
然后我们规定,其中一段代表起始符,一段代表终止符,其他的都是数据,然后将将这些数据划分,转换为相应的数字,符号,字母。
那么我们就看一下,各个二进制数都代表什么含义吧
起始符/终止符:010010100
0 : "000110100"
1 : "100100001"
2 : "001100001"
3 : "101100000"
4 : "000110001"
5 : "100110000"
6 : "001110000"
7 : "000100101"
8 : "100100100"
9 : "001100100"
A : "100001001"
B : "001001001"
C : "101001000"
D : "000011001"
E : "100011000"
F : "001011000"
G : "000001101"
H : "100001100"
I : "001001100"
J : "000011100"
K : "100000011"
L : "001000011"
M : "101000010"
N : "000010011"
O : "100010010"
P : "001010010"
Q : "000000111"
R : "100000110"
S : "001000110"
T : "000010110"
U : "110000001"
V : "011000001"
W : "111000000"
X : "010010001"
Y : "110010000"
Z : "011010000"
- : "010000101"
. : "110000100"
空格: "011000100"
$ : "010101000"
/ : "010100010"
+ : "010001010"
% : "000101010"
* : "010010100"

根据这套编码,我们就可以自己用画图或ps等画图软件画出一份简单的一维码(39码),然后就可以让别人拿着扫码枪,或者手机进行扫描了。
就比如:

当然你也可以自己写一份程序,动态的生成二维码

二维码

现在我们知道了一维码的基本原理了,对于二维码的原理理解起来也就更加容易些了,简单点说其实就是多个一维码组合在一起。

组成成份看起来比较复杂,其实简化一下,主要就分为两大部分,定位用的三个大方块、由很多个黑白小方块组成的数据区。
那么我们先了解一下顶角的三个大方块是如何进行定位的。
首先通过这三个图案,我们可以确定这个二维码的整体大小,然后通过它们的位置我们可以知道这个正方形的朝向,这样就确定了这段数据的起始位置,以及二维码的方向。扫描时,再通过两条黑白相间的基准线来防止扫歪。

现在,我们把目光投向数据区,看看这些数据又是如何进行读取的。

从这张图,我们可以看出数据区是从右下角开始,按照红线顺序进行读取,直到左下角结束。那么这些数据是如何实现编码,最后变成二进制存储在这个方阵中呢?
其实它的实现还是比较繁琐的。首先需要需要将数据转换为对应的数字,然后对每个数据块添加校错码,然后将这些数据块组合后,与掩码图案进行掩码,最终才得出相应的二维码。(具体怎样实现没有具体研究,毕竟这方面的库还是满全的)

如果想要看具体如何实现的可以参考这篇博客
https://blog.csdn.net/xiaomin2sherry/article/details/45151889?utm_source=itdadao&utm_medium=referral
当然你也可以直接参考官方文档

那么最后一个问题,我们平常看到的二维码的右下角,有时会有一个小方块,那么这个方块的作用又有什么用呢?
通过上面的图,我们可以得知这个小方块名字就是校正图形。
校正图形顾名思义,就是用来当数据区有所污染、扭曲、损坏时,对数据进行一定程度的校正。

如果你想自己生成二维码,你可以考虑使用Zxing开源库,里面的方法实现给我的感觉还是满全,或者直接通过网页上工具比如:sojson


你能得到多少,往往取决于你能知道多少