sjekksum 0.0.1 → 0.0.2

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: 138a821d406efac0c481425e7de8956af20f390d
4
- data.tar.gz: 6655ede5c5a4c17a69ea6a166d46632128327c90
3
+ metadata.gz: e6d1ff16d06db67ad288e906d6550e945c1550e4
4
+ data.tar.gz: daf3d1554d22f668c7f61af87a86feb00f8e0c39
5
5
  SHA512:
6
- metadata.gz: 057656143728ce66d976633e71c73da8e4392cc7672eedcebc4c83499a905805260b15b35ed5603447db53432662a1b14990d86f93a5215a2561e0fc30451bb7
7
- data.tar.gz: a2b2c5962a35890d0a203bd845fc3cf7270a3a5e9002416d1e00725750faecba6dcff2416183abba9a9058f5d6c7edc0e51a3432897b102336693e6d48a67a47
6
+ metadata.gz: f20e2ba3177709dd77cc43fd92b541f889b2fc192bbe9fdba0eae82492c7dac8c3f5f90fa34231efb865f0c675f68f607feef574708f8566ef5cde3b2126c721
7
+ data.tar.gz: 5b13d80284d30c3afdb52161f2f90f5c532e4823bd5cfde53e51646f1be57a5b33561954c39fce7357957fa51fbc8b88c252d9b2a08b9bbc5da59e27e25d7ae9
data/lib/sjekksum/damm.rb CHANGED
@@ -1,8 +1,15 @@
1
1
  module Sjekksum
2
+ #
3
+ # Module for calculation and validation of Damm checksums
4
+ #
5
+ # @see http://en.wikipedia.org/wiki/Damm_algorithm Damm algorithm
6
+ #
2
7
  module Damm
3
8
  extend self
4
9
  extend Shared
5
10
 
11
+ # The totally anti-symmetric quasigroup
12
+ # @see http://archiv.ub.uni-marburg.de/diss/z2004/0516/pdf/dhmd.pdf [PDF] Damm, H. Michael (2004). Total anti-symmetrische Quasigruppen (Dr. rer. nat.). Philipps-Universität Marburg.
6
13
  QUASIGROUP = [
7
14
  [0, 3, 1, 7, 5, 9, 8, 6, 4, 2],
8
15
  [7, 0, 9, 2, 1, 5, 4, 8, 6, 3],
@@ -16,21 +23,51 @@ module Sjekksum
16
23
  [2, 5, 8, 1, 4, 3, 6, 7, 9, 0]
17
24
  ].freeze
18
25
 
19
- def of input_value
20
- raise_on_type_mismatch input_value
21
- digits = input_value.to_s.chars.map(&:to_i)
26
+ #
27
+ # Calculates Damm checksum
28
+ #
29
+ # @example
30
+ # Sjekksum::Damm.of(572) #=> 4
31
+ #
32
+ # @param number [Integer] number for which the checksum should be calculated
33
+ #
34
+ # @return [Integer] calculated checksum
35
+ def of number
36
+ raise_on_type_mismatch number
37
+ digits = number.to_s.chars.map(&:to_i)
22
38
  digits.reduce(0){|check, digit| QUASIGROUP[check][digit] }
23
39
  end
40
+ alias_method :checksum, :of
24
41
 
25
- def valid? input_value
26
- raise_on_type_mismatch input_value
27
- self.of(input_value).zero?
42
+ #
43
+ # Damm validation of provided number
44
+ #
45
+ # @example
46
+ # Sjekksum::Damm.valid?(5724) #=> true
47
+ #
48
+ # @param number [Integer] number with included checksum
49
+ #
50
+ # @return [Boolean]
51
+ def valid? number
52
+ raise_on_type_mismatch number
53
+ self.of(number).zero?
28
54
  end
55
+ alias_method :is_valid?, :valid?
29
56
 
30
- def convert input_value
31
- raise_on_type_mismatch input_value
32
- (input_value * 10) + self.of(input_value)
57
+ #
58
+ # Transforms a number by appending the Damm checksum digit
59
+ #
60
+ # @example
61
+ # Sjekksum::Damm.convert(572) #=> 5724
62
+ #
63
+ # @param number [Integer] number without a checksum
64
+ #
65
+ # @return [Integer] final number including the checksum
66
+ def convert number
67
+ raise_on_type_mismatch number
68
+ (number * 10) + self.of(number)
33
69
  end
