barkick 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -6
- data/lib/barkick/version.rb +1 -1
- data/lib/gtin.rb +160 -80
- data/test/gtin_test.rb +17 -0
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4732796197cb3f499c19776c17606fbdf7cf097a
|
4
|
+
data.tar.gz: 650e4caf4c05222f4f15d9c901c7979cff6de510
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 535faa9bb9760eebbbd3ab1a82a9771bb0c3edd9369e2670753ee70ec9b31f1c108a575a62322feaa4f5c300a52e1816da07eb2bb73c98519b363b2537971b02
|
7
|
+
data.tar.gz: 28256facb87f0572e287721630326bdcca78cb418a6b593f486faba210b0ef7e079f0ee814d23dafa981153270da43285f67491a46b046910359a625d08ca15a
|
data/README.md
CHANGED
@@ -15,12 +15,13 @@ For PLU codes, check out the [plu gem](https://github.com/ankane/plu)
|
|
15
15
|
|
16
16
|
```ruby
|
17
17
|
gtin = GTIN.new("016000275263")
|
18
|
-
gtin.valid?
|
19
|
-
gtin.gtin14
|
20
|
-
gtin.ean13
|
21
|
-
gtin.upc
|
22
|
-
gtin.prefix
|
23
|
-
gtin.prefix_name
|
18
|
+
gtin.valid? # true
|
19
|
+
gtin.gtin14 # "00016000275263"
|
20
|
+
gtin.ean13 # "0016000275263"
|
21
|
+
gtin.upc # "016000275263"
|
22
|
+
gtin.prefix # "001"
|
23
|
+
gtin.prefix_name # "GS1 US"
|
24
|
+
gtin.country_code # "US"
|
24
25
|
```
|
25
26
|
|
26
27
|
Variable items
|
@@ -33,6 +34,13 @@ gtin.price # 8.63
|
|
33
34
|
gtin.base_gtin14 # "00299265000003"
|
34
35
|
```
|
35
36
|
|
37
|
+
UPC-E
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
gtin = GTIN.new("03744806")
|
41
|
+
gtin.base_gtin14 # "00037000004486"
|
42
|
+
```
|
43
|
+
|
36
44
|
Calculate check digit
|
37
45
|
|
38
46
|
```ruby
|
data/lib/barkick/version.rb
CHANGED
data/lib/gtin.rb
CHANGED
@@ -2,6 +2,29 @@ class GTIN
|
|
2
2
|
|
3
3
|
def initialize(number)
|
4
4
|
@number = number.to_s
|
5
|
+
|
6
|
+
# could be upc-e
|
7
|
+
if @number.length == 8 and @number[0] == "0" and @number[1] != "0"
|
8
|
+
upc_a =
|
9
|
+
case @number[-2]
|
10
|
+
when "0"
|
11
|
+
"#{@number[1..2]}00000#{@number[3..5]}"
|
12
|
+
when "1", "2"
|
13
|
+
"#{@number[1..2]}#{@number[-2]}0000#{@number[3..5]}"
|
14
|
+
when "3"
|
15
|
+
"#{@number[1..3]}00000#{@number[4..5]}"
|
16
|
+
when "4"
|
17
|
+
"#{@number[1..4]}00000#{@number[5]}"
|
18
|
+
else
|
19
|
+
"#{@number[1..5]}0000#{@number[-2]}"
|
20
|
+
end
|
21
|
+
|
22
|
+
upc_a = "0#{upc_a}#{@number[-1]}"
|
23
|
+
|
24
|
+
if self.class.check_digit(upc_a[0..-2]) == @number[-1]
|
25
|
+
@number = upc_a
|
26
|
+
end
|
27
|
+
end
|
5
28
|
end
|
6
29
|
|
7
30
|
def gtin14
|
@@ -49,90 +72,147 @@ class GTIN
|
|
49
72
|
gtin14[1..3]
|
50
73
|
end
|
51
74
|
|
52
|
-
# TODO finish prefix list
|
53
75
|
# http://www.gs1.org/barcodes/support/prefix_list
|
54
76
|
def prefix_name
|
55
77
|
case prefix.to_i
|
56
78
|
when 0..19, 30..39, 60..139
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
when
|
63
|
-
|
64
|
-
when
|
65
|
-
|
66
|
-
when 383
|
67
|
-
|
68
|
-
when
|
69
|
-
|
70
|
-
when
|
71
|
-
|
72
|
-
when
|
73
|
-
|
74
|
-
when
|
75
|
-
|
76
|
-
when
|
77
|
-
|
78
|
-
when
|
79
|
-
|
80
|
-
when
|
81
|
-
|
82
|
-
when
|
83
|
-
|
84
|
-
when
|
85
|
-
|
86
|
-
when
|
87
|
-
|
88
|
-
when
|
89
|
-
|
90
|
-
when
|
91
|
-
|
92
|
-
when
|
93
|
-
|
94
|
-
when
|
95
|
-
|
96
|
-
when
|
97
|
-
|
98
|
-
when
|
99
|
-
|
100
|
-
when
|
101
|
-
|
102
|
-
when
|
103
|
-
|
104
|
-
when
|
105
|
-
|
106
|
-
when
|
107
|
-
|
108
|
-
when
|
109
|
-
|
110
|
-
when
|
111
|
-
|
112
|
-
when
|
113
|
-
|
114
|
-
when
|
115
|
-
|
116
|
-
when
|
117
|
-
|
118
|
-
when
|
119
|
-
|
120
|
-
when
|
121
|
-
|
122
|
-
when
|
123
|
-
|
124
|
-
when
|
125
|
-
|
126
|
-
when
|
127
|
-
|
128
|
-
when
|
129
|
-
|
130
|
-
when
|
131
|
-
|
132
|
-
when
|
133
|
-
|
134
|
-
|
135
|
-
|
79
|
+
if @number.length == 8
|
80
|
+
nil # GTIN-8
|
81
|
+
else
|
82
|
+
"GS1 US"
|
83
|
+
end
|
84
|
+
when 20..29, 40..49, 200..299 then "Restricted distribution"
|
85
|
+
when 50..59 then "Coupons"
|
86
|
+
when 300..379 then "GS1 France"
|
87
|
+
when 380 then "GS1 Bulgaria"
|
88
|
+
when 383 then "GS1 Slovenija"
|
89
|
+
when 385 then "GS1 Croatia"
|
90
|
+
when 387 then "GS1 BIH (Bosnia-Herzegovina)"
|
91
|
+
when 389 then "GS1 Montenegro"
|
92
|
+
when 400..440 then "GS1 Germany"
|
93
|
+
when 450..459, 490..499 then "GS1 Japan"
|
94
|
+
when 460..469 then "GS1 Russia"
|
95
|
+
when 470 then "GS1 Kyrgyzstan"
|
96
|
+
when 471 then "GS1 Taiwan"
|
97
|
+
when 474 then "GS1 Estonia"
|
98
|
+
when 475 then "GS1 Latvia"
|
99
|
+
when 476 then "GS1 Azerbaijan"
|
100
|
+
when 477 then "GS1 Lithuania"
|
101
|
+
when 478 then "GS1 Uzbekistan"
|
102
|
+
when 479 then "GS1 Sri Lanka"
|
103
|
+
when 480 then "GS1 Philippines"
|
104
|
+
when 481 then "GS1 Belarus"
|
105
|
+
when 482 then "GS1 Ukraine"
|
106
|
+
when 484 then "GS1 Moldova"
|
107
|
+
when 485 then "GS1 Armenia"
|
108
|
+
when 486 then "GS1 Georgia"
|
109
|
+
when 487 then "GS1 Kazakstan"
|
110
|
+
when 488 then "GS1 Tajikistan"
|
111
|
+
when 489 then "GS1 Hong Kong"
|
112
|
+
when 500..509 then "GS1 UK"
|
113
|
+
when 520..521 then "GS1 Association Greece"
|
114
|
+
when 528 then "GS1 Lebanon"
|
115
|
+
when 529 then "GS1 Cyprus"
|
116
|
+
when 530 then "GS1 Albania"
|
117
|
+
when 531 then "GS1 MAC (FYR Macedonia)"
|
118
|
+
when 535 then "GS1 Malta"
|
119
|
+
when 539 then "GS1 Ireland"
|
120
|
+
when 540..549 then "GS1 Belgium & Luxembourg"
|
121
|
+
when 560 then "GS1 Portugal"
|
122
|
+
when 569 then "GS1 Iceland"
|
123
|
+
when 570..579 then "GS1 Denmark"
|
124
|
+
when 590 then "GS1 Poland"
|
125
|
+
when 594 then "GS1 Romania"
|
126
|
+
when 599 then "GS1 Hungary"
|
127
|
+
when 600..601 then "GS1 South Africa"
|
128
|
+
when 603 then "GS1 Ghana"
|
129
|
+
when 604 then "GS1 Senegal"
|
130
|
+
when 608 then "GS1 Bahrain"
|
131
|
+
when 609 then "GS1 Mauritius"
|
132
|
+
when 611 then "GS1 Morocco"
|
133
|
+
when 613 then "GS1 Algeria"
|
134
|
+
when 615 then "GS1 Nigeria"
|
135
|
+
when 616 then "GS1 Kenya"
|
136
|
+
when 618 then "GS1 Ivory Coast"
|
137
|
+
when 619 then "GS1 Tunisia"
|
138
|
+
when 620 then "GS1 Tanzania"
|
139
|
+
when 621 then "GS1 Syria"
|
140
|
+
when 622 then "GS1 Egypt"
|
141
|
+
when 623 then "GS1 Brunei"
|
142
|
+
when 624 then "GS1 Libya"
|
143
|
+
when 625 then "GS1 Jordan"
|
144
|
+
when 626 then "GS1 Iran"
|
145
|
+
when 627 then "GS1 Kuwait"
|
146
|
+
when 628 then "GS1 Saudi Arabia"
|
147
|
+
when 629 then "GS1 Emirates"
|
148
|
+
when 640..649 then "GS1 Finland"
|
149
|
+
when 690..699 then "GS1 China"
|
150
|
+
when 700..709 then "GS1 Norway"
|
151
|
+
when 729 then "GS1 Israel"
|
152
|
+
when 730..739 then "GS1 Sweden"
|
153
|
+
when 740 then "GS1 Guatemala"
|
154
|
+
when 741 then "GS1 El Salvador"
|
155
|
+
when 742 then "GS1 Honduras"
|
156
|
+
when 743 then "GS1 Nicaragua"
|
157
|
+
when 744 then "GS1 Costa Rica"
|
158
|
+
when 745 then "GS1 Panama"
|
159
|
+
when 746 then "GS1 Republica Dominicana"
|
160
|
+
when 750 then "GS1 Mexico"
|
161
|
+
when 754..755 then "GS1 Canada"
|
162
|
+
when 759 then "GS1 Venezuela"
|
163
|
+
when 760..769 then "GS1 Schweiz, Suisse, Svizzera"
|
164
|
+
when 770..771 then "GS1 Colombia"
|
165
|
+
when 773 then "GS1 Uruguay"
|
166
|
+
when 775 then "GS1 Peru"
|
167
|
+
when 777 then "GS1 Bolivia"
|
168
|
+
when 778..779 then "GS1 Argentina"
|
169
|
+
when 780 then "GS1 Chile"
|
170
|
+
when 784 then "GS1 Paraguay"
|
171
|
+
when 786 then "GS1 Ecuador"
|
172
|
+
when 789..790 then "GS1 Brasil"
|
173
|
+
when 800..839 then "GS1 Italy"
|
174
|
+
when 840..849 then "GS1 Spain"
|
175
|
+
when 850 then "GS1 Cuba"
|
176
|
+
when 858 then "GS1 Slovakia"
|
177
|
+
when 859 then "GS1 Czech"
|
178
|
+
when 860 then "GS1 Serbia"
|
179
|
+
when 865 then "GS1 Mongolia"
|
180
|
+
when 867 then "GS1 North Korea"
|
181
|
+
when 868..869 then "GS1 Turkey"
|
182
|
+
when 870..879 then "GS1 Netherlands"
|
183
|
+
when 880 then "GS1 South Korea"
|
184
|
+
when 884 then "GS1 Cambodia"
|
185
|
+
when 885 then "GS1 Thailand"
|
186
|
+
when 888 then "GS1 Singapore"
|
187
|
+
when 890 then "GS1 India"
|
188
|
+
when 893 then "GS1 Vietnam"
|
189
|
+
when 896 then "GS1 Pakistan"
|
190
|
+
when 899 then "GS1 Indonesia"
|
191
|
+
when 900..919 then "GS1 Austria"
|
192
|
+
when 930..939 then "GS1 Australia"
|
193
|
+
when 940..949 then "GS1 New Zealand"
|
194
|
+
when 950 then "GS1 Global Office"
|
195
|
+
when 951 then "GS1 Global Office (EPCglobal)"
|
196
|
+
when 955 then "GS1 Malaysia"
|
197
|
+
when 958 then "GS1 Macau"
|
198
|
+
when 960..969 then "Global Office (GTIN-8s)"
|
199
|
+
when 977 then "Serial publications (ISSN)"
|
200
|
+
when 978..979 then "Bookland"
|
201
|
+
when 980 then "Refund receipts"
|
202
|
+
when 981..984 then "GS1 coupon identification for common currency areas"
|
203
|
+
when 990..999 then "GS1 coupon identification"
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def country_code
|
208
|
+
case prefix_name
|
209
|
+
when "GS1 US" then "US"
|
210
|
+
when "GS1 UK" then "GB"
|
211
|
+
when "GS1 Germany" then "DE"
|
212
|
+
when "GS1 Netherlands" then "NL"
|
213
|
+
when "GS1 Schweiz, Suisse, Svizzera" then "CH"
|
214
|
+
when "GS1 Italy" then "IT"
|
215
|
+
when "GS1 France" then "FR"
|
136
216
|
end
|
137
217
|
end
|
138
218
|
|
data/test/gtin_test.rb
CHANGED
@@ -28,4 +28,21 @@ class TestGTIN < Minitest::Test
|
|
28
28
|
assert GTIN.new(gtin.base_gtin14).valid?
|
29
29
|
end
|
30
30
|
|
31
|
+
def test_upc_e
|
32
|
+
gtin = GTIN.new("03744806")
|
33
|
+
assert gtin.valid?
|
34
|
+
assert_equal "00037000004486", gtin.base_gtin14
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_coke_upc_e
|
38
|
+
gtin = GTIN.new("04963406")
|
39
|
+
assert gtin.valid?
|
40
|
+
assert_equal "00049000006346", gtin.base_gtin14
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_trader_joes
|
44
|
+
gtin = GTIN.new("00511292")
|
45
|
+
assert_equal "00000000511292", gtin.gtin14
|
46
|
+
end
|
47
|
+
|
31
48
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: barkick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Barcodes made easy
|
@@ -59,7 +59,7 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
62
|
+
- ".gitignore"
|
63
63
|
- Gemfile
|
64
64
|
- LICENSE.txt
|
65
65
|
- README.md
|
@@ -80,17 +80,17 @@ require_paths:
|
|
80
80
|
- lib
|
81
81
|
required_ruby_version: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.
|
93
|
+
rubygems_version: 2.2.0
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
96
|
summary: Barcodes made easy
|