ibandit 1.4.1 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/data/structures.yml CHANGED
@@ -983,9 +983,12 @@ EG:
983
983
  AU:
984
984
  :bank_code_length: 0
985
985
  :branch_code_length: 6
986
- :account_number_length: 10
986
+ :account_number_length: !ruby/range
987
+ begin: 5
988
+ end: 10
989
+ excl: false
987
990
  :branch_code_format: "\\d{6}"
988
- :account_number_format: "[A-Z0-9]{10}"
991
+ :account_number_format: "[A-Z0-9]{5,10}"
989
992
  :pseudo_iban_bank_code_length: 0
990
993
  :pseudo_iban_branch_code_length: 6
991
994
  :pseudo_iban_account_number_length: 10
@@ -993,7 +996,10 @@ AU:
993
996
  CA:
994
997
  :bank_code_length: 4
995
998
  :branch_code_length: 5
996
- :account_number_length: 12
999
+ :account_number_length: !ruby/range
1000
+ begin: 7
1001
+ end: 12
1002
+ excl: false
997
1003
  :bank_code_format: "\\d{4}"
998
1004
  :branch_code_format: "\\d{5}"
999
1005
  :account_number_format: "\\d{7,12}"
@@ -1015,7 +1021,10 @@ NZ:
1015
1021
  US:
1016
1022
  :bank_code_length: 9
1017
1023
  :branch_code_length: 0
1018
- :account_number_length: 17
1024
+ :account_number_length: !ruby/range
1025
+ begin: 1
1026
+ end: 17
1027
+ excl: false
1019
1028
  :bank_code_format: "\\d{9}"
1020
1029
  :account_number_format: "_*\\d{1,17}"
1021
1030
  :national_id_length: 9
data/ibandit.gemspec CHANGED
@@ -3,10 +3,10 @@
3
3
  require File.expand_path("lib/ibandit/version", __dir__)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
- gem.add_development_dependency "gc_ruboconfig", "~> 2.24.0"
6
+ gem.add_development_dependency "gc_ruboconfig", "~> 2.26.0"
7
7
  gem.add_development_dependency "nokogiri", "~> 1.6"
8
- gem.add_development_dependency "pry", "~> 0.10"
9
- gem.add_development_dependency "pry-nav", "~> 0.2"
8
+ gem.add_development_dependency "pry", "~> 0.13"
9
+ gem.add_development_dependency "pry-byebug", "~> 3.9"
10
10
  gem.add_development_dependency "rspec", "~> 3.3"
11
11
  gem.add_development_dependency "rspec-its", "~> 1.2"
12
12
  gem.add_development_dependency "rspec_junit_formatter", "~> 0.4.1"
data/lib/ibandit/iban.rb CHANGED
@@ -174,9 +174,7 @@ module Ibandit
174
174
 
175
175
  def valid_branch_code_length?
176
176
  return unless valid_country_code?
177
- if swift_branch_code.to_s.length == structure[:branch_code_length]
178
- return true
179
- end
177
+ return true if swift_branch_code.to_s.length == structure[:branch_code_length]
180
178
 
181
179
  if structure[:branch_code_length]&.zero?
