sjekksum 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 +39 -2
- data/lib/sjekksum/damm.rb +17 -17
- data/lib/sjekksum/luhn.rb +9 -8
- data/lib/sjekksum/primitive.rb +58 -0
- data/lib/sjekksum/primitive97.rb +58 -0
- data/lib/sjekksum/shared.rb +25 -1
- data/lib/sjekksum/upc.rb +68 -0
- data/lib/sjekksum/verhoeff.rb +8 -7
- data/lib/sjekksum/version.rb +1 -1
- data/lib/sjekksum.rb +159 -12
- data/spec/shared_implementation.rb +5 -5
- data/spec/sjekksum/damm_spec.rb +13 -9
- data/spec/sjekksum/luhn_spec.rb +13 -9
- data/spec/sjekksum/primitive97_spec.rb +27 -0
- data/spec/sjekksum/primitive_spec.rb +27 -0
- data/spec/sjekksum/upc_spec.rb +27 -0
- data/spec/sjekksum/verhoeff_spec.rb +13 -9
- data/spec/sjekksum_spec.rb +52 -4
- data/spec/spec_helper.rb +12 -0
- metadata +10 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebf2decf9fa08a77d79569fc64a315cafdaf33b0
|
4
|
+
data.tar.gz: 32770f2b17ad7053f425b38a24a82ff28780ebc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f4b7601494c7e8631b2203c81d9e4333212cfcd4f0d7861da62e78a8715bddef3ee255b904d7556de1c3acce5de87c9b64f851bfec5dd3917e61a6ebbe0a900
|
7
|
+
data.tar.gz: 41346fdd102f54ac079cc5e53bdff8bb8aed90feaa90be508eb9e8581e904e1111b53252a47381f0bcdd86d89bf2b6cb3176cbab7255da187e62d7cf73d484bd
|
data/README.md
CHANGED
@@ -1,7 +1,18 @@
|
|
1
|
-
# Sjekksum
|
1
|
+
# Sjekksum [![Gem Version](https://badge.fury.io/rb/sjekksum.png)](http://badge.fury.io/rb/sjekksum) [![Build Status](https://travis-ci.org/asaaki/sjekksum.png?branch=master)](https://travis-ci.org/asaaki/sjekksum)
|
2
2
|
|
3
3
|
A gem to provide some checksum algorithms like Luhn, Damm and Verhoeff.
|
4
4
|
|
5
|
+
----
|
6
|
+
|
7
|
+
All used algorithms for generating and validating checksums must calculate a single check digit only.
|
8
|
+
|
9
|
+
More extensive checksum algorithms like Adler-32, CRC, BSD checksum, SYSV checksum, all hash algorithms and friends are not part of this project.
|
10
|
+
Also no advanced algorithms like IBAN and credit card number calculation can be found here due to their nature in these cases more transformations and steps have to be taken.
|
11
|
+
Furthermore this gem does not allow any other input type than integers or strings of integer digits to simplify transformations here (so all extended algorithms allowing characters are not included as well).
|
12
|
+
For the string inputs all non-integer bytes are thrown away (e. g. `"01-234.567 89" => "0123456789" => [0,1,2,3,4,5,6,7,8,9]`).
|
13
|
+
|
14
|
+
Shortly: This gem tries to follow the [UNIX philosophy](http://en.wikipedia.org/wiki/Unix_philosophy) in parts: »Write programs that do one thing and do it well.«
|
15
|
+
|
5
16
|
|
6
17
|
|
7
18
|
## Installation
|
@@ -22,7 +33,33 @@ Or install it yourself as:
|
|
22
33
|
|
23
34
|
## Usage
|
24
35
|
|
25
|
-
|
36
|
+
```ruby
|
37
|
+
require "sjekksum"
|
38
|
+
|
39
|
+
Sjekksum.damm(572) #=> 4
|
40
|
+
Sjekksum.damm!(572) #=> 5724
|
41
|
+
Sjekksum.damm?(5724) #=> true
|
42
|
+
|
43
|
+
Sjekksum.luhn(7992739871) #=> 3
|
44
|
+
Sjekksum.luhn!(7992739871) #=> 79927398713
|
45
|
+
Sjekksum.luhn?(79927398713) #=> true
|
46
|
+
|
47
|
+
Sjekksum.upc("03600024145") #=> 7
|
48
|
+
Sjekksum.upc!("03600024145") #=> "036000241457"
|
49
|
+
Sjekksum.upc?("03600024145") #=> true
|
50
|
+
|
51
|
+
Sjekksum.verhoeff(142857) #=> 0
|
52
|
+
Sjekksum.verhoeff?(1428570) #=> true
|
53
|
+
Sjekksum.verhoeff!(142857) #=> 1428570
|
54
|
+
|
55
|
+
Sjekksum.primitive(232323) #=> 6
|
56
|
+
Sjekksum.primitive?(2323236) #=> true
|
57
|
+
Sjekksum.primitive!(232323) #=> 2323236
|
58
|
+
|
59
|
+
Sjekksum.primitive97(23569) #=> 0
|
60
|
+
Sjekksum.primitive97?(235695) #=> true
|
61
|
+
Sjekksum.primitive97!(23569) #=> 235695
|
62
|
+
```
|
26
63
|
|
27
64
|
|
28
65
|
|
data/lib/sjekksum/damm.rb
CHANGED
@@ -11,16 +11,16 @@ module Sjekksum
|
|
11
11
|
# The totally anti-symmetric quasigroup
|
12
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.
|
13
13
|
QUASIGROUP = [
|
14
|
-
[0, 3, 1, 7, 5, 9, 8, 6, 4, 2],
|
15
|
-
[7, 0, 9, 2, 1, 5, 4, 8, 6, 3],
|
16
|
-
[4, 2, 0, 6, 8, 7, 1, 3, 5, 9],
|
17
|
-
[1, 7, 5, 0, 9, 8, 3, 4, 2, 6],
|
18
|
-
[6, 1, 2, 3, 0, 4, 5, 9, 7, 8],
|
19
|
-
[3, 6, 7, 4, 2, 0, 9, 5, 8, 1],
|
20
|
-
[5, 8, 6, 9, 7, 2, 0, 1, 3, 4],
|
21
|
-
[8, 9, 4, 5, 3, 6, 2, 0, 1, 7],
|
22
|
-
[9, 4, 3, 8, 6, 1, 7, 2, 0, 5],
|
23
|
-
[2, 5, 8, 1, 4, 3, 6, 7, 9, 0]
|
14
|
+
[ 0, 3, 1, 7, 5, 9, 8, 6, 4, 2 ],
|
15
|
+
[ 7, 0, 9, 2, 1, 5, 4, 8, 6, 3 ],
|
16
|
+
[ 4, 2, 0, 6, 8, 7, 1, 3, 5, 9 ],
|
17
|
+
[ 1, 7, 5, 0, 9, 8, 3, 4, 2, 6 ],
|
18
|
+
[ 6, 1, 2, 3, 0, 4, 5, 9, 7, 8 ],
|
19
|
+
[ 3, 6, 7, 4, 2, 0, 9, 5, 8, 1 ],
|
20
|
+
[ 5, 8, 6, 9, 7, 2, 0, 1, 3, 4 ],
|
21
|
+
[ 8, 9, 4, 5, 3, 6, 2, 0, 1, 7 ],
|
22
|
+
[ 9, 4, 3, 8, 6, 1, 7, 2, 0, 5 ],
|
23
|
+
[ 2, 5, 8, 1, 4, 3, 6, 7, 9, 0 ]
|
24
24
|
].freeze
|
25
25
|
|
26
26
|
#
|
@@ -29,13 +29,13 @@ module Sjekksum
|
|
29
29
|
# @example
|
30
30
|
# Sjekksum::Damm.of(572) #=> 4
|
31
31
|
#
|
32
|
-
# @param number [Integer] number for which the checksum should be calculated
|
32
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
33
33
|
#
|
34
34
|
# @return [Integer] calculated checksum
|
35
35
|
def of number
|
36
36
|
raise_on_type_mismatch number
|
37
|
-
digits = number
|
38
|
-
digits.reduce(0){|check, digit| QUASIGROUP[check][digit] }
|
37
|
+
digits = convert_number_to_digits(number)
|
38
|
+
digits.reduce(0){ |check, digit| QUASIGROUP[check][digit] }
|
39
39
|
end
|
40
40
|
alias_method :checksum, :of
|
41
41
|
|
@@ -45,7 +45,7 @@ module Sjekksum
|
|
45
45
|
# @example
|
46
46
|
# Sjekksum::Damm.valid?(5724) #=> true
|
47
47
|
#
|
48
|
-
# @param number [Integer] number with included checksum
|
48
|
+
# @param number [Integer, String] number with included checksum
|
49
49
|
#
|
50
50
|
# @return [Boolean]
|
51
51
|
def valid? number
|
@@ -60,12 +60,12 @@ module Sjekksum
|
|
60
60
|
# @example
|
61
61
|
# Sjekksum::Damm.convert(572) #=> 5724
|
62
62
|
#
|
63
|
-
# @param number [Integer] number without a checksum
|
63
|
+
# @param number [Integer, String] number without a checksum
|
64
64
|
#
|
65
|
-
# @return [Integer] final number including the checksum
|
65
|
+
# @return [Integer, String] final number including the checksum
|
66
66
|
def convert number
|
67
67
|
raise_on_type_mismatch number
|
68
|
-
|
68
|
+
typed_conversion number
|
69
69
|
end
|
70
70
|
alias_method :transform, :convert
|
71
71
|
|
data/lib/sjekksum/luhn.rb
CHANGED
@@ -14,15 +14,15 @@ module Sjekksum
|
|
14
14
|
# @example
|
15
15
|
# Sjekksum::Luhn.of(7992739871) #=> 3
|
16
16
|
#
|
17
|
-
# @param number [Integer] number for which the checksum should be calculated
|
17
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
18
18
|
#
|
19
19
|
# @return [Integer] calculated checksum
|
20
20
|
def of number
|
21
21
|
raise_on_type_mismatch number
|
22
|
-
digits = number
|
22
|
+
digits = convert_number_to_digits(number)
|
23
23
|
sum = digits.reverse.map.with_index do |digit, idx|
|
24
24
|
idx.even? ? (digit * 2).divmod(10).reduce(&:+) : digit
|
25
|
-
end.
|
25
|
+
end.reduce(&:+)
|
26
26
|
|
27
27
|
(10 - sum % 10) % 10
|
28
28
|
end
|
@@ -34,12 +34,13 @@ module Sjekksum
|
|
34
34
|
# @example
|
35
35
|
# Sjekksum::Luhn.valid?(79927398713) #=> true
|
36
36
|
#
|
37
|
-
# @param number [Integer] number with included checksum
|
37
|
+
# @param number [Integer, String] number with included checksum
|
38
38
|
#
|
39
39
|
# @return [Boolean]
|
40
40
|
def valid? number
|
41
41
|
raise_on_type_mismatch number
|
42
|
-
|
42
|
+
num, check = split_number(number)
|
43
|
+
self.of(num) == check
|
43
44
|
end
|
44
45
|
alias_method :is_valid?, :valid?
|
45
46
|
|
@@ -49,12 +50,12 @@ module Sjekksum
|
|
49
50
|
# @example
|
50
51
|
# Sjekksum::Luhn.convert(7992739871) #=> 79927398713
|
51
52
|
#
|
52
|
-
# @param number [Integer] number without a checksum
|
53
|
+
# @param number [Integer, String] number without a checksum
|
53
54
|
#
|
54
|
-
# @return [Integer] final number including the checksum
|
55
|
+
# @return [Integer, String] final number including the checksum
|
55
56
|
def convert number
|
56
57
|
raise_on_type_mismatch number
|
57
|
-
|
58
|
+
typed_conversion number
|
58
59
|
end
|
59
60
|
alias_method :transform, :convert
|
60
61
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Sjekksum
|
2
|
+
#
|
3
|
+
# Module for calculation and validation of Primitive checksums
|
4
|
+
#
|
5
|
+
# The primitive checksum is just a reduced digit sum (modulo 9).
|
6
|
+
#
|
7
|
+
module Primitive
|
8
|
+
extend self
|
9
|
+
extend Shared
|
10
|
+
|
11
|
+
#
|
12
|
+
# Calculates Primitive checksum
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# Sjekksum::Primitive.of(232323) #=> 6
|
16
|
+
#
|
17
|
+
# @param number [Integer, String] 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
|
+
convert_to_int(number) % 9
|
23
|
+
end
|
24
|
+
alias_method :checksum, :of
|
25
|
+
|
26
|
+
#
|
27
|
+
# Primitive validation of provided number
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# Sjekksum::Primitive.valid?(232323) #=> true
|
31
|
+
#
|
32
|
+
# @param number [Integer, String] number with included checksum
|
33
|
+
#
|
34
|
+
# @return [Boolean]
|
35
|
+
def valid? number
|
36
|
+
raise_on_type_mismatch number
|
37
|
+
num, check = split_number(number)
|
38
|
+
self.of(num) == check
|
39
|
+
end
|
40
|
+
alias_method :is_valid?, :valid?
|
41
|
+
|
42
|
+
#
|
43
|
+
# Transforms a number by appending the Primitive checksum digit
|
44
|
+
#
|
45
|
+
# @example
|
46
|
+
# Sjekksum::Primitive.convert(232323) #=> 2323236
|
47
|
+
#
|
48
|
+
# @param number [Integer, String] number without a checksum
|
49
|
+
#
|
50
|
+
# @return [Integer, String] final number including the checksum
|
51
|
+
def convert number
|
52
|
+
raise_on_type_mismatch number
|
53
|
+
typed_conversion number
|
54
|
+
end
|
55
|
+
alias_method :transform, :convert
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Sjekksum
|
2
|
+
#
|
3
|
+
# Module for calculation and validation of Primitive97 checksums
|
4
|
+
#
|
5
|
+
# This primitive checksum is based on the modulo 97 (calculation of check digits) and modulo 9 (reduction to a single digit).
|
6
|
+
#
|
7
|
+
module Primitive97
|
8
|
+
extend self
|
9
|
+
extend Shared
|
10
|
+
|
11
|
+
#
|
12
|
+
# Calculates Primitive97 checksum
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# Sjekksum::Primitive97.of(23569) #=> 5
|
16
|
+
#
|
17
|
+
# @param number [Integer, String] 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
|
+
(convert_to_int(number) % 97) % 9
|
23
|
+
end
|
24
|
+
alias_method :checksum, :of
|
25
|
+
|
26
|
+
#
|
27
|
+
# Primitive97 validation of provided number
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# Sjekksum::Primitive97.valid?(235695) #=> true
|
31
|
+
#
|
32
|
+
# @param number [Integer, String] number with included checksum
|
33
|
+
#
|
34
|
+
# @return [Boolean]
|
35
|
+
def valid? number
|
36
|
+
raise_on_type_mismatch number
|
37
|
+
num, check = split_number(number)
|
38
|
+
self.of(num) == check
|
39
|
+
end
|
40
|
+
alias_method :is_valid?, :valid?
|
41
|
+
|
42
|
+
#
|
43
|
+
# Transforms a number by appending the Primitive97 checksum digit
|
44
|
+
#
|
45
|
+
# @example
|
46
|
+
# Sjekksum::Primitive97.convert(23569) #=> 235695
|
47
|
+
#
|
48
|
+
# @param number [Integer, String] number without a checksum
|
49
|
+
#
|
50
|
+
# @return [Integer, String] final number including the checksum
|
51
|
+
def convert number
|
52
|
+
raise_on_type_mismatch number
|
53
|
+
typed_conversion number
|
54
|
+
end
|
55
|
+
alias_method :transform, :convert
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
data/lib/sjekksum/shared.rb
CHANGED
@@ -10,7 +10,31 @@ module Sjekksum
|
|
10
10
|
# Checks input type and raises if requirement is not met (currently the value has to be an integer)
|
11
11
|
# @param number [Object]
|
12
12
|
def raise_on_type_mismatch number
|
13
|
-
raise ArgumentError unless number.is_a?(Integer)
|
13
|
+
raise ArgumentError unless number.is_a?(Integer) or number.is_a?(String)
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert_number_to_digits number
|
17
|
+
number.to_s.scan(/\d/).map{ |b| b.chr.to_i }
|
18
|
+
end
|
19
|
+
|
20
|
+
def convert_to_int number
|
21
|
+
convert_number_to_digits(number).join.to_i
|
22
|
+
end
|
23
|
+
|
24
|
+
def split_number number
|
25
|
+
if number.is_a?(String)
|
26
|
+
[ number[0..-2], number[-1].to_i ]
|
27
|
+
else
|
28
|
+
number.divmod(10)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def typed_conversion number
|
33
|
+
if number.is_a?(String)
|
34
|
+
number << self.of(number).to_s
|
35
|
+
else
|
36
|
+
convert_to_int(number) * 10 + self.of(number)
|
37
|
+
end
|
14
38
|
end
|
15
39
|
|
16
40
|
end
|
data/lib/sjekksum/upc.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
module Sjekksum
|
2
|
+
#
|
3
|
+
# Module for calculation and validation of UPC (Universal Product Code) checksums
|
4
|
+
#
|
5
|
+
# @see http://en.wikipedia.org/wiki/Universal_Product_Code#Check_digits Universal Product Code
|
6
|
+
#
|
7
|
+
# It's like Luhn but multiplies by 3 instead of 2.
|
8
|
+
# Also it must allow validation of numbers with leading zeros.
|
9
|
+
#
|
10
|
+
module UPC
|
11
|
+
extend self
|
12
|
+
extend Shared
|
13
|
+
|
14
|
+
#
|
15
|
+
# Calculates UPC checksum
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# Sjekksum::UPC.of("03600024145") #=> 7
|
19
|
+
#
|
20
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
21
|
+
#
|
22
|
+
# @return [Integer] calculated checksum
|
23
|
+
def of number
|
24
|
+
raise_on_type_mismatch number
|
25
|
+
digits = convert_number_to_digits(number)
|
26
|
+
sum = digits.map.with_index do |digit, idx|
|
27
|
+
idx.even? ? (digit * 3) : digit
|
28
|
+
end.reduce(&:+)
|
29
|
+
|
30
|
+
(10 - sum % 10) % 10
|
31
|
+
end
|
32
|
+
alias_method :checksum, :of
|
33
|
+
|
34
|
+
#
|
35
|
+
# UPC validation of provided number
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# Sjekksum::UPC.valid?("036000241457") #=> 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 UPC checksum digit
|
52
|
+
#
|
53
|
+
# It will preserve type (Integer/String) and therefore leading zeros.
|
54
|
+
#
|
55
|
+
# @example
|
56
|
+
# Sjekksum::UPC.convert("03600024145") #=> "036000241457"
|
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/verhoeff.rb
CHANGED
@@ -43,12 +43,12 @@ module Sjekksum
|
|
43
43
|
# @example
|
44
44
|
# Sjekksum::Verhoeff.of(142857) #=> 0
|
45
45
|
#
|
46
|
-
# @param number [Integer] number for which the checksum should be calculated
|
46
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
47
47
|
#
|
48
48
|
# @return [Integer] calculated checksum
|
49
49
|
def of number
|
50
50
|
raise_on_type_mismatch number
|
51
|
-
digits = number
|
51
|
+
digits = convert_number_to_digits(number)
|
52
52
|
INVERSE[digits.reverse_each.with_index.reduce(0) { |check, (digit, idx)|
|
53
53
|
d_row = DIHEDRAL_GROUP_D5[check]
|
54
54
|
d_row[ PERMUTATION[idx.next % 8][digit] ]
|
@@ -62,12 +62,13 @@ module Sjekksum
|
|
62
62
|
# @example
|
63
63
|
# Sjekksum::Verhoeff.valid?(1428570) #=> true
|
64
64
|
#
|
65
|
-
# @param number [Integer] number with included checksum
|
65
|
+
# @param number [Integer, String] number with included checksum
|
66
66
|
#
|
67
67
|
# @return [Boolean]
|
68
68
|
def valid? number
|
69
69
|
raise_on_type_mismatch number
|
70
|
-
|
70
|
+
num, check = split_number(number)
|
71
|
+
self.of(num) == check
|
71
72
|
end
|
72
73
|
alias_method :is_valid?, :valid?
|
73
74
|
|
@@ -77,12 +78,12 @@ module Sjekksum
|
|
77
78
|
# @example
|
78
79
|
# Sjekksum::Verhoeff.convert(142857) #=> 1428570
|
79
80
|
#
|
80
|
-
# @param number [Integer] number without a checksum
|
81
|
+
# @param number [Integer, String] number without a checksum
|
81
82
|
#
|
82
|
-
# @return [Integer] final number including the checksum
|
83
|
+
# @return [Integer, String] final number including the checksum
|
83
84
|
def convert number
|
84
85
|
raise_on_type_mismatch number
|
85
|
-
|
86
|
+
typed_conversion number
|
86
87
|
end
|
87
88
|
alias_method :transform, :convert
|
88
89
|
|
data/lib/sjekksum/version.rb
CHANGED
data/lib/sjekksum.rb
CHANGED
@@ -2,7 +2,10 @@ require "sjekksum/version"
|
|
2
2
|
require "sjekksum/shared"
|
3
3
|
require "sjekksum/damm"
|
4
4
|
require "sjekksum/luhn"
|
5
|
+
require "sjekksum/upc"
|
5
6
|
require "sjekksum/verhoeff"
|
7
|
+
require "sjekksum/primitive"
|
8
|
+
require "sjekksum/primitive97"
|
6
9
|
|
7
10
|
#
|
8
11
|
# Base module with convenient shortcuts
|
@@ -18,7 +21,7 @@ module Sjekksum
|
|
18
21
|
#
|
19
22
|
# @see Sjekksum::Damm#of
|
20
23
|
#
|
21
|
-
# @param number [Integer] number for which the checksum should be calculated
|
24
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
22
25
|
#
|
23
26
|
# @return [Integer] calculated checksum
|
24
27
|
def damm_of number
|
@@ -34,7 +37,7 @@ module Sjekksum
|
|
34
37
|
#
|
35
38
|
# @see Sjekksum::Luhn#of
|
36
39
|
#
|
37
|
-
# @param number [Integer] number for which the checksum should be calculated
|
40
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
38
41
|
#
|
39
42
|
# @return [Integer] calculated checksum
|
40
43
|
def luhn_of number
|
@@ -42,6 +45,22 @@ module Sjekksum
|
|
42
45
|
end
|
43
46
|
alias_method :luhn, :luhn_of
|
44
47
|
|
48
|
+
#
|
49
|
+
# Calculates UPC checksum
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# Sjekksum.upc("03600024145") #=> 7
|
53
|
+
#
|
54
|
+
# @see Sjekksum::UPC#of
|
55
|
+
#
|
56
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
57
|
+
#
|
58
|
+
# @return [Integer] calculated checksum
|
59
|
+
def upc_of number
|
60
|
+
UPC.of number
|
61
|
+
end
|
62
|
+
alias_method :upc, :upc_of
|
63
|
+
|
45
64
|
#
|
46
65
|
# Calculates Verhoeff checksum
|
47
66
|
#
|
@@ -50,7 +69,7 @@ module Sjekksum
|
|
50
69
|
#
|
51
70
|
# @see Sjekksum::Verhoeff#of
|
52
71
|
#
|
53
|
-
# @param number [Integer] number for which the checksum should be calculated
|
72
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
54
73
|
#
|
55
74
|
# @return [Integer] calculated checksum
|
56
75
|
def verhoeff_of number
|
@@ -58,6 +77,38 @@ module Sjekksum
|
|
58
77
|
end
|
59
78
|
alias_method :verhoeff, :verhoeff_of
|
60
79
|
|
80
|
+
#
|
81
|
+
# Calculates Primitive checksum
|
82
|
+
#
|
83
|
+
# @example
|
84
|
+
# Sjekksum.primitive(232323) #=> 6
|
85
|
+
#
|
86
|
+
# @see Sjekksum::Primitive#of
|
87
|
+
#
|
88
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
89
|
+
#
|
90
|
+
# @return [Integer] calculated checksum
|
91
|
+
def primitive_of number
|
92
|
+
Primitive.of number
|
93
|
+
end
|
94
|
+
alias_method :primitive, :primitive_of
|
95
|
+
|
96
|
+
#
|
97
|
+
# Calculates Primitive97 checksum
|
98
|
+
#
|
99
|
+
# @example
|
100
|
+
# Sjekksum.primitive97(232323) #=> 6
|
101
|
+
#
|
102
|
+
# @see Sjekksum::Primitive97#of
|
103
|
+
#
|
104
|
+
# @param number [Integer, String] number for which the checksum should be calculated
|
105
|
+
#
|
106
|
+
# @return [Integer] calculated checksum
|
107
|
+
def primitive97_of number
|
108
|
+
Primitive97.of number
|
109
|
+
end
|
110
|
+
alias_method :primitive97, :primitive97_of
|
111
|
+
|
61
112
|
#
|
62
113
|
# Damm validation of provided number
|
63
114
|
#
|
@@ -66,7 +117,7 @@ module Sjekksum
|
|
66
117
|
#
|
67
118
|
# @see Sjekksum::Damm#valid?
|
68
119
|
#
|
69
|
-
# @param number [Integer] number with included checksum
|
120
|
+
# @param number [Integer, String] number with included checksum
|
70
121
|
#
|
71
122
|
# @return [Boolean]
|
72
123
|
def valid_damm? number
|
@@ -82,7 +133,7 @@ module Sjekksum
|
|
82
133
|
#
|
83
134
|
# @see Sjekksum::Luhn#valid?
|
84
135
|
#
|
85
|
-
# @param number [Integer] number with included checksum
|
136
|
+
# @param number [Integer, String] number with included checksum
|
86
137
|
#
|
87
138
|
# @return [Boolean]
|
88
139
|
def valid_luhn? number
|
@@ -90,6 +141,22 @@ module Sjekksum
|
|
90
141
|
end
|
91
142
|
alias_method :luhn?, :valid_luhn?
|
92
143
|
|
144
|
+
#
|
145
|
+
# UPC validation of provided number
|
146
|
+
#
|
147
|
+
# @example
|
148
|
+
# Sjekksum.upc?("036000241457") #=> true
|
149
|
+
#
|
150
|
+
# @see Sjekksum::UPC#valid?
|
151
|
+
#
|
152
|
+
# @param number [Integer, String] number with included checksum
|
153
|
+
#
|
154
|
+
# @return [Boolean]
|
155
|
+
def valid_upc? number
|
156
|
+
UPC.valid? number
|
157
|
+
end
|
158
|
+
alias_method :upc?, :valid_upc?
|
159
|
+
|
93
160
|
#
|
94
161
|
# Verhoeff validation of provided number
|
95
162
|
#
|
@@ -98,7 +165,7 @@ module Sjekksum
|
|
98
165
|
#
|
99
166
|
# @see Sjekksum::Verhoeff#valid?
|
100
167
|
#
|
101
|
-
# @param number [Integer] number with included checksum
|
168
|
+
# @param number [Integer, String] number with included checksum
|
102
169
|
#
|
103
170
|
# @return [Boolean]
|
104
171
|
def valid_verhoeff? number
|
@@ -106,6 +173,38 @@ module Sjekksum
|
|
106
173
|
end
|
107
174
|
alias_method :verhoeff?, :valid_verhoeff?
|
108
175
|
|
176
|
+
#
|
177
|
+
# Primitive validation of provided number
|
178
|
+
#
|
179
|
+
# @example
|
180
|
+
# Sjekksum.primitive?(2323236) #=> true
|
181
|
+
#
|
182
|
+
# @see Sjekksum::Primitive#valid?
|
183
|
+
#
|
184
|
+
# @param number [Integer, String] number with included checksum
|
185
|
+
#
|
186
|
+
# @return [Boolean]
|
187
|
+
def valid_primitive? number
|
188
|
+
Primitive.valid? number
|
189
|
+
end
|
190
|
+
alias_method :primitive?, :valid_primitive?
|
191
|
+
|
192
|
+
#
|
193
|
+
# Primitive97 validation of provided number
|
194
|
+
#
|
195
|
+
# @example
|
196
|
+
# Sjekksum.primitive97?(2323235) #=> true
|
197
|
+
#
|
198
|
+
# @see Sjekksum::Primitive97#valid?
|
199
|
+
#
|
200
|
+
# @param number [Integer, String] number with included checksum
|
201
|
+
#
|
202
|
+
# @return [Boolean]
|
203
|
+
def valid_primitive97? number
|
204
|
+
Primitive97.valid? number
|
205
|
+
end
|
206
|
+
alias_method :primitive97?, :valid_primitive97?
|
207
|
+
|
109
208
|
#
|
110
209
|
# Transforms a number by appending the Damm checksum digit
|
111
210
|
#
|
@@ -114,9 +213,9 @@ module Sjekksum
|
|
114
213
|
#
|
115
214
|
# @see Sjekksum::Damm#convert
|
116
215
|
#
|
117
|
-
# @param number [Integer] number without a checksum
|
216
|
+
# @param number [Integer, String] number without a checksum
|
118
217
|
#
|
119
|
-
# @return [Integer] final number including the checksum
|
218
|
+
# @return [Integer, String] final number including the checksum
|
120
219
|
def make_damm number
|
121
220
|
Damm.convert number
|
122
221
|
end
|
@@ -130,14 +229,30 @@ module Sjekksum
|
|
130
229
|
#
|
131
230
|
# @see Sjekksum::Luhn#convert
|
132
231
|
#
|
133
|
-
# @param number [Integer] number without a checksum
|
232
|
+
# @param number [Integer, String] number without a checksum
|
134
233
|
#
|
135
|
-
# @return [Integer] final number including the checksum
|
234
|
+
# @return [Integer, String] final number including the checksum
|
136
235
|
def make_luhn number
|
137
236
|
Luhn.convert number
|
138
237
|
end
|
139
238
|
alias_method :luhn!, :make_luhn
|
140
239
|
|
240
|
+
#
|
241
|
+
# Transforms a number by appending the UPC checksum digit
|
242
|
+
#
|
243
|
+
# @example
|
244
|
+
# Sjekksum.upc!("03600024145") #=> "03600024147"
|
245
|
+
#
|
246
|
+
# @see Sjekksum::UPC#convert
|
247
|
+
#
|
248
|
+
# @param number [Integer, String] number without a checksum
|
249
|
+
#
|
250
|
+
# @return [Integer, String] final number including the checksum
|
251
|
+
def make_upc number
|
252
|
+
UPC.convert number
|
253
|
+
end
|
254
|
+
alias_method :upc!, :make_upc
|
255
|
+
|
141
256
|
#
|
142
257
|
# Transforms a number by appending the Verhoeff checksum digit
|
143
258
|
#
|
@@ -146,12 +261,44 @@ module Sjekksum
|
|
146
261
|
#
|
147
262
|
# @see Sjekksum::Verhoeff#convert
|
148
263
|
#
|
149
|
-
# @param number [Integer] number without a checksum
|
264
|
+
# @param number [Integer, String] number without a checksum
|
150
265
|
#
|
151
|
-
# @return [Integer] final number including the checksum
|
266
|
+
# @return [Integer, String] final number including the checksum
|
152
267
|
def make_verhoeff number
|
153
268
|
Verhoeff.convert number
|
154
269
|
end
|
155
270
|
alias_method :verhoeff!, :make_verhoeff
|
156
271
|
|
272
|
+
#
|
273
|
+
# Transforms a number by appending the Primitive checksum digit
|
274
|
+
#
|
275
|
+
# @example
|
276
|
+
# Sjekksum.primitive!(232323) #=> 2323236
|
277
|
+
#
|
278
|
+
# @see Sjekksum::Primitive#convert
|
279
|
+
#
|
280
|
+
# @param number [Integer, String] number without a checksum
|
281
|
+
#
|
282
|
+
# @return [Integer, String] final number including the checksum
|
283
|
+
def make_primitive number
|
284
|
+
Primitive.convert number
|
285
|
+
end
|
286
|
+
alias_method :primitive!, :make_primitive
|
287
|
+
|
288
|
+
#
|
289
|
+
# Transforms a number by appending the Primitive97 checksum digit
|
290
|
+
#
|
291
|
+
# @example
|
292
|
+
# Sjekksum.primitive97!(232323) #=> 2323235
|
293
|
+
#
|
294
|
+
# @see Sjekksum::Primitive97#convert
|
295
|
+
#
|
296
|
+
# @param number [Integer, String] number without a checksum
|
297
|
+
#
|
298
|
+
# @return [Integer, String] final number including the checksum
|
299
|
+
def make_primitive97 number
|
300
|
+
Primitive97.convert number
|
301
|
+
end
|
302
|
+
alias_method :primitive97!, :make_primitive97
|
303
|
+
|
157
304
|
end
|
@@ -16,14 +16,14 @@ shared_examples "a checksum implementation:" do |success_spec_matrix, fail_spec_
|
|
16
16
|
|
17
17
|
describe :valid? do
|
18
18
|
success_spec_matrix.each do |spec_item|
|
19
|
-
spec_value = spec_item[0]
|
19
|
+
spec_value = transform_spec_value(spec_item[0],spec_item[1])
|
20
20
|
it "returns true for #{spec_value}" do
|
21
21
|
expect(described_class.valid?(spec_value)).to be_true
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
fail_spec_matrix.each do |spec_item|
|
26
|
-
spec_value = spec_item[0]
|
26
|
+
spec_value = transform_spec_value(spec_item[0],spec_item[1])
|
27
27
|
it "does not return true for #{spec_value}" do
|
28
28
|
expect(described_class.valid?(spec_value)).to_not be_true
|
29
29
|
end
|
@@ -32,14 +32,14 @@ shared_examples "a checksum implementation:" do |success_spec_matrix, fail_spec_
|
|
32
32
|
|
33
33
|
describe :convert do
|
34
34
|
success_spec_matrix.each do |spec_item|
|
35
|
-
spec_value = spec_item[0]
|
35
|
+
spec_value = transform_spec_value(spec_item[0],spec_item[1])
|
36
36
|
it "transforms #{spec_item[0]} to #{spec_value}" do
|
37
37
|
expect(described_class.convert(spec_item[0])).to eq(spec_value)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
fail_spec_matrix.each do |spec_item|
|
42
|
-
spec_value = spec_item[0]
|
42
|
+
spec_value = transform_spec_value(spec_item[0],spec_item[1])
|
43
43
|
it "does not transform #{spec_item[0]} to #{spec_value}" do
|
44
44
|
expect(described_class.convert(spec_item[0])).to_not eq(spec_value)
|
45
45
|
end
|
@@ -47,7 +47,7 @@ shared_examples "a checksum implementation:" do |success_spec_matrix, fail_spec_
|
|
47
47
|
end
|
48
48
|
|
49
49
|
context "invalid input" do
|
50
|
-
[
|
50
|
+
[12.34, true, false, nil, {}, [], Proc.new{}, Class.new, Module.new].each do |invalid_input|
|
51
51
|
it "#of raises an ArgumentError for #{invalid_input.inspect} (type: #{invalid_input.class})" do
|
52
52
|
expect{ described_class.of(invalid_input) }.to raise_error(ArgumentError)
|
53
53
|
end
|
data/spec/sjekksum/damm_spec.rb
CHANGED
@@ -4,18 +4,22 @@ require "shared_implementation"
|
|
4
4
|
describe Sjekksum::Damm do
|
5
5
|
|
6
6
|
success_spec_matrix = [
|
7
|
-
[ 1,
|
8
|
-
[ 20,
|
9
|
-
[ 300,
|
10
|
-
[ 4000,
|
11
|
-
[ 55555,
|
12
|
-
[ 424242,
|
13
|
-
[ 572,
|
7
|
+
[ 1, 3 ],
|
8
|
+
[ 20, 7 ],
|
9
|
+
[ 300, 9 ],
|
10
|
+
[ 4000, 7 ],
|
11
|
+
[ 55555, 5 ],
|
12
|
+
[ 424242, 0 ],
|
13
|
+
[ 572, 4 ],
|
14
|
+
[ "572", 4 ],
|
15
|
+
[ "5.7-2", 4 ]
|
14
16
|
]
|
15
17
|
|
16
18
|
fail_spec_matrix = [
|
17
|
-
[ 1,
|
18
|
-
[ 572,
|
19
|
+
[ 1, 1 ],
|
20
|
+
[ 572, 9 ],
|
21
|
+
[ "572", 9 ],
|
22
|
+
[ "5.7-2", 9 ]
|
19
23
|
]
|
20
24
|
|
21
25
|
it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
|
data/spec/sjekksum/luhn_spec.rb
CHANGED
@@ -4,18 +4,22 @@ require "shared_implementation"
|
|
4
4
|
describe Sjekksum::Luhn do
|
5
5
|
|
6
6
|
success_spec_matrix = [
|
7
|
-
[ 1,
|
8
|
-
[ 20,
|
9
|
-
[ 300,
|
10
|
-
[ 4000,
|
11
|
-
[ 55555,
|
12
|
-
[ 424242,
|
13
|
-
[ 7992739871,
|
7
|
+
[ 1, 8 ],
|
8
|
+
[ 20, 8 ],
|
9
|
+
[ 300, 4 ],
|
10
|
+
[ 4000, 6 ],
|
11
|
+
[ 55555, 7 ],
|
12
|
+
[ 424242, 6 ],
|
13
|
+
[ 7992739871, 3 ],
|
14
|
+
[ "7992739871", 3 ],
|
15
|
+
[ "799.273-98 71", 3 ]
|
14
16
|
]
|
15
17
|
|
16
18
|
fail_spec_matrix = [
|
17
|
-
[ 1,
|
18
|
-
[ 7992739871,
|
19
|
+
[ 1, 1 ],
|
20
|
+
[ 7992739871, 9 ],
|
21
|
+
[ "7992739871", 9 ],
|
22
|
+
[ "799.273-98 71", 9 ]
|
19
23
|
]
|
20
24
|
|
21
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::Primitive97 do
|
5
|
+
|
6
|
+
success_spec_matrix = [
|
7
|
+
[ 1, 1 ],
|
8
|
+
[ 20, 2 ],
|
9
|
+
[ 300, 0 ],
|
10
|
+
[ 4000, 5 ],
|
11
|
+
[ 55555, 8 ],
|
12
|
+
[ 424242, 7 ],
|
13
|
+
[ 23569, 5 ],
|
14
|
+
[ "23569", 5 ],
|
15
|
+
[ "23.5-69", 5 ]
|
16
|
+
]
|
17
|
+
|
18
|
+
fail_spec_matrix = [
|
19
|
+
[ 1, 7 ],
|
20
|
+
[ 23569, 9 ],
|
21
|
+
[ "23569", 9 ],
|
22
|
+
[ "23.5-69", 9 ]
|
23
|
+
]
|
24
|
+
|
25
|
+
it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "shared_implementation"
|
3
|
+
|
4
|
+
describe Sjekksum::Primitive do
|
5
|
+
|
6
|
+
success_spec_matrix = [
|
7
|
+
[ 1, 1 ],
|
8
|
+
[ 20, 2 ],
|
9
|
+
[ 300, 3 ],
|
10
|
+
[ 4000, 4 ],
|
11
|
+
[ 55555, 7 ],
|
12
|
+
[ 424242, 0 ],
|
13
|
+
[ 232323, 6 ],
|
14
|
+
[ "232323", 6 ],
|
15
|
+
[ "23.23-23", 6 ]
|
16
|
+
]
|
17
|
+
|
18
|
+
fail_spec_matrix = [
|
19
|
+
[ 1, 7 ],
|
20
|
+
[ 232323, 9 ],
|
21
|
+
[ "232323", 9 ],
|
22
|
+
[ "23.23-23", 9 ]
|
23
|
+
]
|
24
|
+
|
25
|
+
it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "shared_implementation"
|
3
|
+
|
4
|
+
describe Sjekksum::UPC do
|
5
|
+
|
6
|
+
success_spec_matrix = [
|
7
|
+
[ 1, 7 ],
|
8
|
+
[ 20, 4 ],
|
9
|
+
[ 300, 1 ],
|
10
|
+
[ 4000, 8 ],
|
11
|
+
[ 55555, 5 ],
|
12
|
+
[ 424242, 8 ],
|
13
|
+
[ 3600024145, 3 ],
|
14
|
+
[ "03600024145", 7 ],
|
15
|
+
[ "036 000-241.45", 7 ]
|
16
|
+
]
|
17
|
+
|
18
|
+
fail_spec_matrix = [
|
19
|
+
[ 1, 1 ],
|
20
|
+
[ 3600024145, 7 ],
|
21
|
+
[ "03600024145", 9 ],
|
22
|
+
[ "036 000-241.45", 9 ]
|
23
|
+
]
|
24
|
+
|
25
|
+
it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
|
26
|
+
|
27
|
+
end
|
@@ -4,18 +4,22 @@ require "shared_implementation"
|
|
4
4
|
describe Sjekksum::Verhoeff do
|
5
5
|
|
6
6
|
success_spec_matrix = [
|
7
|
-
[ 1,
|
8
|
-
[ 20,
|
9
|
-
[ 300,
|
10
|
-
[ 4000,
|
11
|
-
[ 55555,
|
12
|
-
[ 424242,
|
13
|
-
[ 142857,
|
7
|
+
[ 1, 5 ],
|
8
|
+
[ 20, 4 ],
|
9
|
+
[ 300, 0 ],
|
10
|
+
[ 4000, 1 ],
|
11
|
+
[ 55555, 7 ],
|
12
|
+
[ 424242, 3 ],
|
13
|
+
[ 142857, 0 ],
|
14
|
+
[ "142857", 0 ],
|
15
|
+
[ "14.28-57", 0 ]
|
14
16
|
]
|
15
17
|
|
16
18
|
fail_spec_matrix = [
|
17
|
-
[ 1,
|
18
|
-
[ 142857,
|
19
|
+
[ 1, 1 ],
|
20
|
+
[ 142857, 9 ],
|
21
|
+
[ "142857", 9 ],
|
22
|
+
[ "14.28-57", 9 ]
|
19
23
|
]
|
20
24
|
|
21
25
|
it_behaves_like "a checksum implementation:", success_spec_matrix, fail_spec_matrix
|
data/spec/sjekksum_spec.rb
CHANGED
@@ -3,10 +3,13 @@ require "spec_helper"
|
|
3
3
|
describe Sjekksum do
|
4
4
|
|
5
5
|
spec_values = {
|
6
|
-
input:
|
7
|
-
damm:
|
8
|
-
luhn:
|
9
|
-
|
6
|
+
input: 12345,
|
7
|
+
damm: 9,
|
8
|
+
luhn: 5,
|
9
|
+
upc: 7,
|
10
|
+
verhoeff: 1,
|
11
|
+
primitive: 6,
|
12
|
+
primitive97: 8
|
10
13
|
}
|
11
14
|
|
12
15
|
specify { expect(described_class).to be_a(Module) }
|
@@ -41,6 +44,21 @@ describe Sjekksum do
|
|
41
44
|
expect(described_class.luhn!(spec_values[:input])).to eq(expected)
|
42
45
|
end
|
43
46
|
|
47
|
+
it "#upc" do
|
48
|
+
expected = spec_values[:input] * 10 + spec_values[:upc]
|
49
|
+
expect(described_class.upc(spec_values[:input])).to eq(spec_values[:upc])
|
50
|
+
end
|
51
|
+
|
52
|
+
it "#upc?" do
|
53
|
+
value = spec_values[:input] * 10 + spec_values[:upc]
|
54
|
+
expect(described_class.upc?(value)).to be_true
|
55
|
+
end
|
56
|
+
|
57
|
+
it "#upc!" do
|
58
|
+
expected = spec_values[:input] * 10 + spec_values[:upc]
|
59
|
+
expect(described_class.upc!(spec_values[:input])).to eq(expected)
|
60
|
+
end
|
61
|
+
|
44
62
|
it "#verhoeff" do
|
45
63
|
expected = spec_values[:input] * 10 + spec_values[:verhoeff]
|
46
64
|
expect(described_class.verhoeff(spec_values[:input])).to eq(spec_values[:verhoeff])
|
@@ -56,4 +74,34 @@ describe Sjekksum do
|
|
56
74
|
expect(described_class.verhoeff!(spec_values[:input])).to eq(expected)
|
57
75
|
end
|
58
76
|
|
77
|
+
it "#primitive" do
|
78
|
+
expected = spec_values[:input] * 10 + spec_values[:primitive]
|
79
|
+
expect(described_class.primitive(spec_values[:input])).to eq(spec_values[:primitive])
|
80
|
+
end
|
81
|
+
|
82
|
+
it "#primitive?" do
|
83
|
+
value = spec_values[:input] * 10 + spec_values[:primitive]
|
84
|
+
expect(described_class.primitive?(value)).to be_true
|
85
|
+
end
|
86
|
+
|
87
|
+
it "#primitive!" do
|
88
|
+
expected = spec_values[:input] * 10 + spec_values[:primitive]
|
89
|
+
expect(described_class.primitive!(spec_values[:input])).to eq(expected)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "#primitive97" do
|
93
|
+
expected = spec_values[:input] * 10 + spec_values[:primitive97]
|
94
|
+
expect(described_class.primitive97(spec_values[:input])).to eq(spec_values[:primitive97])
|
95
|
+
end
|
96
|
+
|
97
|
+
it "#primitive97?" do
|
98
|
+
value = spec_values[:input] * 10 + spec_values[:primitive97]
|
99
|
+
expect(described_class.primitive97?(value)).to be_true
|
100
|
+
end
|
101
|
+
|
102
|
+
it "#primitive97!" do
|
103
|
+
expected = spec_values[:input] * 10 + spec_values[:primitive97]
|
104
|
+
expect(described_class.primitive97!(spec_values[:input])).to eq(expected)
|
105
|
+
end
|
106
|
+
|
59
107
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
require "sjekksum"
|
3
3
|
|
4
|
+
module SjekksumRSpecHelpers
|
5
|
+
def transform_spec_value origin_value, check_digit
|
6
|
+
if origin_value.is_a?(String)
|
7
|
+
"#{origin_value}#{check_digit}"
|
8
|
+
else
|
9
|
+
origin_value * 10 + check_digit
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
4
14
|
RSpec.configure do |config|
|
5
15
|
config.expect_with :rspec do |c|
|
6
16
|
c.syntax = :expect
|
@@ -8,4 +18,6 @@ RSpec.configure do |config|
|
|
8
18
|
config.mock_with :rspec do |c|
|
9
19
|
c.syntax = :expect
|
10
20
|
end
|
21
|
+
config.include SjekksumRSpecHelpers
|
22
|
+
config.extend SjekksumRSpecHelpers
|
11
23
|
end
|
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
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christoph Grabo
|
@@ -111,13 +111,19 @@ files:
|
|
111
111
|
- lib/sjekksum.rb
|
112
112
|
- lib/sjekksum/damm.rb
|
113
113
|
- lib/sjekksum/luhn.rb
|
114
|
+
- lib/sjekksum/primitive.rb
|
115
|
+
- lib/sjekksum/primitive97.rb
|
114
116
|
- lib/sjekksum/shared.rb
|
117
|
+
- lib/sjekksum/upc.rb
|
115
118
|
- lib/sjekksum/verhoeff.rb
|
116
119
|
- lib/sjekksum/version.rb
|
117
120
|
- sjekksum.gemspec
|
118
121
|
- spec/shared_implementation.rb
|
119
122
|
- spec/sjekksum/damm_spec.rb
|
120
123
|
- spec/sjekksum/luhn_spec.rb
|
124
|
+
- spec/sjekksum/primitive97_spec.rb
|
125
|
+
- spec/sjekksum/primitive_spec.rb
|
126
|
+
- spec/sjekksum/upc_spec.rb
|
121
127
|
- spec/sjekksum/verhoeff_spec.rb
|
122
128
|
- spec/sjekksum_spec.rb
|
123
129
|
- spec/spec_helper.rb
|
@@ -149,6 +155,9 @@ test_files:
|
|
149
155
|
- spec/shared_implementation.rb
|
150
156
|
- spec/sjekksum/damm_spec.rb
|
151
157
|
- spec/sjekksum/luhn_spec.rb
|
158
|
+
- spec/sjekksum/primitive97_spec.rb
|
159
|
+
- spec/sjekksum/primitive_spec.rb
|
160
|
+
- spec/sjekksum/upc_spec.rb
|
152
161
|
- spec/sjekksum/verhoeff_spec.rb
|
153
162
|
- spec/sjekksum_spec.rb
|
154
163
|
- spec/spec_helper.rb
|