70
+ alias_method :transform, :convert
34
71
 
35
72
  end
36
73
  end
data/lib/sjekksum/luhn.rb CHANGED
@@ -1,26 +1,62 @@
1
1
  module Sjekksum
2
+ #
3
+ # Module for calculation and validation of Luhn checksums
4
+ #
5
+ # @see http://en.wikipedia.org/wiki/Luhn_algorithm Luhn algorithm
6
+ #
2
7
  module Luhn
3
8
  extend self
4
9
  extend Shared
5
10
 
6
- def of input_value
7
- raise_on_type_mismatch input_value
8
- digits = input_value.to_s.chars.map(&:to_i)
11
+ #
12
+ # Calculates Luhn checksum
13
+ #
14
+ # @example
15
+ # Sjekksum::Luhn.of(7992739871) #=> 3
16
+ #
17
+ # @param number [Integer] number for which the checksum should be calculated
18
+ #
19
+ # @return [Integer] calculated checksum
20
+ def of number
21
+ raise_on_type_mismatch number
22
+ digits = number.to_s.chars.map(&:to_i)
9
23
  sum = digits.reverse.map.with_index do |digit, idx|
10
24
  idx.even? ? (digit * 2).divmod(10).reduce(&:+) : digit
11
25
  end.reverse.reduce(&:+)
12
26
 
13
27
  (10 - sum % 10) % 10
14
28
  end
29
+ alias_method :checksum, :of
15
30
 
16
- def valid? input_value
17
- raise_on_type_mismatch input_value
18
- self.of(input_value.div(10)) == (input_value % 10)
31
+ #
32
+ # Luhn validation of provided number
33
+ #
34
+ # @example
35
+ # Sjekksum::Luhn.valid?(79927398713) #=> true
36
+ #
37
+ # @param number [Integer] number with included checksum
38
+ #
39
+ # @return [Boolean]
40
+ def valid? number
41
+ raise_on_type_mismatch number
42
+ self.of(number.div(10)) == (number % 10)
19
43
  end
44
+ alias_method :is_valid?, :valid?
20
45
 
21
- def convert input_value
22
- raise_on_type_mismatch input_value
23
- (input_value * 10) + self.of(input_value)
46
+ #
47
+ # Transforms a number by appending the Luhn checksum digit
48
+ #
49
+ # @example
50
+ # Sjekksum::Luhn.convert(7992739871) #=> 79927398713
51
+ #
52
+ # @param number [Integer] number without a checksum
53
+ #
54
+ # @return [Integer] final number including the checksum
55
+ def convert number
56
+ raise_on_type_mismatch number
57
+ (number * 10) + self.of(number)
24
58
  end
59
+ alias_method :transform, :convert
60
+
25
61
  end
26
62
  end
@@ -1,10 +1,16 @@
1
1
  module Sjekksum
2
+ #
3
+ # Shared helper methods
4
+ #
2
5
  module Shared
3
6
 
4
7
  private
5
8
 
6
- def raise_on_type_mismatch input_value
7
- raise ArgumentError unless input_value.is_a?(Integer)
9
+ #
10
+ # Checks input type and raises if requirement is not met (currently the value has to be an integer)
11
+ # @param number [Object]
12
+ def raise_on_type_mismatch number
13
+ raise ArgumentError unless number.is_a?(Integer)
8
14
  end
9
15
 
10
16
  end
@@ -1,8 +1,14 @@
1
1
  module Sjekksum
2
+ #
3
+ # Module for calculation and validation of Verhoeff checksums
4
+ #
5
+ # @see http://en.wikipedia.org/wiki/Verhoeff_algorithm Verhoeff algorithm
6
+ #
2
7
  module Verhoeff
3
8
  extend self
4
9
  extend Shared
5
10
 
