sjekksum 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5766c405550125325430eb38e4ce6f8600721311
4
- data.tar.gz: a8e2cc7a1cd0f8f89eb9214335fc3a7e35a93108
3
+ metadata.gz: 3e68d799e7f1e30802bc9f64ea41f0274328be23
4
+ data.tar.gz: 4b873a7bea6e7ab8a0f12f0d883c6aa344e675fc
5
5
  SHA512:
6
- metadata.gz: 8db7a683ca0a17d7ea7962e4210cab4dc0bad173f492b7fe44797f72f110882fdcd5295c0eb21d37612955507dd4d3eb588b491a00ed72774916211961a40f39
7
- data.tar.gz: adc09f1148201ca7755cea7b81a42085181d9fe476481523fe5b2c9126bd9044d9c1902eed36287e9be0e10a8e398c3ff8d0acdeadae9b60a303453385a68060
6
+ metadata.gz: ba1ada821381e10cf13b37a15fdf985a04ec1326ca62919391e98fd9382085f230c448a39cceffac61207043423566f884aceb7ea4fc99ef5eaf4ae64c3e87a5
7
+ data.tar.gz: 76b890f5e049a5c892a252a77c6480c101029fb37b4c9c9dc54d5ba1ec0b667dd8aacb80535260dc02f04e0a7fa80030cfeed7fcc99dce83ebfbee57cef3c126
data/README.md CHANGED
@@ -50,33 +50,37 @@ gem install sjekksum
50
50
  ```ruby
51
51
  require "sjekksum"
52
52
 
53
- Sjekksum.damm(572) #=> 4
54
- Sjekksum.damm!(572) #=> 5724
55
- Sjekksum.damm?(5724) #=> true
53
+ Sjekksum.damm(572) #=> 4
54
+ Sjekksum.damm!(572) #=> 5724
55
+ Sjekksum.damm?(5724) #=> true
56
56
 
57
- Sjekksum.isbn10("147743025") #=> 3
58
- Sjekksum.isbn10!("147743025") #=> "1477430253"
59
- Sjekksum.isbn10?("1477430253") #=> true
57
+ Sjekksum.isbn10("147743025") #=> 3
58
+ Sjekksum.isbn10!("147743025") #=> "1477430253"
59
+ Sjekksum.isbn10?("1477430253") #=> true
60
60
 
61
- Sjekksum.luhn(7992739871) #=> 3
62
- Sjekksum.luhn!(7992739871) #=> 79927398713
63
- Sjekksum.luhn?(79927398713) #=> true
61
+ Sjekksum.isbn13("978-0-306-40615-") #=> 7
62
+ Sjekksum.isbn13!("978-0-306-40615-") #=> "978-0-306-40615-7"
63
+ Sjekksum.isbn13?("978-0-306-40615-7") #=> true
64
64
 
65
- Sjekksum.upc("03600024145") #=> 7
66
- Sjekksum.upc!("03600024145") #=> "036000241457"
67
- Sjekksum.upc?("036000241457") #=> true
65
+ Sjekksum.luhn(7992739871) #=> 3
66
+ Sjekksum.luhn!(7992739871) #=> 79927398713
67
+ Sjekksum.luhn?(79927398713) #=> true
68
68
 
69
- Sjekksum.verhoeff(142857) #=> 0
70
- Sjekksum.verhoeff!(142857) #=> 1428570
71
- Sjekksum.verhoeff?(1428570) #=> true
69
+ Sjekksum.upc("03600024145") #=> 7
70
+ Sjekksum.upc!("03600024145") #=> "036000241457"
71
+ Sjekksum.upc?("036000241457") #=> true
72
72
 
73
- Sjekksum.primitive(232323) #=> 6
74
- Sjekksum.primitive!(232323) #=> 2323236
75
- Sjekksum.primitive?(2323236) #=> true
73
+ Sjekksum.verhoeff(142857) #=> 0
74
+ Sjekksum.verhoeff!(142857) #=> 1428570
75
+ Sjekksum.verhoeff?(1428570) #=> true
76
76
 
77
- Sjekksum.primitive97(23569) #=> 5
78
- Sjekksum.primitive97!(23569) #=> 235695
79
- Sjekksum.primitive97?(235695) #=> true
77
+ Sjekksum.primitive(232323) #=> 6
78
+ Sjekksum.primitive!(232323) #=> 2323236
79
+ Sjekksum.primitive?(2323236) #=> true
80
+
81
+ Sjekksum.primitive97(23569) #=> 5
82
+ Sjekksum.primitive97!(23569) #=> 235695
83
+ Sjekksum.primitive97?(235695) #=> true
80
84
  ```
81
85
 
82
86
 
