barcodes 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +107 -0
- data/Rakefile +11 -0
- data/barcodes.gemspec +24 -0
- data/bin/barcodes +6 -0
- data/lib/barcodes.rb +63 -0
- data/lib/barcodes/exec.rb +74 -0
- data/lib/barcodes/renderer.rb +9 -0
- data/lib/barcodes/renderer/ascii.rb +199 -0
- data/lib/barcodes/renderer/pdf.rb +257 -0
- data/lib/barcodes/symbology.rb +47 -0
- data/lib/barcodes/symbology/base.rb +103 -0
- data/lib/barcodes/symbology/codabar.rb +36 -0
- data/lib/barcodes/symbology/code11.rb +74 -0
- data/lib/barcodes/symbology/code128.rb +317 -0
- data/lib/barcodes/symbology/code39.rb +48 -0
- data/lib/barcodes/symbology/code39extended.rb +93 -0
- data/lib/barcodes/symbology/code39extendedmod43.rb +73 -0
- data/lib/barcodes/symbology/code39mod43.rb +73 -0
- data/lib/barcodes/symbology/code93.rb +142 -0
- data/lib/barcodes/symbology/code93extended.rb +116 -0
- data/lib/barcodes/symbology/ean.rb +149 -0
- data/lib/barcodes/symbology/ean13.rb +27 -0
- data/lib/barcodes/symbology/ean8.rb +50 -0
- data/lib/barcodes/symbology/interleaved2of5.rb +30 -0
- data/lib/barcodes/symbology/interleaved2of5mod10.rb +40 -0
- data/lib/barcodes/symbology/msi.rb +30 -0
- data/lib/barcodes/symbology/msimod10.rb +50 -0
- data/lib/barcodes/symbology/msimod11.rb +37 -0
- data/lib/barcodes/symbology/planet.rb +83 -0
- data/lib/barcodes/symbology/postnet.rb +83 -0
- data/lib/barcodes/symbology/standard2of5.rb +30 -0
- data/lib/barcodes/symbology/standard2of5mod10.rb +40 -0
- data/lib/barcodes/symbology/upca.rb +27 -0
- data/lib/barcodes/version.rb +3 -0
- data/spec/barcodes/exec_spec.rb +14 -0
- data/spec/barcodes/renderer/ascii_spec.rb +12 -0
- data/spec/barcodes/renderer/pdf_spec.rb +12 -0
- data/spec/barcodes/symbology/base_spec.rb +8 -0
- data/spec/barcodes/symbology/codabar_spec.rb +8 -0
- data/spec/barcodes/symbology/code11_spec.rb +8 -0
- data/spec/barcodes/symbology/code128_spec.rb +8 -0
- data/spec/barcodes/symbology/code39_spec.rb +8 -0
- data/spec/barcodes/symbology/code39extended_spec.rb +8 -0
- data/spec/barcodes/symbology/code39extendedmod43_spec.rb +8 -0
- data/spec/barcodes/symbology/code39mod43_spec.rb +8 -0
- data/spec/barcodes/symbology/code93_spec.rb +8 -0
- data/spec/barcodes/symbology/code93extended_spec.rb +8 -0
- data/spec/barcodes/symbology/ean13_spec.rb +8 -0
- data/spec/barcodes/symbology/ean8_spec.rb +8 -0
- data/spec/barcodes/symbology/ean_spec.rb +8 -0
- data/spec/barcodes/symbology/interleaved2of5_spec.rb +8 -0
- data/spec/barcodes/symbology/interleaved2of5mod10_spec.rb +8 -0
- data/spec/barcodes/symbology/msi_spec.rb +8 -0
- data/spec/barcodes/symbology/msimod10_spec.rb +8 -0
- data/spec/barcodes/symbology/msimod11_spec.rb +8 -0
- data/spec/barcodes/symbology/planet_spec.rb +8 -0
- data/spec/barcodes/symbology/postnet_spec.rb +8 -0
- data/spec/barcodes/symbology/standard2of5_spec.rb +8 -0
- data/spec/barcodes/symbology/standard2of5mod10_spec.rb +8 -0
- data/spec/barcodes/symbology/upca_spec.rb +8 -0
- data/spec/barcodes_spec.rb +27 -0
- data/spec/spec_helper.rb +17 -0
- metadata +174 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'barcodes/symbology/ean'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Ean13 < Ean
|
6
|
+
def initialize(args={})
|
7
|
+
unless args.has_key? :data
|
8
|
+
args[:data] = '012345678999'
|
9
|
+
end
|
10
|
+
|
11
|
+
super(args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def formatted_data
|
15
|
+
@start_character + @data[0..6] + @center_character + @data[7..12] + self.checksum + @stop_character
|
16
|
+
end
|
17
|
+
|
18
|
+
def valid?
|
19
|
+
unless super
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
|
23
|
+
return self.data.length == 12 ? true : false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'barcodes/symbology/ean'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Ean8 < Ean
|
6
|
+
def initialize(args={})
|
7
|
+
unless args.has_key? :data
|
8
|
+
args[:data] = '0123456'
|
9
|
+
end
|
10
|
+
|
11
|
+
super(args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def formatted_data
|
15
|
+
@start_character + @data[0..3] + @center_character + @data[4..6] + self.checksum + @stop_character
|
16
|
+
end
|
17
|
+
|
18
|
+
def encoded_data
|
19
|
+
if self.valid?
|
20
|
+
formatted_data = self.formatted_data
|
21
|
+
encoded_data = ""
|
22
|
+
index = 0
|
23
|
+
formatted_data.each_byte do |char|
|
24
|
+
if char.chr == 'S'
|
25
|
+
encoded_data += "101"
|
26
|
+
elsif char.chr == 'C'
|
27
|
+
encoded_data += "01010"
|
28
|
+
else
|
29
|
+
if index < 6
|
30
|
+
encoded_data += self._encode_character_with_parity(char, '1')
|
31
|
+
else
|
32
|
+
encoded_data += self._encode_character_with_right_hand(char)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
index += 1
|
36
|
+
end
|
37
|
+
encoded_data
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid?
|
42
|
+
unless super
|
43
|
+
return false
|
44
|
+
end
|
45
|
+
|
46
|
+
return self.data.length == 7 ? true : false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'barcodes/symbology/base'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Interleaved2Of5 < Base
|
6
|
+
def self.charset
|
7
|
+
['0','1','2','3','4','5','6','7','8','9','S','E'].collect {|c| c.bytes.to_a[0] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.valueset
|
11
|
+
[
|
12
|
+
'101011011010','110101010110','101101010110','110110101010',
|
13
|
+
'101011010110','110101101010','101101101010','101010110110',
|
14
|
+
'110101011010','101101011010','1010','1101'
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(args={})
|
19
|
+
super(args)
|
20
|
+
|
21
|
+
@start_character = 'S'
|
22
|
+
@stop_character = 'E'
|
23
|
+
end
|
24
|
+
|
25
|
+
def formatted_data
|
26
|
+
@start_character + @data + @stop_character
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'barcodes/symbology/interleaved2of5'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Interleaved2Of5Mod10 < Interleaved2Of5
|
6
|
+
def formatted_data
|
7
|
+
checksum = self.checksum
|
8
|
+
unless checksum.nil?
|
9
|
+
@start_character + @data + checksum + @stop_character
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def checksum
|
14
|
+
even_sum = 0
|
15
|
+
odd_sum = 0
|
16
|
+
index = 0
|
17
|
+
@data.reverse.each_char do |char|
|
18
|
+
if ('0'..'9').include? char
|
19
|
+
if index.even?
|
20
|
+
even_sum += char.to_i * 3
|
21
|
+
else
|
22
|
+
odd_sum += char.to_i
|
23
|
+
end
|
24
|
+
end
|
25
|
+
index += 1
|
26
|
+
end
|
27
|
+
sum = even_sum + odd_sum
|
28
|
+
|
29
|
+
value = 10 - (sum % 10)
|
30
|
+
if value == 10
|
31
|
+
value = 0
|
32
|
+
end
|
33
|
+
|
34
|
+
if (0..9).include? value
|
35
|
+
return value.to_s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'barcodes/symbology/base'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Msi < Base
|
6
|
+
def self.charset
|
7
|
+
['0','1','2','3','4','5','6','7','8','9','S','E'].collect {|c| c.bytes.to_a[0] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.valueset
|
11
|
+
[
|
12
|
+
'100100100100','100100100110','100100110100','100100110110',
|
13
|
+
'100110100100','100110100110','100110110100','100110110110',
|
14
|
+
'110100100100','110100100110','110','1001'
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(args={})
|
19
|
+
super(args)
|
20
|
+
|
21
|
+
@start_character = 'S'
|
22
|
+
@stop_character = 'E'
|
23
|
+
end
|
24
|
+
|
25
|
+
def formatted_data
|
26
|
+
@start_character + @data + @stop_character
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'barcodes/symbology/msi'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class MsiMod10 < Msi
|
6
|
+
def formatted_data
|
7
|
+
checksum = self.checksum
|
8
|
+
unless checksum.nil?
|
9
|
+
@start_character + @data + checksum + @stop_character
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def checksum
|
14
|
+
if self.valid?
|
15
|
+
used_nums = []
|
16
|
+
unused_nums = []
|
17
|
+
index = 0
|
18
|
+
data.reverse.each_char do |char|
|
19
|
+
if index.even?
|
20
|
+
used_nums << char.to_i
|
21
|
+
else
|
22
|
+
unused_nums << char.to_i
|
23
|
+
end
|
24
|
+
index += 1
|
25
|
+
end
|
26
|
+
used_nums.reverse!
|
27
|
+
unused_nums.reverse!
|
28
|
+
|
29
|
+
sum = 0
|
30
|
+
(used_nums.join.to_i * 2).to_s.split(//).each do |n|
|
31
|
+
sum += n.to_i
|
32
|
+
end
|
33
|
+
unused_nums.each do |n|
|
34
|
+
sum += n
|
35
|
+
end
|
36
|
+
|
37
|
+
value = 10 - (sum % 10)
|
38
|
+
|
39
|
+
if value == 10
|
40
|
+
value = 0
|
41
|
+
end
|
42
|
+
|
43
|
+
if (0..9).include? value
|
44
|
+
return value.to_s
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'barcodes/symbology/msi'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class MsiMod11 < Msi
|
6
|
+
def formatted_data
|
7
|
+
checksum = self.checksum
|
8
|
+
unless checksum.nil?
|
9
|
+
@start_character + @data + checksum + @stop_character
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def checksum
|
14
|
+
if self.valid?
|
15
|
+
sum = 0
|
16
|
+
weight = 2
|
17
|
+
data.reverse.each_char do |char|
|
18
|
+
if ('0'..'9').include? char
|
19
|
+
sum += weight * char.to_i
|
20
|
+
end
|
21
|
+
if weight < 7
|
22
|
+
weight += 1
|
23
|
+
else
|
24
|
+
weight = 2
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
value = sum % 11
|
29
|
+
|
30
|
+
if (0..9).include? value
|
31
|
+
return value.to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'barcodes/symbology/base'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Planet < Base
|
6
|
+
def self.charset
|
7
|
+
['0','1','2','3','4','5','6','7','8','9'].collect {|c| c.bytes.to_a[0] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.valueset
|
11
|
+
[
|
12
|
+
'00111','11100','11010','11001',
|
13
|
+
'10110','10101','10011','01110',
|
14
|
+
'01101','01011'
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(args={})
|
19
|
+
unless args.has_key? :data
|
20
|
+
args[:data] = '012345678999'
|
21
|
+
end
|
22
|
+
|
23
|
+
super(args)
|
24
|
+
end
|
25
|
+
|
26
|
+
def formatted_data
|
27
|
+
checksum = self.checksum
|
28
|
+
unless checksum.nil?
|
29
|
+
@data + checksum
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def encoded_data
|
34
|
+
if self.valid?
|
35
|
+
encoded_data = ''
|
36
|
+
self.formatted_data.each_byte do |char|
|
37
|
+
encoded_data += self._encode_character char
|
38
|
+
end
|
39
|
+
return '1' + encoded_data + '1'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def checksum
|
44
|
+
if self.valid?
|
45
|
+
sum = 0
|
46
|
+
@data.each_char do |char|
|
47
|
+
sum += char.to_i
|
48
|
+
end
|
49
|
+
|
50
|
+
value = 10 - (sum % 10)
|
51
|
+
if value == 10
|
52
|
+
value = 0
|
53
|
+
end
|
54
|
+
|
55
|
+
if (0..9).include? value
|
56
|
+
return value.to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def width
|
62
|
+
if self.valid?
|
63
|
+
return (((self.encoded_data.length * 2) - 1) * 20)
|
64
|
+
end
|
65
|
+
return 0
|
66
|
+
end
|
67
|
+
|
68
|
+
def height
|
69
|
+
125
|
70
|
+
end
|
71
|
+
|
72
|
+
def valid?
|
73
|
+
@data.each_byte do |char|
|
74
|
+
if self._encode_character(char).nil?
|
75
|
+
return false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
return @data.length == 12 || @data.length == 14
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'barcodes/symbology/base'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Postnet < Base
|
6
|
+
def self.charset
|
7
|
+
['0','1','2','3','4','5','6','7','8','9'].collect {|c| c.bytes.to_a[0] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.valueset
|
11
|
+
[
|
12
|
+
'11000','00011','00101','00110',
|
13
|
+
'01001','01010','01100','10001',
|
14
|
+
'10010','10100'
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(args={})
|
19
|
+
unless args.has_key? :data
|
20
|
+
args[:data] = '01234'
|
21
|
+
end
|
22
|
+
|
23
|
+
super(args)
|
24
|
+
end
|
25
|
+
|
26
|
+
def formatted_data
|
27
|
+
checksum = self.checksum
|
28
|
+
unless checksum.nil?
|
29
|
+
@data + checksum
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def encoded_data
|
34
|
+
if self.valid?
|
35
|
+
encoded_data = ''
|
36
|
+
self.formatted_data.each_byte do |char|
|
37
|
+
encoded_data += self._encode_character char
|
38
|
+
end
|
39
|
+
return '1' + encoded_data + '1'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def checksum
|
44
|
+
if self.valid?
|
45
|
+
sum = 0
|
46
|
+
@data.each_char do |char|
|
47
|
+
sum += char.to_i
|
48
|
+
end
|
49
|
+
|
50
|
+
value = 10 - (sum % 10)
|
51
|
+
if value == 10
|
52
|
+
value = 0
|
53
|
+
end
|
54
|
+
|
55
|
+
if (0..9).include? value
|
56
|
+
return value.to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def width
|
62
|
+
if self.valid?
|
63
|
+
return (((self.encoded_data.length * 2) - 1) * 20)
|
64
|
+
end
|
65
|
+
return 0
|
66
|
+
end
|
67
|
+
|
68
|
+
def height
|
69
|
+
125
|
70
|
+
end
|
71
|
+
|
72
|
+
def valid?
|
73
|
+
@data.each_byte do |char|
|
74
|
+
if self._encode_character(char).nil?
|
75
|
+
return false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
return @data.length == 5 || @data.length == 9 || @data.length == 11
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'barcodes/symbology/base'
|
2
|
+
|
3
|
+
module Barcodes
|
4
|
+
module Symbology
|
5
|
+
class Standard2Of5 < Base
|
6
|
+
def self.charset
|
7
|
+
['0','1','2','3','4','5','6','7','8','9','S','E'].collect {|c| c.bytes.to_a[0] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.valueset
|
11
|
+
[
|
12
|
+
'10101110111010','11101010101110','10111010101110','11101110101010',
|
13
|
+
'10101110101110','11101011101010','10111011101010','10101011101110',
|
14
|
+
'11101010111010','10111010111010','11011010','1101011'
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(args={})
|
19
|
+
super(args)
|
20
|
+
|
21
|
+
@start_character = 'S'
|
22
|
+
@stop_character = 'E'
|
23
|
+
end
|
24
|
+
|
25
|
+
def formatted_data
|
26
|
+
@start_character + @data + @stop_character
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|