182
180
  @errors[:branch_code] = Ibandit.translate(:not_used_in_country,
@@ -199,8 +197,13 @@ module Ibandit
199
197
  return false
200
198
  end
201
199
 
202
- if swift_account_number.length == structure[:account_number_length]
203
- return true
200
+ case structure[:account_number_length]
201
+ when Range
202
+ if structure[:account_number_length].include?(swift_account_number.length)
203
+ return true
204
+ end
205
+ else
206
+ return true if swift_account_number.length == structure[:account_number_length]
204
207
  end
205
208
 
206
209
  @errors[:account_number] =
@@ -68,14 +68,13 @@ module Ibandit
68
68
 
69
69
  def self.clean_au_details(local_details)
70
70
  # Account number may be up to 10 digits long.
71
- # Add leading zeros to account number if < 10 digits.
72
71
  #
73
72
  # Minimum account_number length is 5
74
73
  return {} unless local_details[:account_number].length >= 5
75
74
 
76
75
  {
77
76
  branch_code: local_details[:branch_code].delete("-"),
78
- account_number: local_details[:account_number].rjust(10, "0"),
77
+ account_number: local_details[:account_number],
79
78
  }
80
79
  end
81
80
 
@@ -91,7 +90,7 @@ module Ibandit
91
90
  def self.clean_ca_details(local_details)
92
91
  account_number = local_details[:account_number].tr("-", "")
93
92
 
94
- return {} if account_number.length < 7 # minimum length
93
+ return {} unless (7..12).cover?(account_number.length)
95
94
 
96
95
  bank_code = if local_details[:bank_code].length == 3
97
96
  local_details[:bank_code].rjust(4, "0")
@@ -100,7 +99,7 @@ module Ibandit
100
99
  end
101
100
 
102
101
  {
103
- account_number: account_number.rjust(12, "0"),
102
+ account_number: account_number,
104
103
  bank_code: bank_code,
105
104
  }
106
105
  end
@@ -113,7 +112,7 @@ module Ibandit
113
112
 
114
113
  {
115
114
  bank_code: local_details[:bank_code],
116
- account_number: account_number.rjust(17, "_"),
115
+ account_number: account_number,
117
116
  }
118
117
  end
119
118
 
@@ -330,9 +329,7 @@ module Ibandit
330
329
  def self.clean_hu_details(local_details)
331
330
  # This method supports being passed the component IBAN parts, as defined
332
331
  # by SWIFT, or a single 16 or 24 digit string.
333
- if local_details[:bank_code] || local_details[:branch_code]
334
- return local_details
335
- end
332
+ return local_details if local_details[:bank_code] || local_details[:branch_code]
336
333
 
337
334
  cleaned_acct_number = local_details[:account_number].gsub(/[-\s]/, "")
338
335
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ibandit
4
- VERSION = "1.4.1"
4
+ VERSION = "1.7.0"
5
5
  end
@@ -201,13 +201,13 @@ describe Ibandit::IBAN do
201
201
  its(:country_code) { is_expected.to eq("AU") }
202
202
  its(:bank_code) { is_expected.to be_nil }
203
203
  its(:branch_code) { is_expected.to eq("123456") }
204
- its(:account_number) { is_expected.to eq("0123456789") }
204
+ its(:account_number) { is_expected.to eq("123456789") }
205
205
  its(:swift_bank_code) { is_expected.to be_nil }
206
206
  its(:swift_branch_code) { is_expected.to eq("123456") }
207
- its(:swift_account_number) { is_expected.to eq("0123456789") }
207
+ its(:swift_account_number) { is_expected.to eq("123456789") }
208
208
  its(:swift_national_id) { is_expected.to eq("123456") }
209
209
  its(:iban) { is_expected.to be_nil }
210
- its(:pseudo_iban) { is_expected.to eq("AUZZ1234560123456789") }
210
+ its(:pseudo_iban) { is_expected.to eq("AUZZ123456_123456789") }
211
211
  its(:valid?) { is_expected.to eq(true) }
212
212
  its(:to_s) { is_expected.to eq("") }
213
213
  end
@@ -218,13 +218,13 @@ describe Ibandit::IBAN do
218
218
  its(:country_code) { is_expected.to eq("AU") }
219
219
  its(:bank_code) { is_expected.to be_nil }
220
220
  its(:branch_code) { is_expected.to eq("123456") }
221
- its(:account_number) { is_expected.to eq("0000012345") }
221
+ its(:account_number) { is_expected.to eq("12345") }
222
222
  its(:swift_bank_code) { is_expected.to be_nil }
223
223
  its(:swift_branch_code) { is_expected.to eq("123456") }
224
- its(:swift_account_number) { is_expected.to eq("0000012345") }
224
+ its(:swift_account_number) { is_expected.to eq("12345") }
225
225
  its(:swift_national_id) { is_expected.to eq("123456") }
226
226
  its(:iban) { is_expected.to be_nil }
227
- its(:pseudo_iban) { is_expected.to eq("AUZZ1234560000012345") }
227
+ its(:pseudo_iban) { is_expected.to eq("AUZZ123456_____12345") }
228
228
  its(:valid?) { is_expected.to eq(true) }
229
229
  its(:to_s) { is_expected.to eq("") }
230
230
  end
@@ -235,13 +235,13 @@ describe Ibandit::IBAN do
235
235
  its(:country_code) { is_expected.to eq("AU") }
236
236
  its(:bank_code) { is_expected.to be_nil }
237
237
  its(:branch_code) { is_expected.to eq("123456") }
238
- its(:account_number) { is_expected.to eq("0000123456") }
238
+ its(:account_number) { is_expected.to eq("123456") }
239
239
  its(:swift_bank_code) { is_expected.to be_nil }
240
240
  its(:swift_branch_code) { is_expected.to eq("123456") }
241
- its(:swift_account_number) { is_expected.to eq("0000123456") }
241
+ its(:swift_account_number) { is_expected.to eq("123456") }
242
242
  its(:swift_national_id) { is_expected.to eq("123456") }
243
243
  its(:iban) { is_expected.to be_nil }
244
- its(:pseudo_iban) { is_expected.to eq("AUZZ1234560000123456") }
244
+ its(:pseudo_iban) { is_expected.to eq("AUZZ123456____123456") }
245
245
  its(:valid?) { is_expected.to eq(true) }
246
246
  its(:to_s) { is_expected.to eq("") }
247
247
  end
@@ -269,13 +269,13 @@ describe Ibandit::IBAN do
269
269
  its(:country_code) { is_expected.to eq("AU") }
270
270
  its(:bank_code) { is_expected.to be_nil }
271
271
  its(:branch_code) { is_expected.to eq("123456") }
272
- its(:account_number) { is_expected.to eq("0XX1234567") }
272
+ its(:account_number) { is_expected.to eq("XX1234567") }
273
273
  its(:swift_bank_code) { is_expected.to be_nil }
274
274
  its(:swift_branch_code) { is_expected.to eq("123456") }
275
- its(:swift_account_number) { is_expected.to eq("0XX1234567") }
275
+ its(:swift_account_number) { is_expected.to eq("XX1234567") }
276
276
  its(:swift_national_id) { is_expected.to eq("123456") }
277
277
  its(:iban) { is_expected.to be_nil }
278
- its(:pseudo_iban) { is_expected.to eq("AUZZ1234560XX1234567") }
278
+ its(:pseudo_iban) { is_expected.to eq("AUZZ123456_XX1234567") }
279
279
  its(:valid?) { is_expected.to eq(true) }
280
280
  its(:to_s) { is_expected.to eq("") }
281
281
  end
@@ -303,13 +303,13 @@ describe Ibandit::IBAN do
303
303
  its(:country_code) { is_expected.to eq("AU") }
304
304
  its(:bank_code) { is_expected.to be_nil }
305
305
  its(:branch_code) { is_expected.to eq("123456") }
306
- its(:account_number) { is_expected.to eq("0000000000") }
306
+ its(:account_number) { is_expected.to eq("000000") }
307
307
  its(:swift_bank_code) { is_expected.to be_nil }
308
308
  its(:swift_branch_code) { is_expected.to eq("123456") }
309
- its(:swift_account_number) { is_expected.to eq("0000000000") }
309
+ its(:swift_account_number) { is_expected.to eq("000000") }
310
310
  its(:swift_national_id) { is_expected.to eq("123456") }
311
311
  its(:iban) { is_expected.to be_nil }
312
- its(:pseudo_iban) { is_expected.to eq("AUZZ1234560000000000") }
312
+ its(:pseudo_iban) { is_expected.to eq("AUZZ123456____000000") }
313
313
  its(:valid?) { is_expected.to eq(false) }
314
314
  its(:to_s) { is_expected.to eq("") }
315
315
  end
@@ -321,13 +321,13 @@ describe Ibandit::IBAN do
321
321
  its(:country_code) { is_expected.to eq("AU") }
322
322
  its(:bank_code) { is_expected.to be_nil }
323
323
  its(:branch_code) { is_expected.to eq("123456") }
324
- its(:account_number) { is_expected.to eq("0123456789") }
324
+ its(:account_number) { is_expected.to eq("123456789") }
325
325
  its(:swift_bank_code) { is_expected.to be_nil }
326
326
  its(:swift_branch_code) { is_expected.to eq("123456") }
327
- its(:swift_account_number) { is_expected.to eq("0123456789") }
327
+ its(:swift_account_number) { is_expected.to eq("123456789") }
328
328
  its(:swift_national_id) { is_expected.to eq("123456") }
329
329
  its(:iban) { is_expected.to be_nil }
330
- its(:pseudo_iban) { is_expected.to eq("AUZZ1234560123456789") }
330
+ its(:pseudo_iban) { is_expected.to eq("AUZZ123456_123456789") }
331
331
  its(:valid?) { is_expected.to eq(true) }
332
332
  its(:to_s) { is_expected.to eq("") }
333
333
 
@@ -358,7 +358,7 @@ describe Ibandit::IBAN do
358
358
  it "is invalid and has the correct errors" do
359
359
  expect(subject.valid?).to eq(false)
360
360
  expect(subject.errors).
361
- to eq(account_number: "is the wrong length (should be 10 characters)")
361
+ to eq(account_number: "is the wrong length (should be 5..10 characters)")
362
362
  end
363
363
  end
364
364
 
@@ -377,7 +377,7 @@ describe Ibandit::IBAN do
377
377
  it "is invalid and has the correct errors" do
378
378
  expect(subject.valid?).to eq(false)
379
379
  expect(subject.errors).to eq(
380
- account_number: "is the wrong length (should be 10 characters)",
380
+ account_number: "is the wrong length (should be 5..10 characters)",
381
381
  )
382
382
  end
383
383
  end
@@ -418,12 +418,12 @@ describe Ibandit::IBAN do
418
418
  its(:country_code) { is_expected.to eq("CA") }
419
419
  its(:bank_code) { is_expected.to eq("0036") }
420
420
  its(:branch_code) { is_expected.to eq("00063") }
421
- its(:account_number) { is_expected.to eq("000000123456") }
421
+ its(:account_number) { is_expected.to eq("0123456") }
422
422
  its(:swift_bank_code) { is_expected.to eq("0036") }
423
423
  its(:swift_branch_code) { is_expected.to eq("00063") }
424
- its(:swift_account_number) { is_expected.to eq("000000123456") }
424
+ its(:swift_account_number) { is_expected.to eq("0123456") }
425
425
  its(:swift_national_id) { is_expected.to eq("003600063") }
426
- its(:pseudo_iban) { is_expected.to eq("CAZZ003600063000000123456") }
426
+ its(:pseudo_iban) { is_expected.to eq("CAZZ003600063_____0123456") }
427
427
 
428
428
  its(:iban) { is_expected.to be_nil }
429
429
  its(:valid?) { is_expected.to eq(true) }
@@ -437,12 +437,12 @@ describe Ibandit::IBAN do
437
437
  its(:country_code) { is_expected.to eq("CA") }
438
438
  its(:bank_code) { is_expected.to eq("36") }
439
439
  its(:branch_code) { is_expected.to eq("00063") }
440
- its(:account_number) { is_expected.to eq("000000123456") }
440
+ its(:account_number) { is_expected.to eq("0123456") }
441
441
  its(:swift_bank_code) { is_expected.to eq("36") }
442
442
  its(:swift_branch_code) { is_expected.to eq("00063") }
443
- its(:swift_account_number) { is_expected.to eq("000000123456") }
443
+ its(:swift_account_number) { is_expected.to eq("0123456") }
444
444
  its(:swift_national_id) { is_expected.to eq("3600063") }
445
- its(:pseudo_iban) { is_expected.to eq("CAZZ__3600063000000123456") }
445
+ its(:pseudo_iban) { is_expected.to eq("CAZZ__3600063_____0123456") }
446
446
 
447
447
  its(:iban) { is_expected.to be_nil }
448
448
  its(:valid?) { is_expected.to eq(false) }
@@ -456,12 +456,12 @@ describe Ibandit::IBAN do
456
456
  its(:country_code) { is_expected.to eq("CA") }
457
457
  its(:bank_code) { is_expected.to eq("0036") }
458
458
  its(:branch_code) { is_expected.to eq("00063") }
459
- its(:account_number) { is_expected.to eq("000000123456") }
459
+ its(:account_number) { is_expected.to eq("0123456") }
460
460
  its(:swift_bank_code) { is_expected.to eq("0036") }
461
461
  its(:swift_branch_code) { is_expected.to eq("00063") }
462
- its(:swift_account_number) { is_expected.to eq("000000123456") }
462
+ its(:swift_account_number) { is_expected.to eq("0123456") }
463
463
  its(:swift_national_id) { is_expected.to eq("003600063") }
464
- its(:pseudo_iban) { is_expected.to eq("CAZZ003600063000000123456") }
464
+ its(:pseudo_iban) { is_expected.to eq("CAZZ003600063_____0123456") }
465
465
 
466
466
  its(:iban) { is_expected.to be_nil }
467
467
  its(:valid?) { is_expected.to eq(true) }
@@ -501,11 +501,11 @@ describe Ibandit::IBAN do
501
501
  its(:country_code) { is_expected.to eq("CA") }
502
502
  its(:bank_code) { is_expected.to eq("0036") }
503
503
  its(:branch_code) { is_expected.to eq("00063") }
504
- its(:account_number) { is_expected.to eq("000000123456") }
504
+ its(:account_number) { is_expected.to eq("0123456") }
505
505
  its(:swift_bank_code) { is_expected.to eq("0036") }
506
506
  its(:swift_branch_code) { is_expected.to eq("00063") }
507
- its(:swift_account_number) { is_expected.to eq("000000123456") }
508
- its(:pseudo_iban) { is_expected.to eq("CAZZ003600063000000123456") }
507
+ its(:swift_account_number) { is_expected.to eq("0123456") }
508
+ its(:pseudo_iban) { is_expected.to eq("CAZZ003600063_____0123456") }
509
509
 
510
510
  its(:iban) { is_expected.to be_nil }
511
511
  its(:valid?) { is_expected.to be true }
@@ -518,7 +518,7 @@ describe Ibandit::IBAN do
518
518
  it "is invalid and has the correct errors" do
519
519
  expect(subject.valid?).to eq(false)
520
520
  expect(subject.errors).
521
- to eq(account_number: "is the wrong length (should be 12 characters)")
521
+ to eq(account_number: "is the wrong length (should be 7..12 characters)")
522
522
  end
523
523
  end
524
524
 
@@ -709,10 +709,10 @@ describe Ibandit::IBAN do
709
709
 
710
710
  its(:country_code) { is_expected.to eq("US") }
711
711
  its(:bank_code) { is_expected.to eq(bank_code) }
712
- its(:account_number) { is_expected.to eq("__________0123456") }
712
+ its(:account_number) { is_expected.to eq("0123456") }
713
713
  its(:swift_bank_code) { is_expected.to eq(bank_code) }
714
714
  its(:swift_branch_code) { is_expected.to eq(nil) }
715
- its(:swift_account_number) { is_expected.to eq("__________0123456") }
715
+ its(:swift_account_number) { is_expected.to eq("0123456") }
716
716
  its(:swift_national_id) { is_expected.to eq(bank_code) }
717
717
 
718
718
  its(:pseudo_iban) do
@@ -95,7 +95,7 @@ describe Ibandit::LocalDetailsCleaner do
95
95
  let(:branch_code) { "123-456" }
96
96
 
97
97
  its([:country_code]) { is_expected.to eq(country_code) }
98
- its([:account_number]) { is_expected.to eq("0123456789") }
98
+ its([:account_number]) { is_expected.to eq("123456789") }
99
99
  its([:branch_code]) { is_expected.to eq("123456") }
100
100
  end
101
101
 
@@ -103,7 +103,7 @@ describe Ibandit::LocalDetailsCleaner do
103
103
  let(:branch_code) { "123456" }
104
104
 
105
105
  its([:country_code]) { is_expected.to eq(country_code) }
106
- its([:account_number]) { is_expected.to eq("0123456789") }
106
+ its([:account_number]) { is_expected.to eq("123456789") }
107
107
  its([:branch_code]) { is_expected.to eq("123456") }
108
108
  end
109
109
  end
@@ -163,7 +163,7 @@ describe Ibandit::LocalDetailsCleaner do
163
163
  let(:bank_code) { "0036" }
164
164
  let(:branch_code) { "00063" }
165
165
 
166
- its([:account_number]) { is_expected.to eq("000000123456") }
166
+ its([:account_number]) { is_expected.to eq("0123456") }
167
167
  its([:country_code]) { is_expected.to eq(country_code) }
168
168
  its([:bank_code]) { is_expected.to eq("0036") }
169
169
  its([:branch_code]) { is_expected.to eq("00063") }
@@ -171,7 +171,7 @@ describe Ibandit::LocalDetailsCleaner do
171
171
  context "with a hyphen" do
172
172
  let(:account_number) { "0123456-789" }
173
173
 
174
- its([:account_number]) { is_expected.to eq("000123456789") }
174
+ its([:account_number]) { is_expected.to eq("0123456789") }
175
175
  end
176
176
  end
177
177
 
@@ -1311,7 +1311,7 @@ describe Ibandit::LocalDetailsCleaner do
1311
1311
  let(:account_number) { "0123456789" }
1312
1312
 
1313
1313
  its([:bank_code]) { is_expected.to eq(bank_code) }
1314
- its([:account_number]) { is_expected.to eq("_______0123456789") }
1314
+ its([:account_number]) { is_expected.to eq("0123456789") }
1315
1315
  end
1316
1316
  end
1317
1317
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibandit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-03 00:00:00.000000000 Z
11
+ date: 2021-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gc_ruboconfig
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.24.0
19
+ version: 2.26.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.24.0
26
+ version: 2.26.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.10'
47
+ version: '0.13'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.10'
54
+ version: '0.13'
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry-nav
56
+ name: pry-byebug
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.2'
61
+ version: '3.9'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.2'
68
+ version: '3.9'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +146,7 @@ extensions: []
146
146
  extra_rdoc_files: []
147
147
  files:
148
148
  - ".circleci/config.yml"
149
+ - ".github/dependabot.yml"
149
150
  - ".gitignore"
150
151
  - ".rubocop.yml"
151
152
  - ".rubocop_todo.yml"
@@ -225,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
226
  - !ruby/object:Gem::Version
226
227
  version: '0'
227
228
  requirements: []
228
- rubygems_version: 3.2.3
229
+ rubygems_version: 3.2.15
229
230
  signing_key:
230
231
  specification_version: 4
231
232
  summary: Convert national banking details into IBANs, and vice-versa.