banktools-se 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/banktools-se/bankgiro/ocr.rb +46 -0
- data/lib/banktools-se/bankgiro.rb +4 -30
- data/lib/banktools-se/version.rb +1 -1
- data/spec/bankgiro_spec.rb +2 -2
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2adb32315551258f25fd25045f10ddba1be9ed38
|
4
|
+
data.tar.gz: 07a40e43257c6cac10625e79332210aa5c6d1c56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59341b4c01549b9ed8bb597886f93f77149126284d2c2e902e0dec17eac56d735d2153e0d9fd173a0cdc38450806bc43d62f92fc2b15a8a80abbcca7ae7e44fe
|
7
|
+
data.tar.gz: 26529338077b1e088fd19e78b60232af82944e59e04b14f733a94b91b5b59c62232877dfd4474c7db316de290e22a1b6793e76fac5bdeaacb342b5038ecfe5e6
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG6070.pdf section 5.2
|
2
|
+
|
3
|
+
module BankTools
|
4
|
+
module SE
|
5
|
+
class Bankgiro
|
6
|
+
class OverlongOCR < StandardError; end
|
7
|
+
class BadChecksum < StandardError; end
|
8
|
+
|
9
|
+
class OCR
|
10
|
+
def self.number_to_ocr(number, opts = {})
|
11
|
+
add_length_digit = opts.fetch(:length_digit, false)
|
12
|
+
pad = opts.fetch(:pad, nil)
|
13
|
+
|
14
|
+
number = number.to_s
|
15
|
+
|
16
|
+
number += pad if pad
|
17
|
+
|
18
|
+
# Adding 2: 1 length digit, 1 check digit.
|
19
|
+
number += ((number.length + 2) % 10).to_s if add_length_digit
|
20
|
+
|
21
|
+
number_with_ocr = number + Utils.luhn_checksum(number).to_s
|
22
|
+
|
23
|
+
length = number_with_ocr.length
|
24
|
+
if length > 25
|
25
|
+
raise OverlongOCR, "Bankgiro OCR must be 2-25 characters (this one would be #{length} characters)"
|
26
|
+
end
|
27
|
+
|
28
|
+
number_with_ocr
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.number_from_ocr(number, opts = {})
|
32
|
+
strip_length_digit = opts.fetch(:length_digit, false)
|
33
|
+
strip_padding = opts.fetch(:pad, "")
|
34
|
+
|
35
|
+
raise BadChecksum unless Utils.valid_luhn?(number)
|
36
|
+
|
37
|
+
digits_to_chop = 1 # Checksum.
|
38
|
+
digits_to_chop += 1 if strip_length_digit
|
39
|
+
digits_to_chop += strip_padding.length
|
40
|
+
|
41
|
+
number[0...-digits_to_chop]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,44 +1,18 @@
|
|
1
1
|
# http://sv.wikipedia.org/wiki/Bankgirot#Bankgironummer
|
2
2
|
|
3
|
+
require "banktools-se/bankgiro/ocr"
|
4
|
+
|
3
5
|
module BankTools
|
4
6
|
module SE
|
5
7
|
class Bankgiro
|
6
|
-
class OverlongOCR < StandardError; end
|
7
|
-
class BadCheckDigit < StandardError; end
|
8
|
-
|
9
8
|
attr_reader :number
|
10
9
|
|
11
|
-
# http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG6070.pdf section 5.2
|
12
10
|
def self.number_to_ocr(number, opts = {})
|
13
|
-
|
14
|
-
pad = opts.fetch(:pad, nil)
|
15
|
-
|
16
|
-
number = number.to_s
|
17
|
-
|
18
|
-
if pad
|
19
|
-
number += pad
|
20
|
-
end
|
21
|
-
|
22
|
-
if add_length_digit
|
23
|
-
# Adding 2: 1 length digit, 1 check digit
|
24
|
-
number += ((number.length + 2) % 10).to_s
|
25
|
-
end
|
26
|
-
|
27
|
-
number_with_ocr = number.to_s + Utils.luhn_checksum(number).to_s
|
28
|
-
raise OverlongOCR, "Bankgiro OCR must be 2-25 characters" if number_with_ocr.length > 25
|
29
|
-
number_with_ocr
|
11
|
+
OCR.number_to_ocr(number, opts)
|
30
12
|
end
|
31
13
|
|
32
14
|
def self.number_from_ocr(number, opts = {})
|
33
|
-
|
34
|
-
strip_padding = opts.fetch(:pad, false)
|
35
|
-
|
36
|
-
raise BadCheckDigit unless Utils.valid_luhn?(number)
|
37
|
-
|
38
|
-
number = number.to_s
|
39
|
-
number.slice!(-2) if strip_length_digit
|
40
|
-
number.slice!(-strip_padding.length.succ..-2) if strip_padding
|
41
|
-
number.chop
|
15
|
+
OCR.number_from_ocr(number, opts)
|
42
16
|
end
|
43
17
|
|
44
18
|
def initialize(number)
|
data/lib/banktools-se/version.rb
CHANGED
data/spec/bankgiro_spec.rb
CHANGED
@@ -116,8 +116,8 @@ describe BankTools::SE::Bankgiro do
|
|
116
116
|
BankTools::SE::Bankgiro.number_from_ocr("1234567890037", length_digit: true, pad: "0").should eq "1234567890"
|
117
117
|
end
|
118
118
|
|
119
|
-
it "raises if
|
120
|
-
expect { BankTools::SE::Bankgiro.number_from_ocr("1231") }.to raise_error(BankTools::SE::Bankgiro::
|
119
|
+
it "raises if checksum is wrong" do
|
120
|
+
expect { BankTools::SE::Bankgiro.number_from_ocr("1231") }.to raise_error(BankTools::SE::Bankgiro::BadChecksum)
|
121
121
|
end
|
122
122
|
end
|
123
123
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: banktools-se
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/banktools-se.rb
|
83
83
|
- lib/banktools-se/account.rb
|
84
84
|
- lib/banktools-se/bankgiro.rb
|
85
|
+
- lib/banktools-se/bankgiro/ocr.rb
|
85
86
|
- lib/banktools-se/errors.rb
|
86
87
|
- lib/banktools-se/plusgiro.rb
|
87
88
|
- lib/banktools-se/utils.rb
|