11
+ # Table of multiplication in the dihedral group D5
6
12
  DIHEDRAL_GROUP_D5 = [
7
13
  [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
8
14
  [ 1, 2, 3, 4, 0, 6, 7, 8, 9, 5 ],
@@ -16,6 +22,7 @@ module Sjekksum
16
22
  [ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ]
17
23
  ].freeze
18
24
 
25
+ # The permutation table
19
26
  PERMUTATION = [
20
27
  [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
21
28
  [ 1, 5, 7, 6, 2, 8, 3, 0, 9, 4 ],
@@ -27,25 +34,57 @@ module Sjekksum
27
34
  [ 7, 0, 4, 6, 9, 1, 3, 2, 5, 8 ]
28
35
  ].freeze
29
36
 
37
+ # The multiplicative inverse of a digit in the dihedral group D5
30
38
  INVERSE = [ 0, 4, 3, 2, 1, 5, 6, 7, 8, 9 ].freeze
31
39
 
32
- def of input_value
33
- raise_on_type_mismatch input_value
34
- digits = input_value.to_s.chars.map(&:to_i)
40
+ #
41
+ # Calculates Verhoeff checksum
42
+ #
43
+ # @example
44
+ # Sjekksum::Verhoeff.of(142857) #=> 0
45
+ #
46
+ # @param number [Integer] number for which the checksum should be calculated
47
+ #
48
+ # @return [Integer] calculated checksum
49
+ def of number
50
+ raise_on_type_mismatch number
51
+ digits = number.to_s.chars.map(&:to_i)
35
52
  INVERSE[digits.reverse_each.with_index.reduce(0) { |check, (digit, idx)|
36
53
  d_row = DIHEDRAL_GROUP_D5[check]
37
54
  d_row[ PERMUTATION[idx.next % 8][digit] ]
38
55
  }]
39
56
  end
57
+ alias_method :checksum, :of
40
58
 
41
- def valid? input_value
42
- raise_on_type_mismatch input_value
43
- self.of(input_value.div(10)) == (input_value % 10)
59
+ #
60
+ # Verhoeff validation of provided number
61
+ #
62
+ # @example
63
+ # Sjekksum::Verhoeff.valid?(1428570) #=> true
64
+ #
65
+ # @param number [Integer] number with included checksum
66
+ #
67
+ # @return [Boolean]
68
+ def valid? number
69
+ raise_on_type_mismatch number
70
+ self.of(number.div(10)) == (number % 10)
44
71
  end
72
+ alias_method :is_valid?, :valid?
45
73
 
46
- def convert input_value
47
- raise_on_type_mismatch input_value
48
- (input_value * 10) + self.of(input_value)
74
+ #
75
+ # Transforms a number by appending the Verhoeff checksum digit
76
+ #
77
+ # @example
78
+ # Sjekksum::Verhoeff.convert(142857) #=> 1428570
79
+ #
80
+ # @param number [Integer] number without a checksum
81
+ #
82
+ # @return [Integer] final number including the checksum
83
+ def convert number
84
+ raise_on_type_mismatch number
85
+ (number * 10) + self.of(number)
49
86
  end
87
+ alias_method :transform, :convert
88
+
50
89
  end
51
90
  end
@@ -1,3 +1,4 @@
1
1
  module Sjekksum
2
- VERSION = "0.0.1"
2
+ # Version constant
3
+ VERSION = "0.0.2"
3
4
  end
data/lib/sjekksum.rb CHANGED
@@ -1,55 +1,156 @@
1
1
  require "sjekksum/version"
2
-
3
2
  require "sjekksum/shared"
4
3
  require "sjekksum/damm"
5
4
  require "sjekksum/luhn"
6
5
  require "sjekksum/verhoeff"
7
6
 
7
+ #
8
+ # Base module with convenient shortcuts
9
+ #
8
10
  module Sjekksum
9
11
  extend self
10
12
 
11
- def damm_of input_value
12
- Damm.of input_value
13
+ #
14
+ # Calculates Damm checksum
15
+ #
16
+ # @example
17
+ # Sjekksum.damm(572) #=> 4
18
+ #
19
+ # @see Sjekksum::Damm#of
20
+ #
21
+ # @param number [Integer] number for which the checksum should be calculated
22
+ #
23
+ # @return [Integer] calculated checksum
24
+ def damm_of number
25
+ Damm.of number
13
26
  end
14
27
  alias_method :damm, :damm_of
15
28
 
16
- def luhn_of input_value
17
- Luhn.of input_value
29
+ #
30
+ # Calculates Luhn checksum
31
+ #
32
+ # @example
33
+ # Sjekksum.luhn(7992739871) #=> 3
34
+ #
35
+ # @see Sjekksum::Luhn#of
36
+ #
37
+ # @param number [Integer] number for which the checksum should be calculated
38
+ #
39
+ # @return [Integer] calculated checksum
40
+ def luhn_of number
41
+ Luhn.of number
18
42
  end
19
43
  alias_method :luhn, :luhn_of
20
44
 
21
- def verhoeff_of input_value
22
- Verhoeff.of input_value
45
+ #
46
+ # Calculates Verhoeff checksum
47
+ #
48
+ # @example
49
+ # Sjekksum.verhoeff(142857) #=> 0
50
+ #
51
+ # @see Sjekksum::Verhoeff#of
52
+ #
53
+ # @param number [Integer] number for which the checksum should be calculated
54
+ #
55
+ # @return [Integer] calculated checksum
56
+ def verhoeff_of number
57
+ Verhoeff.of number
23
58
  end
24
59
  alias_method :verhoeff, :verhoeff_of
25
60
 
26
- def valid_damm? input_value
27
- Damm.valid? input_value
61
+ #
62
+ # Damm validation of provided number
63
+ #
64
+ # @example
65
+ # Sjekksum.damm?(5724) #=> true
66
+ #
67
+ # @see Sjekksum::Damm#valid?
68
+ #
69
+ # @param number [Integer] number with included checksum
70
+ #
71
+ # @return [Boolean]
72
+ def valid_damm? number
73
+ Damm.valid? number
28
74
  end
29
75
  alias_method :damm?, :valid_damm?
30
76
 
31
- def valid_luhn? input_value
32
- Luhn.valid? input_value
77
+ #
78
+ # Luhn validation of provided number
79
+ #
80
+ # @example
81
+ # Sjekksum.luhn?(79927398713) #=> true
82
+ #
83
+ # @see Sjekksum::Luhn#valid?
84
+ #
85
+ # @param number [Integer] number with included checksum
86
+ #
87
+ # @return [Boolean]
88
+ def valid_luhn? number
89
+ Luhn.valid? number
33
90
  end
34
91
  alias_method :luhn?, :valid_luhn?
35
92
 
36
- def valid_verhoeff? input_value
37
- Verhoeff.valid? input_value
93
+ #
94
+ # Verhoeff validation of provided number
95
+ #
96
+ # @example
97
+ # Sjekksum.verhoeff?(1428570) #=> true
98
+ #
99
+ # @see Sjekksum::Verhoeff#valid?
100
+ #
101
+ # @param number [Integer] number with included checksum
102
+ #
103
+ # @return [Boolean]
104
+ def valid_verhoeff? number
105
+ Verhoeff.valid? number
38
106
  end
39
107
  alias_method :verhoeff?, :valid_verhoeff?
40
108
 
41
- def make_damm input_value
42
- Damm.convert input_value
109
+ #
110
+ # Transforms a number by appending the Damm checksum digit
111
+ #
112
+ # @example
113
+ # Sjekksum.damm!(572) #=> 5724
114
+ #
115
+ # @see Sjekksum::Damm#convert
116
+ #
117
+ # @param number [Integer] number without a checksum
118
+ #
119
+ # @return [Integer] final number including the checksum
120
+ def make_damm number
121
+ Damm.convert number
43
122
  end
44
123
  alias_method :damm!, :make_damm
45
124
 
46
- def make_luhn input_value
47
- Luhn.convert input_value
125
+ #
126
+ # Transforms a number by appending the Luhn checksum digit
127
+ #
128
+ # @example
129
+ # Sjekksum.luhn!(7992739871) #=> 79927398713
130
+ #
131
+ # @see Sjekksum::Luhn#convert
132
+ #
133
+ # @param number [Integer] number without a checksum
134
+ #
135
+ # @return [Integer] final number including the checksum
136
+ def make_luhn number
137
+ Luhn.convert number
48
138
  end
49
139
  alias_method :luhn!, :make_luhn
50
140
 
51
- def make_verhoeff input_value
52
- Verhoeff.convert input_value
141
+ #
142
+ # Transforms a number by appending the Verhoeff checksum digit
143
+ #
144
+ # @example
145
+ # Sjekksum.verhoeff!(142857) #=> 1428570
146
+ #
147
+ # @see Sjekksum::Verhoeff#convert
148
+ #
149
+ # @param number [Integer] number without a checksum
150
+ #
151
+ # @return [Integer] final number including the checksum
152
+ def make_verhoeff number
153
+ Verhoeff.convert number
53
154
  end
54
155
  alias_method :verhoeff!, :make_verhoeff
55
156
 
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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Grabo