条码识别

条码是将线条与空白按照一定的编码规则组合起来的符号,用以代表一定的字母、数字等资料。
世界上约有225种以上的一维条码,每一种一维条码都有自己的一套编码规格,规定每个字母(可能是文字或数字)是由几个线条(Bar)及几个空白(Space)组成,以及字母的排列。一般较流行的一维条码有39码、EAN码、UPC码、128码等。

通常一个完整的条码是由两侧的静空区、起始码、资料码、检查码、终止码组成,以一条一维码而言,其排列方式通常如下所示:
静空区
起始码
资料码
检查码
终止码
静空区
①静空区:位于条码两侧无任何符号及资讯的白色区域
②起始码:纸条码符号的第一位字码,用来表示一个条码符号的开始
③资料码:位于起始码后面的字码,用来标识一个条码的具体数值
④检查码:用来判定此次读码是否正确的字码,通常是一种算术运算的结果

我想识别的是Code128码。
Code128码也遵循上面的条码的结构。其中检查码可有可无。
Code128码是一种长度可变,连续性的字母数字条码,可以支持不同的编码方式,因此其应用弹性也比较大。
Code128码有三种不同的编码方式,具体选用1哪种编码方式是由起始码决定的
编码类型
逻辑形态
相对值
CODE A
11010000100
103
CODE B
11010010000
104
CODE C
11010011100
105
无论是采用A、B、C何种编码方式,Code128码的终止码均为固定的一种型态,其逻辑型态皆为1100011101011。

下面就是一个Code128码的例子

我们可以看到,不论是线条还是空白区域,都有四种不同的宽度,从细到粗我们可以分别设它们为1,2,3,4。
6位分为一块可得如下结果,为了便于观看我把条形码的白色区域用红色表示了。。。

第一部分起始码是211232,查本文最后的Code128编码表可知其对应StartC,表明该条码为Code128C。
起始码之后是资料码的区域,查表可知其分别对应,00、00、00、46、98、22。
倒数第二位是校验码,421112对应着87。那么87又是怎么算出来的呢~
校验位是通过MOD103算法计算而出的
211232
212222
212222
212222
113321
411311
223112
105
00
00
00
46
98
22
位置
--- 1
2
3
4
5
6
((∑(值*位置))+ 起始码 )MOD 103的结果就是校验位
(105+46*4+98*5+22*6) MOD 103 = 911 MOD 103 = 87
最后一位结束位是2331112,查表可知其对应这Stop,表明条码读取结束。


Code128编码表:

ID

Code128A

Code128B

Code128C

BandCode

0

SP 

SP

0

212222

1

!

!

1

222122

2

"

"

2

222221

3

#

#

3

121223

4

$

$

4

121322

5

%

%

5

131222

6

&

&

6

122213

7

'

'

7

122312

8

(

(

8

132212

9

)

)

9

221213

10

*

*

10

221312

11

+

+

11

231212

12

,

,

12

112232

13

-

-

13

122132

14

.

.

14

122231

15

/

/

15

113222

16

0

0

16

123122

17

1

1

17

123221

18

2

2

18

223211

19

3

3

19

221132

20

4

4

20

221231

21

5

5

21

213212

22

6

6

22

223112

23

7

7

23

312131

24

8

8

24

311222

25

9

9

25

321122

26

:

:

26

321221

27

;

;

27

312212

28

28

322112

29

=

=

29

322211

30

30

212123

31

?

?

31

212321

32

@

@

32

232121

33

A

A

33

111323

34

B

B

34

131123

35

C

C

35

131321

36

D

D

36

112313

37

E

E

37

132113

38

F

F

38

132311

39

G

G

39

211313

40

H

H

40

231113

41

I

I

41

231311

42

J

J

42

112133

43

K

K

43

112331

44

L

L

44

132131

45

M

M

45

113123

46

N

N

46

113321

47

O

O

47

133121

48

P

P

48

313121

49

Q

Q

49

211331

50

R

R

50

231131

51

S

S

51

213113

52

T

T

52

213311

53

U

U

53

213131

54

V

V

54

311123

55

W

W

55

311321

56

X

X

56

331121

57

Y

Y

57

312113

58

Z

Z

58

312311

59

[

[

59

332111

60

\

\

60

314111

61

]

]

61

221411

62

^

^

62

431111

63

_

_

63

111224

64

NUL

`

64

111422

65

SOH

a

65

121124

66

STX

b

66

121421

67

ETX

c

67

141122

68

EOT

d

68

141221

69

ENQ

e

69

112214

70

ACK

f

70

112412

71

BEL

g

71

122114

72

BS

h

72

122411

73

HT

i

73

142112

74

LF

j

74

142211

75

VT

k

75

241211

76

FF

I

76

221114

77

CR

m

77

413111

78

SO

n

78

241112

79

SI

o

79

134111

80

DLE

p

80

111242

81

DC1

q

81

121142

82

DC2

r

82

121241

83

DC3

s

83

114212

84

DC4

t

84

124112

85

NAK

u

85

124211

86

SYN

v

86

411212

87

ETB

w

87

421112

88

CAN

x

88

421211

89

EM

y

89

212141

90

SUB

z

90

214121

91

ESC

{

91

412121

92

FS

|

92

111143

93

GS

}

93

111341

94

RS

~

94

131141

95

US

DEL

95

114113

96

FNC3

FNC3

96

114311

97

FNC2

FNC2

97

411113

98

SHIFT

SHIFT

98

411311

99

CODEC

CODEC

99

113141

100

CODEB

FNC4

CODEB

114131

101

FNC4

CODEA

CODEA

311141

102

FNC1

FNC1

FNC1

411131

103

StartA

StartA

StartA

211412

104

StartB

StartB

StartB

211214

105

StartC

StartC

StartC

211232

106

Stop

Stop

Stop

2331112












猜你喜欢

转载自blog.csdn.net/u013162930/article/details/51969994