@@ -1,6 +1,6 @@
1
1
  module Sjekksum
2
2
  #
3
- # Module for calculation and validation of ISBN 10 (International Standard Book Number) checksums
3
+ # Module for calculation and validation of ISBN-10 (International Standard Book Number) checksums
4
4
  #
5
5
  # @see http://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation ISBN-10 check digit calculation
6
6
  #
@@ -9,7 +9,7 @@ module Sjekksum
9
9
  extend Shared
10
10
 
11
11
  #
12
- # Calculates ISBN 10 checksum
12
+ # Calculates ISBN-10 checksum
13
13
  #
14
14
  # @example
15
15
  # Sjekksum::ISBN10.of("147743025") #=> 3
@@ -21,16 +21,18 @@ module Sjekksum
21
21
  def of number
22
22
  raise_on_type_mismatch number
23
23
  digits = convert_number_to_digits(number)[0..9]
24
+
24
25
  sum = digits.reverse_each.with_index.reduce(0) do |check, (digit, idx)|
25
26
  check += digit * (idx+2)
26
27
  end
28
+
27
29
  check = (11 - sum % 11) % 11
28
30
  check == 10 ? "X" : check
29
31
  end
30
32
  alias_method :checksum, :of
31
33
 
32
34
  #
33
- # ISBN 10 validation of provided number
35
+ # ISBN-10 validation of provided number
34
36
  #
35
37
  # @example
36
38
  # Sjekksum::ISBN10.valid?("1477430253") #=> true
@@ -47,7 +49,7 @@ module Sjekksum
47
49
  alias_method :is_valid?, :valid?
48
50
 
49
51
  #
50
- # Transforms a number by appending the ISBN 10 checksum digit
52
+ # Transforms a number by appending the ISBN-10 checksum digit
51
53
  #
52
54
  # @example
53
55
  # Sjekksum::ISBN10.convert("147743025") #=> "1477430253"
@@ -0,0 +1,68 @@
1
+ module Sjekksum
2
+ #
3
+ # Module for calculation and validation of ISBN-10 (International Standard Book Number) checksums
4
+ #
5
+ # @see http://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-13_check_digit_calculation ISBN-13 check digit calculation
6
+ #
7
+ # Its check digit is generated the same way as the {Sjekksum::UPC} except that the even digits are multiplied by 3 instead of the odd digits.
8
+ #
9
+ module ISBN13
10
+ extend self
11
+ extend Shared
12
+
13
+ #
14
+ # Calculates ISBN13 checksum
15
+ #
16
+ # @example
17
+ # Sjekksum::ISBN13.of("978-0-306-40615-") #=> 7
18
+ #
19
+ # @param number [Integer, String] number for which the checksum should be calculated
20
+ #
21
+ # @return [Integer] calculated checksum
22
+ def of number
23
+ raise_on_type_mismatch number
24
+ digits = convert_number_to_digits(number)
25
+
26
+ sum = digits.map.with_index do |digit, idx|
27
+ idx.odd? ? (digit * 3) : digit
28
+ end.reduce(&:+)
29
+
30
+ (10 - sum % 10) % 10
31
+ end
32
+ alias_method :checksum, :of
33
+
34
+ #
35
+ # ISBN13 validation of provided number
36
+ #
37
+ # @example
38
+ # Sjekksum::ISBN13.valid?("978-0-306-40615-7") #=> true
39
+ #
40
+ # @param number [Integer, String] number with included checksum
41
+ #
42
+ # @return [Boolean]
43
+ def valid? number
44
+ raise_on_type_mismatch number
45
+ num, check = split_number(number)
46
+ self.of(num) == check
47
+ end
48
+ alias_method :is_valid?, :valid?
49
+
50
+ #
51
+ # Transforms a number by appending the ISBN13 checksum digit
52
+ #
53
+ # It will preserve type (Integer/String) and therefore leading zeros.
54
+ #
55
+ # @example
56
+ # Sjekksum::ISBN13.convert("978-0-306-40615-") #=> "978-0-306-40615-7"
57
+ #
58
+ # @param number [Integer, String] number without a checksum
59
+ #
60
+ # @return [Integer, String] final number including the checksum
61
+ def convert number
62
+ raise_on_type_mismatch number
63
+ typed_conversion number
64
+ end
65
+ alias_method :transform, :convert
66
+
67
+ end
68
+ end
data/lib/sjekksum/luhn.rb CHANGED
@@ -20,6 +20,7 @@ module Sjekksum
20
20
  def of number
21
21
  raise_on_type_mismatch number
22
22
  digits = convert_number_to_digits(number)
23
+
23
24
  sum = digits.reverse.map.with_index do |digit, idx|
