所謂條形碼
一、條碼
條形碼,從外形看是一條條粗細,彼此間間隔不同的線段。正是由于這兩個特點,可用來表示若幹字元。
常用的條形碼編碼格式有
Code39
,
Code128
。一般的39碼可表示44種字元
可表示字元 | 表示意義 | 二進制碼 |
101001101101 | ||
1 | 110100101011 | |
2 | 101100101011 | |
3 | 110110010101 | |
4 | 101001101011 | |
5 | 110100110101 | |
6 | 101100110101 | |
7 | 101001011011 | |
8 | 110100101101 | |
9 | 101100101101 | |
A | 110101001011 | |
B | 101101001011 | |
C | 110110100101 | |
D | 101011001011 | |
E | 110101100101 | |
F | 101101100101 | |
G | 101010011011 | |
H | 110101001101 | |
I | 101101001101 | |
J | 101011001101 | |
K | 110101010011 | |
L | 101101010011 | |
M | 110110101001 | |
N | 101011010011 | |
O | 110101101001 | |
P | 101101101001 | |
Q | 101010110011 | |
R | 110101011001 | |
S | 101101011001 | |
T | 101011011001 | |
U | 110010101011 | |
V | 100110101011 | |
W | 110011010101 | |
X | 100101101011 | |
Y | 110010110101 | |
Z | 100110110101 | |
- | 100101011011 | |
. | 點 | 110010101101 |
空字元 | 100110101101 | |
$ | 100100100101 | |
/ | 100100101001 | |
+ | 100101001001 | |
% | 101001001001 | |
* | 100101101101 |
顯然,若無需表示複雜的字元,例如隻需要用一定規則排列的數字表示資訊時,用Code39碼就OK了。但是,實際需要編碼的字元往往不隻這基本的44個字元。為滿足需要,出現了擴充的Code39碼。擴充後的Code39碼能表示128種字元
表示的字元 | 編碼 | 表示的字元 | 編碼 | 表示的字元 | 編碼 | 表示的字元 | 編碼 |
NUL | %U | SP | Space | @ | %V | ` | %W |
SOH | $A | ! | /A | A | A | a | +A |
STX | $B | “ | /B | B | B | b | +B |
ETX | $C | # | /C | C | C | c | +C |
EOT | D| D | | /D | D | D | d | +D | |
ENQ | $E | % | /E | E | E | e | +E |
ACK | $F | & | /F | F | F | f | +F |
BEL | $G | ‘ | /G | G | G | g | +G |
BS | $H | ( | /H | H | H | H | H |
HT | $I | ) | /I | I | I | i | +I |
LF | $J | * | /J | J | J | j | +J |
VT | $K | + | /K | K | K | k | +K |
FF | $L | , | /L | L | L | l | +L |
CR | $M | - | - | M | M | m | +M |
SO | $N | . | . | N | N | n | +N |
SI | $O | / | /O | O | O | o | +O |
DLE | $P | P | P | p | +P | ||
DC1 | $Q | 1 | 1 | Q | Q | q | +Q |
DC2 | $R | 2 | 2 | R | R | r | +R |
DC3 | $S | 3 | 3 | S | S | s | +S |
DC4 | $T | 4 | 4 | T | T | t | +T |
NAK | $U | 5 | 5 | U | U | u | +U |
SYN | $V | 6 | 6 | V | V | v | +V |
ETB | $W | 7 | 7 | W | W | w | +W |
CAN | $X | 8 | 8 | X | X | x | +X |
EM | $Y | 9 | 9 | Y | Y | y | +Y |
SUB | $Z | : | /Z | Z | Z | z | +Z |
ESC | %A | ; | %F | [ | %K | { | %P |
FS | %B | << | %G | \ | %L | | | %Q |
GS | %C | = | %H | ] | %M | } | %R |
RS | %D | > | %I | ^ | %N | ~ | %S |
US | %E | ? | %J | _ | %O | DEL | %T, %X, %Y, %Z |
Code128碼能表示128種字元。Code128與擴充後的Code39都能表示128種字元,差別在于其編碼規則不同。由于編碼規則不同,是以産生的條碼線的粗細,間隔都有差别。
二、識别裝置
能夠識别條碼的裝置。常見的是掃碼槍。掃碼槍識别條碼的原理是利用光的反射。掃碼槍會發出一道光,打到條碼上後,黑色的條碼線會吸收掉這段光波,而沒被吸收的部分将傳回到感應器。通過晶片(解碼規則)處理得到的間斷資訊。于是這段條碼的含義就被明确了。是以,若掃碼槍與條碼編碼不對應,即加密與解密的規則不一緻,當然就出現無法識别條碼的現象了。
而現在的手機應用,如微信也能識别條碼。識别的原理與第一種是不一樣的。打開微信掃描條碼,攝像頭本身并沒發光,但微信程式卻成功地識别出條碼表示的含義。很顯然,這是采用圖像識别的技術。雖然第一種方法也有圖像識别的意味,甚至也可以稱為圖像識别。但是後者卻是标标準準的圖像識别。推測微信程式首先會捕獲目标條碼,之後盡可能地增大色差,使得條碼線色與背景色能夠更加容易地差別開。然後關鍵是要處理條碼線的寬度與間隙寬度,再從中解密得到正确的資訊,是以就必然要檢測像素。檢測時也沒必要對整個圖檔進行處理,實際上隻需要截取有限高度的整段條碼即可。因為條碼是根據條碼線寬度與間隙表示資訊的。而因為一般商品的條碼編碼規則已經受到國家規範,是以實際上很容易解密出商品下方的字元碼(正确的資訊)。當然,這些識别過程不可能在本地完成的,因為牽扯到複雜的計算,放在本地計算無疑十分消耗使用者CPU。使用者也不樂意為此承擔複雜的計算。