dkd-ibanizator 0.9.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 +7 -0
- data/README.md +88 -0
- data/db/blz.txt +17311 -0
- data/lib/errors/bank_not_found_error.rb +2 -0
- data/lib/errors/invalid_bank_code_error.rb +2 -0
- data/lib/ibanizator/bank.rb +17 -0
- data/lib/ibanizator/bank_db.rb +48 -0
- data/lib/ibanizator/iban/country_codes.rb +71 -0
- data/lib/ibanizator/iban/extended_data/de.rb +31 -0
- data/lib/ibanizator/iban/extended_data.rb +9 -0
- data/lib/ibanizator/iban/invalid.rb +5 -0
- data/lib/ibanizator/iban/validator.rb +36 -0
- data/lib/ibanizator/iban.rb +45 -0
- data/lib/ibanizator.rb +43 -0
- data/lib/swift_bic/bank_db.rb +20 -0
- data/license.md +21 -0
- metadata +214 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'equalizer'
|
|
2
|
+
require 'adamantium'
|
|
3
|
+
|
|
4
|
+
class Ibanizator
|
|
5
|
+
class Bank
|
|
6
|
+
include Equalizer.new(:bic, :name, :bank_code)
|
|
7
|
+
include Adamantium
|
|
8
|
+
|
|
9
|
+
attr_reader :bic, :name, :bank_code
|
|
10
|
+
|
|
11
|
+
def initialize(bic, name, bank_code)
|
|
12
|
+
@bic = bic
|
|
13
|
+
@name = name
|
|
14
|
+
@bank_code = bank_code
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
class Ibanizator
|
|
2
|
+
class BankDb
|
|
3
|
+
class BankNotFoundError < StandardError; end
|
|
4
|
+
|
|
5
|
+
attr_reader :known_banks
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@known_banks = []
|
|
9
|
+
@bic_index = {}
|
|
10
|
+
@bank_code_index = {}
|
|
11
|
+
populate_known_banks!
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def bank_by_bic(a_bic)
|
|
15
|
+
@bic_index.fetch(a_bic.to_s) do
|
|
16
|
+
error! "No such bank for BIC `#{a_bic}` found!"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def bank_by_bank_code(a_bank_code)
|
|
21
|
+
@bank_code_index.fetch(sanitize_bank_code(a_bank_code)) do
|
|
22
|
+
error! "No bank for bank code `#{a_bank_code}` found!"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def populate_known_banks! # rubocop:disable Metrics/AbcSize
|
|
29
|
+
File.open(File.expand_path('../../../db/blz.txt', __FILE__), 'r').each_line do |line|
|
|
30
|
+
code, _, _, _, _, name, _, bic = line.unpack 'A8A1A58A5A35A27A5A11'
|
|
31
|
+
next if bic.empty?
|
|
32
|
+
name.force_encoding('iso-8859-1').encode!('utf-8')
|
|
33
|
+
bank = Bank.new(bic, name, code)
|
|
34
|
+
@known_banks << bank
|
|
35
|
+
@bic_index[bank.bic] = bank
|
|
36
|
+
@bank_code_index[bank.bank_code] = bank
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def sanitize_bank_code(a_bank_code)
|
|
41
|
+
a_bank_code.to_s.gsub(/\s+/, '')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def error!(message)
|
|
45
|
+
raise BankNotFoundError, message
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
class Ibanizator
|
|
2
|
+
class Iban
|
|
3
|
+
# according to wikipedia (http://en.wikipedia.org/wiki/IBAN)
|
|
4
|
+
COUNTRY_CODES = {
|
|
5
|
+
AL: 28,
|
|
6
|
+
AD: 24,
|
|
7
|
+
AT: 20,
|
|
8
|
+
AZ: 28,
|
|
9
|
+
BH: 22,
|
|
10
|
+
BE: 16,
|
|
11
|
+
BA: 20,
|
|
12
|
+
BR: 29,
|
|
13
|
+
BG: 22,
|
|
14
|
+
CR: 21,
|
|
15
|
+
HR: 21,
|
|
16
|
+
CY: 28,
|
|
17
|
+
CZ: 24,
|
|
18
|
+
DK: 18,
|
|
19
|
+
DO: 28,
|
|
20
|
+
EE: 20,
|
|
21
|
+
FO: 18,
|
|
22
|
+
FI: 18,
|
|
23
|
+
FR: 27,
|
|
24
|
+
GE: 22,
|
|
25
|
+
DE: 22,
|
|
26
|
+
GI: 23,
|
|
27
|
+
GR: 27,
|
|
28
|
+
GL: 18,
|
|
29
|
+
GT: 28,
|
|
30
|
+
HU: 28,
|
|
31
|
+
IS: 26,
|
|
32
|
+
IE: 22,
|
|
33
|
+
IL: 23,
|
|
34
|
+
IT: 27,
|
|
35
|
+
KZ: 20,
|
|
36
|
+
KW: 30,
|
|
37
|
+
LV: 21,
|
|
38
|
+
LB: 28,
|
|
39
|
+
LI: 21,
|
|
40
|
+
LT: 20,
|
|
41
|
+
LU: 20,
|
|
42
|
+
MK: 19,
|
|
43
|
+
MT: 31,
|
|
44
|
+
MR: 27,
|
|
45
|
+
MU: 30,
|
|
46
|
+
MC: 27,
|
|
47
|
+
MD: 24,
|
|
48
|
+
ME: 22,
|
|
49
|
+
NL: 18,
|
|
50
|
+
NO: 15,
|
|
51
|
+
PK: 24,
|
|
52
|
+
PS: 29,
|
|
53
|
+
PL: 28,
|
|
54
|
+
PT: 25,
|
|
55
|
+
RO: 24,
|
|
56
|
+
SM: 27,
|
|
57
|
+
SA: 24,
|
|
58
|
+
RS: 22,
|
|
59
|
+
SK: 24,
|
|
60
|
+
SI: 19,
|
|
61
|
+
ES: 24,
|
|
62
|
+
SE: 24,
|
|
63
|
+
CH: 21,
|
|
64
|
+
TN: 24,
|
|
65
|
+
TR: 26,
|
|
66
|
+
AE: 23,
|
|
67
|
+
GB: 22,
|
|
68
|
+
VG: 24
|
|
69
|
+
}.freeze
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Ibanizator
|
|
2
|
+
class Iban
|
|
3
|
+
module ExtendedData
|
|
4
|
+
class DE
|
|
5
|
+
attr_reader :iban
|
|
6
|
+
include Equalizer.new(:iban)
|
|
7
|
+
include Adamantium
|
|
8
|
+
|
|
9
|
+
def initialize(iban)
|
|
10
|
+
raise Invalid, "Can't compute extended data on invalid IBAN!" unless iban.valid?
|
|
11
|
+
@iban = iban
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def bank_code
|
|
15
|
+
iban.to_s[4..11]
|
|
16
|
+
end
|
|
17
|
+
memoize :bank_code
|
|
18
|
+
|
|
19
|
+
def account_number
|
|
20
|
+
iban.to_s[12..-1].gsub(/\A0+/, '')
|
|
21
|
+
end
|
|
22
|
+
memoize :account_number
|
|
23
|
+
|
|
24
|
+
def bic
|
|
25
|
+
Ibanizator.bank_db.bank_by_bank_code(bank_code).bic
|
|
26
|
+
end
|
|
27
|
+
memoize :bic
|
|
28
|
+
end
|
|
29
|
+
end # ExtendedData
|
|
30
|
+
end # Iban
|
|
31
|
+
end # Ibanizator
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class Ibanizator
|
|
2
|
+
class Iban
|
|
3
|
+
class Validator
|
|
4
|
+
attr_reader :iban
|
|
5
|
+
|
|
6
|
+
def initialize(iban)
|
|
7
|
+
@iban = iban.to_s
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def validate
|
|
11
|
+
valid_length? && valid_checksum?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def valid_length?
|
|
17
|
+
return false if iban.length <= 4 # two digits for the country code and two for the checksum
|
|
18
|
+
country_code = iban[0..1].upcase.to_sym
|
|
19
|
+
iban.length == COUNTRY_CODES[country_code]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def valid_checksum?
|
|
23
|
+
number_representation = integerize(reorder(iban))
|
|
24
|
+
number_representation % 97 == 1
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def reorder(iban)
|
|
28
|
+
"#{iban[4..-1]}#{iban[0..3]}"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def integerize(iban)
|
|
32
|
+
iban.gsub(/[A-Z]/) { |match| match.ord - 'A'.ord + 10 }.to_i
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end # Iban
|
|
36
|
+
end # Ibanizator
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'equalizer'
|
|
2
|
+
require 'adamantium'
|
|
3
|
+
|
|
4
|
+
require_relative 'iban/extended_data'
|
|
5
|
+
require_relative 'iban/country_codes'
|
|
6
|
+
require_relative 'iban/validator'
|
|
7
|
+
|
|
8
|
+
class Ibanizator
|
|
9
|
+
class Iban
|
|
10
|
+
attr_reader :iban_string
|
|
11
|
+
alias_method :to_s, :iban_string
|
|
12
|
+
|
|
13
|
+
include Equalizer.new(:iban_string)
|
|
14
|
+
include Adamantium
|
|
15
|
+
|
|
16
|
+
def initialize(an_iban)
|
|
17
|
+
@iban_string = sanitize(an_iban)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.from_string(a_string)
|
|
21
|
+
new(a_string)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def country_code
|
|
25
|
+
cc = iban_string[0..1].to_sym
|
|
26
|
+
COUNTRY_CODES.keys.include?(cc) ? cc : :unknown
|
|
27
|
+
end
|
|
28
|
+
memoize :country_code
|
|
29
|
+
|
|
30
|
+
def extended_data
|
|
31
|
+
ExtendedData::DE.new(self) if country_code == :DE
|
|
32
|
+
end
|
|
33
|
+
memoize :extended_data
|
|
34
|
+
|
|
35
|
+
def valid?
|
|
36
|
+
Validator.new(self).validate
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def sanitize(input)
|
|
42
|
+
input.to_s.gsub(/\s+/, '').upcase
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/ibanizator.rb
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require_relative 'swift_bic/bank_db'
|
|
2
|
+
require_relative 'ibanizator/bank_db'
|
|
3
|
+
require_relative 'ibanizator/bank'
|
|
4
|
+
require_relative 'ibanizator/iban'
|
|
5
|
+
|
|
6
|
+
class Ibanizator
|
|
7
|
+
def self.bank_db
|
|
8
|
+
@bank_db ||= BankDb.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.iban_from_string(a_string)
|
|
12
|
+
Iban.from_string(a_string)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def calculate_iban(options) # rubocop:disable Metrics/AbcSize
|
|
16
|
+
# Error handling
|
|
17
|
+
# TODO
|
|
18
|
+
|
|
19
|
+
# delete spaces
|
|
20
|
+
options[:account_number] = options[:account_number].to_s.gsub(/\s+/, '')
|
|
21
|
+
options[:bank_code] = options[:bank_code].to_s.gsub(/\s+/, '')
|
|
22
|
+
|
|
23
|
+
# Fill account number to 10 digits
|
|
24
|
+
while options[:account_number].size < 10
|
|
25
|
+
options[:account_number] = options[:account_number].rjust(10, '0')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
country_code_num = character_to_digit options[:country_code].to_s
|
|
29
|
+
checksum = calculate_checksum options[:bank_code], options[:account_number], country_code_num
|
|
30
|
+
|
|
31
|
+
options[:country_code].to_s.upcase + checksum + options[:bank_code] + options[:account_number]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def character_to_digit(char)
|
|
35
|
+
char.upcase.split('').inject('') { |code, c| code + (c.ord - 55).to_s }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def calculate_checksum(bank_code, account_number, country_code_num)
|
|
39
|
+
x = (bank_code + account_number + country_code_num + '00').to_i % 97
|
|
40
|
+
checksum = (98 - x).to_s
|
|
41
|
+
checksum.length == 1 ? checksum.insert(0, '0') : checksum
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require_relative '../errors/invalid_bank_code_error'
|
|
2
|
+
require_relative '../errors/bank_not_found_error'
|
|
3
|
+
|
|
4
|
+
module SwiftBic
|
|
5
|
+
class BankDb
|
|
6
|
+
BANKS = {}.tap do |banks|
|
|
7
|
+
File.open(File.expand_path('../../../db/blz.txt', __FILE__), 'r').each_line do |line|
|
|
8
|
+
code, _, _, _, _, name, _, bic = line.unpack 'A8A1A58A5A35A27A5A11'
|
|
9
|
+
next if bic.empty?
|
|
10
|
+
name.force_encoding('iso-8859-1').encode!('utf-8')
|
|
11
|
+
banks[code] = { name: name, bic: bic }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def validate_bank_code(bank_code)
|
|
16
|
+
return true if bank_code.length == 8
|
|
17
|
+
raise InvalidBankCodeError
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/license.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017 dkd Internet Service GmbH
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
metadata
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: dkd-ibanizator
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.9.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Nicolai Reuschling
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-03-17 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: equalizer
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.0.11
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.0.11
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: adamantium
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.2.0
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.2.0
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 12.0.0
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 12.0.0
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: bundler
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 1.14.6
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 1.14.6
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rspec
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 3.5.0
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 3.5.0
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rubocop
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 0.47.1
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: 0.47.1
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rubocop-rspec
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: 1.13.0
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: 1.13.0
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: guard-rspec
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 4.7.3
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: 4.7.3
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: guard-rubocop
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: 1.2.0
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: 1.2.0
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: terminal-notifier
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: 1.7.1
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: 1.7.1
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: terminal-notifier-guard
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: 1.7.0
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: 1.7.0
|
|
167
|
+
description: " dkd-ibanizator generates the correct IBAN for a given account number
|
|
168
|
+
and bank number for German bank accounts. It is possible to validate given IBAN
|
|
169
|
+
codes. Calculates also the BIC and bank names for given German bank codes. "
|
|
170
|
+
email: nicolai.reuschling@dkd.de
|
|
171
|
+
executables: []
|
|
172
|
+
extensions: []
|
|
173
|
+
extra_rdoc_files: []
|
|
174
|
+
files:
|
|
175
|
+
- README.md
|
|
176
|
+
- db/blz.txt
|
|
177
|
+
- lib/errors/bank_not_found_error.rb
|
|
178
|
+
- lib/errors/invalid_bank_code_error.rb
|
|
179
|
+
- lib/ibanizator.rb
|
|
180
|
+
- lib/ibanizator/bank.rb
|
|
181
|
+
- lib/ibanizator/bank_db.rb
|
|
182
|
+
- lib/ibanizator/iban.rb
|
|
183
|
+
- lib/ibanizator/iban/country_codes.rb
|
|
184
|
+
- lib/ibanizator/iban/extended_data.rb
|
|
185
|
+
- lib/ibanizator/iban/extended_data/de.rb
|
|
186
|
+
- lib/ibanizator/iban/invalid.rb
|
|
187
|
+
- lib/ibanizator/iban/validator.rb
|
|
188
|
+
- lib/swift_bic/bank_db.rb
|
|
189
|
+
- license.md
|
|
190
|
+
homepage: https://github.com/dkd/dkd-ibanizator
|
|
191
|
+
licenses:
|
|
192
|
+
- MIT
|
|
193
|
+
metadata: {}
|
|
194
|
+
post_install_message:
|
|
195
|
+
rdoc_options: []
|
|
196
|
+
require_paths:
|
|
197
|
+
- lib
|
|
198
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
|
+
requirements:
|
|
200
|
+
- - ">="
|
|
201
|
+
- !ruby/object:Gem::Version
|
|
202
|
+
version: '0'
|
|
203
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
|
+
requirements:
|
|
205
|
+
- - ">="
|
|
206
|
+
- !ruby/object:Gem::Version
|
|
207
|
+
version: '0'
|
|
208
|
+
requirements: []
|
|
209
|
+
rubyforge_project:
|
|
210
|
+
rubygems_version: 2.6.10
|
|
211
|
+
signing_key:
|
|
212
|
+
specification_version: 4
|
|
213
|
+
summary: An IBAN generator/validator and BIC generator for German bank accounts.
|
|
214
|
+
test_files: []
|