24
25
  idx.even? ? (digit * 2).divmod(10).reduce(&:+) : digit
25
26
  end.reduce(&:+)
data/lib/sjekksum/upc.rb CHANGED
@@ -23,6 +23,7 @@ module Sjekksum
23
23
  def of number
24
24
  raise_on_type_mismatch number
25
25
  digits = convert_number_to_digits(number)
26
+
26
27
  sum = digits.map.with_index do |digit, idx|
27
28
  idx.even? ? (digit * 3) : digit
28
29
  end.reduce(&:+)
@@ -49,6 +49,7 @@ module Sjekksum
49
49
  def of number
50
50
  raise_on_type_mismatch number
51
51
  digits = convert_number_to_digits(number)
52
+
52
53
  INVERSE[digits.reverse_each.with_index.reduce(0) { |check, (digit, idx)|
53
54
  d_row = DIHEDRAL_GROUP_D5[check]
54
55
  d_row[ PERMUTATION[idx.next % 8][digit] ]
@@ -1,4 +1,4 @@
1
1
  module Sjekksum
2
2
  # Version constant
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
data/lib/sjekksum.rb CHANGED
@@ -2,6 +2,7 @@ require "sjekksum/version"
2
2
  require "sjekksum/shared"
3
3
  require "sjekksum/damm"
4
4
  require "sjekksum/isbn10"
5
+ require "sjekksum/isbn13"
5
6
  require "sjekksum/luhn"
6
7
  require "sjekksum/upc"
7
8
  require "sjekksum/verhoeff"
@@ -31,13 +32,13 @@ module Sjekksum
31
32
  alias_method :damm, :damm_of
32
33
 
33
34
  #
34
- # Calculates ISBN 10 checksum
35
+ # Calculates ISBN-10 checksum
35
36
  #
36
37
  # @example
37
- # Sjekksum::ISBN10.of("147743025") #=> 3
38
- # Sjekksum::ISBN10.of("193435600") #=> "X"
38
+ # Sjekksum.isbn10("147743025") #=> 3
39
+ # Sjekksum.isbn10("193435600") #=> "X"
39
40
  #
40
- # @see Sjekksum::Damm#of
41
+ # @see Sjekksum::ISBN10#of
41
42
  #
42
43
  # @param number [Integer, String] number for which the checksum should be calculated
43
44
  #
@@ -47,6 +48,22 @@ module Sjekksum
47
48
  end
48
49
  alias_method :isbn10, :isbn10_of
49
50
 
51
+ #
52
+ # Calculates ISBN-13 checksum
53
+ #
54
+ # @example
55
+ # Sjekksum.isbn13("978-0-306-40615-") #=> 7
56
+ #
57
+ # @see Sjekksum::ISBN13#of
58
+ #
59
+ # @param number [Integer, String] number for which the checksum should be calculated
60
+ #
61
+ # @return [Integer, String] calculated checksum
62
+ def isbn13_of number
63
+ ISBN13.of number
64
+ end
65
+ alias_method :isbn13, :isbn13_of
66
+
50
67
  #
51
68
  # Calculates Luhn checksum
52
69
  #
@@ -144,11 +161,11 @@ module Sjekksum
144
161
  alias_method :damm?, :valid_damm?
145
162
 
146
163
  #
147
- # ISBN 10 validation of provided number
164
+ # ISBN-10 validation of provided number
148
165
  #
149
166
  # @example
150
- # Sjekksum::ISBN10.valid?("1477430253") #=> true
151
- # Sjekksum::ISBN10.valid?("193435600X") #=> true
167
+ # Sjekksum.isbn10?("1477430253") #=> true
168
+ # Sjekksum.isbn10?("193435600X") #=> true
152
169
  #
153
170
  # @see Sjekksum::ISBN10#valid?
154
171
  #
@@ -160,6 +177,22 @@ module Sjekksum
160
177
  end
161
178
  alias_method :isbn10?, :valid_isbn10?
162
179
 
180
+ #
181
+ # ISBN-13 validation of provided number
182
+ #
183
+ # @example
184
+ # Sjekksum.isbn13?("978-0-306-40615-7") #=> true
185
+ #
186
+ # @see Sjekksum::ISBN13#valid?
187
+ #
188
+ # @param number [Integer, String] number with included checksum
189
+ #
190
+ # @return [Boolean]
191
+ def valid_isbn13? number
192
+ ISBN13.valid? number
193
+ end
194
+ alias_method :isbn13?, :valid_isbn13?
195
+
163
196
  #
164
197
  # Luhn validation of provided number
165
198
  #
@@ -257,11 +290,11 @@ module Sjekksum
257
290
  alias_method :damm!, :make_damm
258
291
 
259
292
  #
260
- # Transforms a number by appending the ISBN 10 checksum digit
293
+ # Transforms a number by appending the ISBN-10 checksum digit
261
294
  #
262
295
  # @example
263
- # Sjekksum::ISBN10.convert("147743025") #=> "1477430253"
264
- # Sjekksum::ISBN10.convert("193435600") #=> "193435600X"
296
+ # Sjekksum.isbn10!("147743025") #=> "1477430253"
297
+ # Sjekksum.isbn10!("193435600") #=> "193435600X"
265
298
  #
266
299
  # @see Sjekksum::ISBN10#convert
267
300
  #
@@ -273,6 +306,22 @@ module Sjekksum
273
306
  end
274
307
  alias_method :isbn10!, :make_isbn10
275
308
 
309
+ #
310
+ # Transforms a number by appending the ISBN-13 checksum digit
311
+ #
312
+ # @example
313
+ # Sjekksum.isbn13("978-0-306-40615-") #=> "978-0-306-40615-7"
314
+ #
315
+ # @see Sjekksum::ISBN13#convert
316
+ #
317
+ # @param number [Integer, String] number without a checksum
318
+ #
319
+ # @return [Integer, String] final number including the checksum
320
+ def make_isbn13 number
321
+ ISBN13.convert number
322
+ end
323
+ alias_method :isbn13!, :make_isbn13
324
+
276
325
  #
277
326
  # Transforms a number by appending the Luhn checksum digit
278
327
  #
@@ -12,14 +12,14 @@ describe Sjekksum::ISBN10 do
12
12
  [ 388221591, 7 ],
13
13
  [ "359617218", 7 ],
14
14
  [ "147743025", 3 ],
15
- [ "0-306-40615-", 2 ],
15
+ [ "0-306-40615-", 2 ]
16
16
  ]
17
17
 
18
18
  fail_spec_matrix = [
19
19
  [ 123, 9 ],
20
20
  [ "123", 9 ],
21
21
  [ "147743025", 9 ],
22
- [ "0-306-40615-", 9 ],
22
+ [ "0-306-40615-", 9 ]
23
23
  ]
24
24
 
25
25
  it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+ require "shared_implementation"
3
+
4
+ describe Sjekksum::ISBN13 do
5
+
6
+ success_spec_matrix = [
7
+ [ "978-363941830", 9 ],
8
+ [ "978-193435600", 5 ],
9
+ [ 978364222974, 9 ],
10
+ [ "978345330684", 4 ],
11
+ [ "978-388221068", 2 ],
12
+ [ 978388221591, 5 ],
13
+ [ "978-359617218", 4 ],
14
+ [ "978-147743025", 5 ],
15
+ [ "978-030640615", 7 ]
16
+ ]
17
+
18
+ fail_spec_matrix = [
19
+ [ 123, 9 ],
20
+ [ "123", 9 ],
21
+ [ "978-147743025", 9 ],
22
+ [ "978-030640615", 9 ]
23
+ ]
24
+
25
+ it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
26
+
27
+ end
@@ -7,6 +7,7 @@ describe Sjekksum do
7
7
  spec_values = {
8
8
  damm: 9,
9
9
  isbn10: "X",
10
+ isbn13: 3,
10
11
  luhn: 5,
11
12
  upc: 3,
12
13
  verhoeff: 4,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sjekksum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Grabo
@@ -111,6 +111,7 @@ files:
111
111
  - lib/sjekksum.rb
112
112
  - lib/sjekksum/damm.rb
113
113
  - lib/sjekksum/isbn10.rb
114
+ - lib/sjekksum/isbn13.rb
114
115
  - lib/sjekksum/luhn.rb
115
116
  - lib/sjekksum/primitive.rb
116
117
  - lib/sjekksum/primitive97.rb
@@ -122,6 +123,7 @@ files:
122
123
  - spec/shared_implementation.rb
123
124
  - spec/sjekksum/damm_spec.rb
124
125
  - spec/sjekksum/isbn10_spec.rb
126
+ - spec/sjekksum/isbn13_spec.rb
125
127
  - spec/sjekksum/luhn_spec.rb
126
128
  - spec/sjekksum/primitive97_spec.rb
127
129
  - spec/sjekksum/primitive_spec.rb
@@ -157,6 +159,7 @@ test_files:
157
159
  - spec/shared_implementation.rb
158
160
  - spec/sjekksum/damm_spec.rb
159
161
  - spec/sjekksum/isbn10_spec.rb
162
+ - spec/sjekksum/isbn13_spec.rb
160
163
  - spec/sjekksum/luhn_spec.rb
161
164
  - spec/sjekksum/primitive97_spec.rb
162
165
  - spec/sjekksum/primitive_spec.rb