ibanizator 0.0.1 → 0.1.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.
- data/db/blz.db +0 -0
- data/lib/iban/lengths.rb +69 -0
- data/lib/iban/validator.rb +38 -0
- data/lib/ibanizator.rb +15 -14
- data/lib/swift_bic/bank_db.rb +32 -0
- metadata +23 -3
data/db/blz.db
ADDED
Binary file
|
data/lib/iban/lengths.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
module Iban
|
2
|
+
# according to wikipedia (http://en.wikipedia.org/wiki/IBAN)
|
3
|
+
LENGTHS = {
|
4
|
+
:AL => 28,
|
5
|
+
:AD => 24,
|
6
|
+
:AT => 20,
|
7
|
+
:AZ => 28,
|
8
|
+
:BH => 22,
|
9
|
+
:BE => 16,
|
10
|
+
:BA => 20,
|
11
|
+
:BR => 29,
|
12
|
+
:BG => 22,
|
13
|
+
:CR => 21,
|
14
|
+
:HR => 21,
|
15
|
+
:CY => 28,
|
16
|
+
:CZ => 24,
|
17
|
+
:DK => 18,
|
18
|
+
:DO => 28,
|
19
|
+
:EE => 20,
|
20
|
+
:FO => 18,
|
21
|
+
:FI => 18,
|
22
|
+
:FR => 27,
|
23
|
+
:GE => 22,
|
24
|
+
:DE => 22,
|
25
|
+
:GI => 23,
|
26
|
+
:GR => 27,
|
27
|
+
:GL => 18,
|
28
|
+
:GT => 28,
|
29
|
+
:HU => 28,
|
30
|
+
:IS => 26,
|
31
|
+
:IE => 22,
|
32
|
+
:IL => 23,
|
33
|
+
:IT => 27,
|
34
|
+
:KZ => 20,
|
35
|
+
:KW => 30,
|
36
|
+
:LV => 21,
|
37
|
+
:LB => 28,
|
38
|
+
:LI => 21,
|
39
|
+
:LT => 20,
|
40
|
+
:LU => 20,
|
41
|
+
:MK => 19,
|
42
|
+
:MT => 31,
|
43
|
+
:MR => 27,
|
44
|
+
:MU => 30,
|
45
|
+
:MC => 27,
|
46
|
+
:MD => 24,
|
47
|
+
:ME => 22,
|
48
|
+
:NL => 18,
|
49
|
+
:NO => 15,
|
50
|
+
:PK => 24,
|
51
|
+
:PS => 29,
|
52
|
+
:PL => 28,
|
53
|
+
:PT => 25,
|
54
|
+
:RO => 24,
|
55
|
+
:SM => 27,
|
56
|
+
:SA => 24,
|
57
|
+
:RS => 22,
|
58
|
+
:SK => 24,
|
59
|
+
:SI => 19,
|
60
|
+
:ES => 24,
|
61
|
+
:SE => 24,
|
62
|
+
:CH => 21,
|
63
|
+
:TN => 24,
|
64
|
+
:TR => 26,
|
65
|
+
:AE => 23,
|
66
|
+
:GB => 22,
|
67
|
+
:VG => 24
|
68
|
+
}.freeze
|
69
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative 'lengths'
|
2
|
+
|
3
|
+
module Iban
|
4
|
+
class Validator
|
5
|
+
def validate_iban(input)
|
6
|
+
iban = sanitize_input(input)
|
7
|
+
|
8
|
+
valid_length?(iban) && valid_checksum?(iban)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def valid_length?(iban)
|
14
|
+
return false if iban.length <= 4 # two digits for the country code and two for the checksum
|
15
|
+
country_code = iban[0..1].upcase.to_sym
|
16
|
+
iban.length == LENGTHS[country_code]
|
17
|
+
end
|
18
|
+
|
19
|
+
def sanitize_input(input)
|
20
|
+
input.to_s.chomp.gsub(/\s+/,"")
|
21
|
+
end
|
22
|
+
|
23
|
+
def valid_checksum?(iban)
|
24
|
+
number_representation = integerize(reorder(iban))
|
25
|
+
number_representation % 97 == 1
|
26
|
+
end
|
27
|
+
|
28
|
+
def reorder(iban)
|
29
|
+
"#{iban[4..-1]}#{iban[0..3]}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def integerize(iban)
|
33
|
+
iban.gsub(/[A-Z]/) do |match|
|
34
|
+
match.ord - 'A'.ord + 10
|
35
|
+
end.to_i
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/ibanizator.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require_relative 'iban/validator'
|
2
|
+
require_relative 'swift_bic/bank_db'
|
3
|
+
|
1
4
|
class Ibanizator
|
2
5
|
def calculate_iban options
|
3
6
|
# Error handling
|
@@ -15,21 +18,19 @@ class Ibanizator
|
|
15
18
|
end
|
16
19
|
|
17
20
|
def validate_iban iban
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
# Error handling
|
23
|
-
if country_codes[country_code]
|
24
|
-
raise '' if iban.length != 22
|
25
|
-
else
|
26
|
-
raise ''
|
27
|
-
end
|
21
|
+
# for the sake of compatibility
|
22
|
+
validator = Iban::Validator.new
|
23
|
+
validator.validate_iban(iban)
|
24
|
+
end
|
28
25
|
|
29
|
-
|
30
|
-
|
26
|
+
def bic bank_code
|
27
|
+
bank_db = SwiftBic::BankDb.new bank_code
|
28
|
+
bank_db.bic
|
29
|
+
end
|
31
30
|
|
32
|
-
|
31
|
+
def bank_name bank_code
|
32
|
+
bank_db = SwiftBic::BankDb.new bank_code
|
33
|
+
bank_db.bank_name
|
33
34
|
end
|
34
35
|
|
35
36
|
def character_to_digit char
|
@@ -41,4 +42,4 @@ class Ibanizator
|
|
41
42
|
checksum = (98 - x).to_s
|
42
43
|
checksum.length == 1 ? checksum.insert(0, '0') : checksum
|
43
44
|
end
|
44
|
-
end
|
45
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'sqlite3'
|
2
|
+
|
3
|
+
module SwiftBic
|
4
|
+
class BankDb
|
5
|
+
def initialize bank_number
|
6
|
+
@bank_data = load_table_row bank_number
|
7
|
+
end
|
8
|
+
|
9
|
+
def bank_name
|
10
|
+
@bank_data[1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def bic
|
14
|
+
@bank_data[2]
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def load_table_row bank_number
|
21
|
+
begin
|
22
|
+
db = SQLite3::Database.open("db/blz.db")
|
23
|
+
row = db.execute("SELECT * FROM blz WHERE blz = '#{bank_number}'")
|
24
|
+
rescue SQLite3::Exception => e
|
25
|
+
throw e
|
26
|
+
ensure
|
27
|
+
db.close
|
28
|
+
end
|
29
|
+
row[0]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibanizator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
-
dependencies:
|
12
|
+
date: 2013-05-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sqlite3
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
14
30
|
description: ibanizator generates the correct IBAN for given account number and bank
|
15
31
|
number for german accounts.
|
16
32
|
email: christoph.stettner@softwareinmotion.de
|
@@ -19,6 +35,10 @@ extensions: []
|
|
19
35
|
extra_rdoc_files: []
|
20
36
|
files:
|
21
37
|
- lib/ibanizator.rb
|
38
|
+
- lib/iban/validator.rb
|
39
|
+
- lib/iban/lengths.rb
|
40
|
+
- lib/swift_bic/bank_db.rb
|
41
|
+
- db/blz.db
|
22
42
|
homepage: https://github.com/softwareinmotion/ibanizator
|
23
43
|
licenses: []
|
24
44
|
post_install_message:
|