barcodes 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -0
- data/README.md +24 -24
- data/Rakefile +6 -0
- data/barcodes.gemspec +6 -0
- data/lib/barcodes.rb +52 -0
- data/lib/barcodes/exec.rb +52 -31
- data/lib/barcodes/renderer.rb +6 -0
- data/lib/barcodes/renderer/ascii.rb +7 -0
- data/lib/barcodes/renderer/pdf.rb +6 -0
- data/lib/barcodes/symbology.rb +6 -0
- data/lib/barcodes/symbology/base.rb +55 -15
- data/lib/barcodes/symbology/codabar.rb +23 -0
- data/lib/barcodes/symbology/code11.rb +18 -0
- data/lib/barcodes/symbology/code128.rb +44 -5
- data/lib/barcodes/symbology/code39.rb +21 -0
- data/lib/barcodes/symbology/code39extended.rb +12 -0
- data/lib/barcodes/symbology/code39extendedmod43.rb +14 -0
- data/lib/barcodes/symbology/code39mod43.rb +14 -0
- data/lib/barcodes/symbology/code93.rb +23 -0
- data/lib/barcodes/symbology/code93extended.rb +17 -1
- data/lib/barcodes/symbology/ean.rb +28 -1
- data/lib/barcodes/symbology/ean13.rb +17 -0
- data/lib/barcodes/symbology/ean8.rb +18 -0
- data/lib/barcodes/symbology/interleaved2of5.rb +18 -0
- data/lib/barcodes/symbology/interleaved2of5mod10.rb +14 -0
- data/lib/barcodes/symbology/msi.rb +16 -0
- data/lib/barcodes/symbology/msimod10.rb +14 -0
- data/lib/barcodes/symbology/msimod11.rb +14 -0
- data/lib/barcodes/symbology/planet.rb +24 -1
- data/lib/barcodes/symbology/postnet.rb +24 -1
- data/lib/barcodes/symbology/standard2of5.rb +16 -0
- data/lib/barcodes/symbology/standard2of5mod10.rb +14 -0
- data/lib/barcodes/symbology/upca.rb +16 -0
- data/lib/barcodes/version.rb +9 -1
- data/spec/barcodes/exec_spec.rb +7 -1
- data/spec/barcodes/renderer/ascii_spec.rb +6 -0
- data/spec/barcodes/renderer/pdf_spec.rb +6 -0
- data/spec/barcodes/symbology/base_spec.rb +6 -0
- data/spec/barcodes/symbology/codabar_spec.rb +6 -0
- data/spec/barcodes/symbology/code11_spec.rb +6 -0
- data/spec/barcodes/symbology/code128_spec.rb +6 -0
- data/spec/barcodes/symbology/code39_spec.rb +6 -0
- data/spec/barcodes/symbology/code39extended_spec.rb +6 -0
- data/spec/barcodes/symbology/code39extendedmod43_spec.rb +6 -0
- data/spec/barcodes/symbology/code39mod43_spec.rb +6 -0
- data/spec/barcodes/symbology/code93_spec.rb +6 -0
- data/spec/barcodes/symbology/code93extended_spec.rb +6 -0
- data/spec/barcodes/symbology/ean13_spec.rb +6 -0
- data/spec/barcodes/symbology/ean8_spec.rb +6 -0
- data/spec/barcodes/symbology/ean_spec.rb +6 -0
- data/spec/barcodes/symbology/interleaved2of5_spec.rb +6 -0
- data/spec/barcodes/symbology/interleaved2of5mod10_spec.rb +6 -0
- data/spec/barcodes/symbology/msi_spec.rb +6 -0
- data/spec/barcodes/symbology/msimod10_spec.rb +6 -0
- data/spec/barcodes/symbology/msimod11_spec.rb +6 -0
- data/spec/barcodes/symbology/planet_spec.rb +6 -0
- data/spec/barcodes/symbology/postnet_spec.rb +6 -0
- data/spec/barcodes/symbology/standard2of5_spec.rb +6 -0
- data/spec/barcodes/symbology/standard2of5mod10_spec.rb +6 -0
- data/spec/barcodes/symbology/upca_spec.rb +6 -0
- data/spec/barcodes_spec.rb +6 -0
- data/spec/spec_helper.rb +6 -0
- metadata +8 -8
@@ -1,12 +1,26 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/base'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This is the base class for all EAN type (EAN8, EAN13, UPC-A) barcode symbologies.
|
13
|
+
# EAN type barcodes can encode only the numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/European_Article_Number
|
5
16
|
class Ean < Base
|
17
|
+
|
18
|
+
# EAN character set
|
6
19
|
def self.charset
|
7
20
|
['0','1','2','3','4','5','6','7','8','9','S','C'].collect {|c| c.bytes.to_a[0] }
|
8
21
|
end
|
9
22
|
|
23
|
+
# EAN parity values table
|
10
24
|
def self.parity
|
11
25
|
[
|
12
26
|
"000000", "001011", "001101", "001110",
|
@@ -15,6 +29,7 @@ module Barcodes
|
|
15
29
|
]
|
16
30
|
end
|
17
31
|
|
32
|
+
# EAN left hand even values table
|
18
33
|
def self.left_hand_even
|
19
34
|
[
|
20
35
|
"0001101", "0011001", "0010011", "0111101",
|
@@ -23,6 +38,7 @@ module Barcodes
|
|
23
38
|
]
|
24
39
|
end
|
25
40
|
|
41
|
+
# EAN left hand odd values table
|
26
42
|
def self.left_hand_odd
|
27
43
|
[
|
28
44
|
"0100111", "0110011", "0011011", "0100001",
|
@@ -31,6 +47,7 @@ module Barcodes
|
|
31
47
|
]
|
32
48
|
end
|
33
49
|
|
50
|
+
# EAN right hand values table
|
34
51
|
def self.right_hand
|
35
52
|
[
|
36
53
|
"1110010", "1100110", "1101100", "1000010",
|
@@ -39,10 +56,12 @@ module Barcodes
|
|
39
56
|
]
|
40
57
|
end
|
41
58
|
|
59
|
+
# EAN uses special value sets so this returns an empty array
|
42
60
|
def self.valueset
|
43
61
|
[]
|
44
62
|
end
|
45
63
|
|
64
|
+
# Creates a new EAN instance
|
46
65
|
def initialize(args={})
|
47
66
|
super(args)
|
48
67
|
|
@@ -51,10 +70,12 @@ module Barcodes
|
|
51
70
|
@center_character = 'C'
|
52
71
|
end
|
53
72
|
|
73
|
+
# Returns data + checksum
|
54
74
|
def caption_data
|
55
75
|
@data + self.checksum
|
56
76
|
end
|
57
77
|
|
78
|
+
# Encodes data into 1's and 0's
|
58
79
|
def encoded_data
|
59
80
|
if self.valid?
|
60
81
|
formatted_data = self.formatted_data
|
@@ -83,10 +104,12 @@ module Barcodes
|
|
83
104
|
end
|
84
105
|
end
|
85
106
|
|
107
|
+
# EAN uses quiet zone that is 9 times the bar width in mils
|
86
108
|
def quiet_zone_width
|
87
109
|
self.bar_width * 9
|
88
110
|
end
|
89
111
|
|
112
|
+
# Calculates the checksum
|
90
113
|
def checksum
|
91
114
|
if self.valid?
|
92
115
|
sum = 0
|
@@ -108,6 +131,7 @@ module Barcodes
|
|
108
131
|
end
|
109
132
|
end
|
110
133
|
|
134
|
+
# Validates barcode using provided data
|
111
135
|
def valid?
|
112
136
|
self.data.each_byte do |char|
|
113
137
|
if char.chr == 'S' || char.chr == 'C'
|
@@ -121,6 +145,7 @@ module Barcodes
|
|
121
145
|
|
122
146
|
protected
|
123
147
|
|
148
|
+
# Encodes a single given character (as ASCII integer) using the given parity (1,0)
|
124
149
|
def _encode_character_with_parity(character, parity)
|
125
150
|
if self.class.charset.include? character
|
126
151
|
if parity.to_i.even?
|
@@ -133,6 +158,7 @@ module Barcodes
|
|
133
158
|
end
|
134
159
|
end
|
135
160
|
|
161
|
+
# Encodes a single given character (as ASCII integer) using right hand values table
|
136
162
|
def _encode_character_with_right_hand(character)
|
137
163
|
if self.class.charset.include? character
|
138
164
|
self.class.right_hand.at(self.class.charset.index(character))
|
@@ -140,7 +166,8 @@ module Barcodes
|
|
140
166
|
return nil
|
141
167
|
end
|
142
168
|
end
|
143
|
-
|
169
|
+
|
170
|
+
# Returns nil
|
144
171
|
def _encode_character(character)
|
145
172
|
nil
|
146
173
|
end
|
@@ -1,8 +1,21 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/ean'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the EAN13 symbology
|
13
|
+
# EAN13 can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/International_Article_Number_(EAN)
|
5
16
|
class Ean13 < Ean
|
17
|
+
|
18
|
+
# Creates a new Ean13 instance
|
6
19
|
def initialize(args={})
|
7
20
|
unless args.has_key? :data
|
8
21
|
args[:data] = '012345678999'
|
@@ -11,10 +24,14 @@ module Barcodes
|
|
11
24
|
super(args)
|
12
25
|
end
|
13
26
|
|
27
|
+
# Returns start character + data + center character + data + checksum + stop character
|
14
28
|
def formatted_data
|
15
29
|
@start_character + @data[0..6] + @center_character + @data[7..12] + self.checksum + @stop_character
|
16
30
|
end
|
17
31
|
|
32
|
+
# Determines whether or not the barcode data to be encoded
|
33
|
+
# is valid.
|
34
|
+
# Data length must be exactly 12 digits
|
18
35
|
def valid?
|
19
36
|
unless super
|
20
37
|
return false
|
@@ -1,8 +1,21 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/ean'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the EAN8 symbology
|
13
|
+
# EAN8 can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/International_Article_Number_(EAN)
|
5
16
|
class Ean8 < Ean
|
17
|
+
|
18
|
+
# Creates a new Ean13 instance
|
6
19
|
def initialize(args={})
|
7
20
|
unless args.has_key? :data
|
8
21
|
args[:data] = '0123456'
|
@@ -11,10 +24,12 @@ module Barcodes
|
|
11
24
|
super(args)
|
12
25
|
end
|
13
26
|
|
27
|
+
# Returns start character + data + center character + data + checksum + stop character
|
14
28
|
def formatted_data
|
15
29
|
@start_character + @data[0..3] + @center_character + @data[4..6] + self.checksum + @stop_character
|
16
30
|
end
|
17
31
|
|
32
|
+
# Encodes data into 1's and 0's
|
18
33
|
def encoded_data
|
19
34
|
if self.valid?
|
20
35
|
formatted_data = self.formatted_data
|
@@ -38,6 +53,9 @@ module Barcodes
|
|
38
53
|
end
|
39
54
|
end
|
40
55
|
|
56
|
+
# Determines whether or not the barcode data to be encoded
|
57
|
+
# is valid.
|
58
|
+
# Data length must be exactly 7 digits
|
41
59
|
def valid?
|
42
60
|
unless super
|
43
61
|
return false
|
@@ -1,12 +1,26 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/base'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the Interleaved 2 of 5 symbology
|
13
|
+
# Interleaved 2 of 5 can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/Interleaved_2_of_5
|
5
16
|
class Interleaved2Of5 < Base
|
17
|
+
|
18
|
+
# Interleaved 2 of 5 character set
|
6
19
|
def self.charset
|
7
20
|
['0','1','2','3','4','5','6','7','8','9','S','E'].collect {|c| c.bytes.to_a[0] }
|
8
21
|
end
|
9
22
|
|
23
|
+
# Interleaved 2 of 5 values set
|
10
24
|
def self.valueset
|
11
25
|
[
|
12
26
|
'101011011010','110101010110','101101010110','110110101010',
|
@@ -15,6 +29,9 @@ module Barcodes
|
|
15
29
|
]
|
16
30
|
end
|
17
31
|
|
32
|
+
# Creates a new Interleaved2Of5 instance
|
33
|
+
# Interleaved 2 of 5 must have the start and stop characters
|
34
|
+
# 'S' and 'E' so they are overridden here.
|
18
35
|
def initialize(args={})
|
19
36
|
super(args)
|
20
37
|
|
@@ -22,6 +39,7 @@ module Barcodes
|
|
22
39
|
@stop_character = 'E'
|
23
40
|
end
|
24
41
|
|
42
|
+
# Returns start character + data + stop character
|
25
43
|
def formatted_data
|
26
44
|
@start_character + @data + @stop_character
|
27
45
|
end
|
@@ -1,8 +1,21 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/interleaved2of5'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the Interleaved 2 of 5 Mod 10 symbology
|
13
|
+
# Interleaved 2 of 5 Mod 10 can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/Interleaved_2_of_5
|
5
16
|
class Interleaved2Of5Mod10 < Interleaved2Of5
|
17
|
+
|
18
|
+
# Returns start character + data + checksum + stop character
|
6
19
|
def formatted_data
|
7
20
|
checksum = self.checksum
|
8
21
|
unless checksum.nil?
|
@@ -10,6 +23,7 @@ module Barcodes
|
|
10
23
|
end
|
11
24
|
end
|
12
25
|
|
26
|
+
# Calculates the checksum using provided data
|
13
27
|
def checksum
|
14
28
|
even_sum = 0
|
15
29
|
odd_sum = 0
|
@@ -1,12 +1,26 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/base'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the MSI symbology
|
13
|
+
# MSI can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/MSI_Barcode
|
5
16
|
class Msi < Base
|
17
|
+
|
18
|
+
# MSI character set
|
6
19
|
def self.charset
|
7
20
|
['0','1','2','3','4','5','6','7','8','9','S','E'].collect {|c| c.bytes.to_a[0] }
|
8
21
|
end
|
9
22
|
|
23
|
+
# MSI values set
|
10
24
|
def self.valueset
|
11
25
|
[
|
12
26
|
'100100100100','100100100110','100100110100','100100110110',
|
@@ -15,6 +29,7 @@ module Barcodes
|
|
15
29
|
]
|
16
30
|
end
|
17
31
|
|
32
|
+
# Creates a new Msi instance
|
18
33
|
def initialize(args={})
|
19
34
|
super(args)
|
20
35
|
|
@@ -22,6 +37,7 @@ module Barcodes
|
|
22
37
|
@stop_character = 'E'
|
23
38
|
end
|
24
39
|
|
40
|
+
# Returns start character + data + stop character
|
25
41
|
def formatted_data
|
26
42
|
@start_character + @data + @stop_character
|
27
43
|
end
|
@@ -1,8 +1,21 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/msi'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the MSI Mod 10 symbology
|
13
|
+
# MSI Mod 10 can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/MSI_Barcode
|
5
16
|
class MsiMod10 < Msi
|
17
|
+
|
18
|
+
# Returns start character + data + checksum + stop character
|
6
19
|
def formatted_data
|
7
20
|
checksum = self.checksum
|
8
21
|
unless checksum.nil?
|
@@ -10,6 +23,7 @@ module Barcodes
|
|
10
23
|
end
|
11
24
|
end
|
12
25
|
|
26
|
+
# Calculates the checksum using the provided data
|
13
27
|
def checksum
|
14
28
|
if self.valid?
|
15
29
|
used_nums = []
|
@@ -1,8 +1,21 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/msi'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the MSI Mod 11 symbology
|
13
|
+
# MSI Mod 11 can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/MSI_Barcode
|
5
16
|
class MsiMod11 < Msi
|
17
|
+
|
18
|
+
# Returns start character + data + checksum + stop character
|
6
19
|
def formatted_data
|
7
20
|
checksum = self.checksum
|
8
21
|
unless checksum.nil?
|
@@ -10,6 +23,7 @@ module Barcodes
|
|
10
23
|
end
|
11
24
|
end
|
12
25
|
|
26
|
+
# Calculates the checksum using the provided data
|
13
27
|
def checksum
|
14
28
|
if self.valid?
|
15
29
|
sum = 0
|
@@ -1,12 +1,26 @@
|
|
1
|
+
# Barcodes is a RubyGem for creating and rendering common barcode symbologies.
|
2
|
+
#
|
3
|
+
# Author:: Aaron Wright (mailto:acwrightdesign@gmail.com)
|
4
|
+
# Copyright:: Copyright (c) 2012 Infinite Token LLC
|
5
|
+
# License:: MIT License
|
6
|
+
|
1
7
|
require 'barcodes/symbology/base'
|
2
8
|
|
3
9
|
module Barcodes
|
4
10
|
module Symbology
|
11
|
+
|
12
|
+
# This class represents the PLANET symbology
|
13
|
+
# PLANET can encode only numbers 0-9
|
14
|
+
#
|
15
|
+
# More info: http://en.wikipedia.org/wiki/Postal_Alpha_Numeric_Encoding_Technique
|
5
16
|
class Planet < Base
|
17
|
+
|
18
|
+
# PLANET character set
|
6
19
|
def self.charset
|
7
20
|
['0','1','2','3','4','5','6','7','8','9'].collect {|c| c.bytes.to_a[0] }
|
8
21
|
end
|
9
22
|
|
23
|
+
# PLANET values set
|
10
24
|
def self.valueset
|
11
25
|
[
|
12
26
|
'00111','11100','11010','11001',
|
@@ -15,6 +29,7 @@ module Barcodes
|
|
15
29
|
]
|
16
30
|
end
|
17
31
|
|
32
|
+
# Creates a new Planet instance
|
18
33
|
def initialize(args={})
|
19
34
|
unless args.has_key? :data
|
20
35
|
args[:data] = '012345678999'
|
@@ -23,6 +38,7 @@ module Barcodes
|
|
23
38
|
super(args)
|
24
39
|
end
|
25
40
|
|
41
|
+
# Returns data + checksum
|
26
42
|
def formatted_data
|
27
43
|
checksum = self.checksum
|
28
44
|
unless checksum.nil?
|
@@ -30,6 +46,7 @@ module Barcodes
|
|
30
46
|
end
|
31
47
|
end
|
32
48
|
|
49
|
+
# Returns the barcode data encoded as 1's and 0's.
|
33
50
|
def encoded_data
|
34
51
|
if self.valid?
|
35
52
|
encoded_data = ''
|
@@ -40,6 +57,7 @@ module Barcodes
|
|
40
57
|
end
|
41
58
|
end
|
42
59
|
|
60
|
+
# Calculates the checksum using the provided data
|
43
61
|
def checksum
|
44
62
|
if self.valid?
|
45
63
|
sum = 0
|
@@ -58,17 +76,22 @@ module Barcodes
|
|
58
76
|
end
|
59
77
|
end
|
60
78
|
|
79
|
+
# Returns the overall width of the barcode in mils.
|
61
80
|
def width
|
62
81
|
if self.valid?
|
63
82
|
return (((self.encoded_data.length * 2) - 1) * 20)
|
64
83
|
end
|
65
84
|
return 0
|
66
85
|
end
|
67
|
-
|
86
|
+
|
87
|
+
# Returns the overall height of the barcode in mils.
|
68
88
|
def height
|
69
89
|
125
|
70
90
|
end
|
71
91
|
|
92
|
+
# Determines whether or not the barcode data to be encoded
|
93
|
+
# is valid.
|
94
|
+
# Data length must be 12 or 14 digits
|
72
95
|
def valid?
|
73
96
|
@data.each_byte do |char|
|
74
97
|
if self._encode_character(char).nil?
|