IBAN 0.0.2 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 160b4963be5a276c90d654aa181897d9af2c0fdd
4
- data.tar.gz: 4360a66f06acf0168901eaf1a26f1a50ff51616a
3
+ metadata.gz: 05384522e8cc437be731e5beb0df9d53825c09a7
4
+ data.tar.gz: 47050586e11b101829d9877d62140e4a19f9a905
5
5
  SHA512:
6
- metadata.gz: e92682150285f417e3577508a63d7bdc759ea04fcc5543b0de6c1fd42c3fd3eed1fe3b72a211a370734924748bcdaaac9231f068f7e7f9d2eec81cc1a678bc56
7
- data.tar.gz: f6e5eceeee6f5ecda0ac6c3894c4cdc3b55b7e5d7e90d1fd0fa72ffdbf27a5d1bb58bfc030c799483859d882feee6b1e085aed5ff95ad573767af5ef2b73feff
6
+ metadata.gz: 240a7bcc243999d0a3223eebedc4cf910ffe631d4f58d7547e1ec50f1cf2452800630a188a4cb70debb2bb4e20c2b75e0d47930e36d3d33dacca5f3bea4ea64d
7
+ data.tar.gz: a787d4f8320b2ec7d96730b9c236b4e1fd8b3cabfa79ee29b117f8fb2afe28b67d8286451e49a2890cdc717a406b5d85812ee46c6fa67485f0af23b525f6d35e
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # International Bank Account Number
2
2
 
3
- IBAN validation and formatting
3
+ IBAN information, validation and formatting.
4
+ Ships with an ActiveModel validator.
4
5
 
5
6
  [![Build Status](https://travis-ci.org/max-power/iban.png?branch=master)](https://travis-ci.org/max-power/iban)
6
7
 
@@ -8,7 +9,7 @@ IBAN validation and formatting
8
9
 
9
10
  Add this line to your application's Gemfile:
10
11
 
11
- gem 'iban'
12
+ gem 'IBAN'
12
13
 
13
14
  And then execute:
14
15
 
@@ -16,26 +17,28 @@ And then execute:
16
17
 
17
18
  Or install it yourself as:
18
19
 
19
- $ gem install iban
20
+ $ gem install IBAN
20
21
 
21
22
  ## Usage
22
23
 
23
- iban = IBAN.new('GR16 0110 1250 0000 0001 2300 695')
24
+ iban = IBAN.new("DE89 3704 0044 0532 0130 00")
24
25
 
25
- iban.country_code # GR
26
- iban.check_digits # 16
27
- iban.bban # 01101250000000012300695
26
+ iban.country_code # "DE"
27
+ iban.check_digits # "89"
28
+ iban.bban # "370400440532013000"
29
+ iban.account_number # "0532013000"
30
+ iban.bank_identifier # "37040044"
28
31
 
29
- iban.valid? # true
32
+ iban.valid? # true
30
33
 
31
- iban.to_s # 'GR1601101250000000012300695'
32
- iban.to_s(true) # 'GR16 0110 1250 0000 0001 2300 695'
34
+ iban.to_s # "DE89370400440532013000"
35
+ iban.to_s(true) # "DE89 3704 0044 0532 0130 00"
33
36
 
34
- iban.to_i # 1101250000000012300695162716
37
+ iban.to_i # 370400440532013000131489
35
38
 
36
39
  # or
37
40
 
38
- IBAN.valid? 'GR16 0110 1250 0000 0001 2300 695' # true
41
+ IBAN.valid? "DE89 3704 0044 0532 0130 00" # true
39
42
 
40
43
 
41
44
  ## Contributing
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ["Kevin"]
11
11
  spec.email = ["kevin.melchert@gmail.com"]
12
12
  spec.description = %q{IBAN: International Bank Account Number}
13
- spec.summary = %q{IBAN validation}
14
- spec.homepage = ""
13
+ spec.summary = %q{IBAN information, validation and formatting.}
14
+ spec.homepage = "https://github.com/max-power/iban"
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files`.split($/)
@@ -0,0 +1,5 @@
1
+ class IbanValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ record.errors.add(attribute, :invalid) unless IBAN.valid?(value)
4
+ end
5
+ end
@@ -28,7 +28,7 @@ class IBAN
28
28
  def to_i
29
29
  "#{bban}#{country_code}#{check_digits}".each_byte.map do |byte|
30
30
  case byte
31
- when 48..57 then byte - 48 # 0..9 # or byte.chr
31
+ when 48..57 then byte - 48 # 0..9
32
32
  when 65..90 then byte - 55 # A..Z
33
33
  else raise RuntimeError.new("Unexpected byte '#{byte}' in IBAN code '#{@code}'")
34
34
  end
@@ -52,12 +52,24 @@ class IBAN
52
52
  end
53
53
 
54
54
  def valid_bban?
55
- !!specification && !!(bban =~ Regexp.new("^#{specification['regexp']}$"))
55
+ !!bban_data
56
56
  end
57
-
57
+
58
+ def respond_to?(method_name, include_private=false)
59
+ (bban_data && bban_data.names.include?(method_name.to_s)) || super
60
+ end
61
+
58
62
  private
59
63
 
60
64
  def specification
61
- self.class.specifications[country_code.downcase]
65
+ @specification ||= self.class.specifications[country_code.downcase]
66
+ end
67
+
68
+ def bban_data
69
+ @bban_data ||= Regexp.new("^#{specification['regexp']}$").match(bban) if specification
70
+ end
71
+
72
+ def method_missing(method_name, *args)
73
+ respond_to?(method_name) ? bban_data[method_name] : super
62
74
  end
63
75
  end
@@ -1,332 +1,406 @@
1
- # Source: http://en.wikipedia.org/wiki/International_Bank_Account_Number#IBAN_formats_by_country
2
- al:
1
+ # http://en.wikipedia.org/wiki/International_Bank_Account_Number#IBAN_formats_by_country
2
+ # http://www.swift.com/dsp/resources/documents/IBAN_Registry.pdf
3
+
4
+ al: # Albania
3
5
  length: 28
4
- regexp: '\d{8}[A-Z0-9]{16}'
6
+ # regexp: '\d{8}[A-Z0-9]{16}'
7
+ regexp: '(?<bank_identifier>\d{8})(?<account_number>[A-Z0-9]{16})'
5
8
 
6
- ad:
9
+ ad: # Andorra
7
10
  length: 24
8
- regexp: '\d{8}[A-Z0-9]{12}'
11
+ # regexp: '\d{8}[A-Z0-9]{12}'
12
+ regexp: '(?<bank_identifier>\d{4})(?<branch_identifier>\d{4})(?<account_number>[A-Z0-9]{12})'
9
13
 
10
- at:
14
+ at: # Austria
11
15
  length: 20
12
- regexp: '\d{16}'
16
+ # regexp: '\d{16}'
17
+ regexp: '(?<bank_identifier>\d{5})(?<account_number>\d{11})'
13
18
 
14
- az:
19
+ az: # Azerbaijan
15
20
  length: 28
16
- regexp: '[A-Z0-9]{4}\d{20}'
21
+ # regexp: '[A-Z0-9]{4}\d{20}'
22
+ regexp: '(?<bank_identifier>[A-Z0-9]{4})(?<account_number>\d{20})'
17
23
 
18
- bh:
24
+ bh: # Bahrain
19
25
  length: 22
20
- regexp: '[A-Z]{4}[A-Z0-9]{14}'
26
+ # regexp: '[A-Z]{4}[A-Z0-9]{14}'
27
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>[A-Z0-9]{14})'
21
28
 
22
- be:
29
+ be: # Belgium
23
30
  length: 16
24
- regexp: '\d{12}'
31
+ # regexp: '\d{12}'
32
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>\d{7})(?<national_check_digits>\d{2})'
25
33
 
26
- ba:
34
+ ba: # Bosnia and Herzegovina
27
35
  length: 20
28
- regexp: '\d{16}'
36
+ # regexp: '\d{16}'
37
+ regexp: '(?<bank_identifier>\d{3})(?<branch_identifier>\d{3})(?<account_number>\d{8})(?<national_check_digits>\d{2})'
29
38
 
30
- br:
39
+ br: # Brazil
31
40
  length: 29
32
- regexp: '\d{23}[A-Z][A-Z0-9]'
41
+ # regexp: '\d{23}[A-Z][A-Z0-9]'
42
+ regexp: '(?<bank_identifier>\d{8})(?<branch_identifier>\d{5})(?<account_number>\d{10})(?<account_type>[A-Z])(?<account_owner>[A-Z0-9])'
33
43
 
34
- br:
35
- length: 29
36
- regexp: '\d{23}[A-Z][A-Z0-9]'
37
-
38
- bg:
44
+ bg: # Bulgaria
39
45
  length: 22
40
- regexp: '[A-Z]{4}\d{6}[A-Z0-9]{8}'
46
+ # regexp: '[A-Z]{4}\d{6}[A-Z0-9]{8}'
47
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<branch_identifier>\d{4})(?<account_type>\d{2})(?<account_number>[A-Z0-9]{8})'
41
48
 
42
- cr:
49
+ cr: # Costa Rica
43
50
  length: 21
44
- regexp: '\d{17}'
51
+ # regexp: '\d{17}'
52
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>\d{14})'
45
53
 
46
- hr:
54
+ hr: # Croatia
47
55
  length: 21
48
- regexp: '\d{17}'
56
+ # regexp: '\d{17}'
57
+ regexp: '(?<bank_identifier>\d{7})(?<account_number>\d{10})'
49
58
 
50
- cy:
59
+ cy: # Cyprus
51
60
  length: 28
52
- regexp: '\d{8}[A-Z0-9]{16}'
61
+ # regexp: '\d{8}[A-Z0-9]{16}'
62
+ regexp: '(?<bank_identifier>\d{3})(?<branch_identifier>\d{5})(?<account_number>[A-Z0-9]{16})'
53
63
 
54
- cz:
64
+ cz: # Czech Republic
55
65
  length: 24
56
- regexp: '\d{20}'
66
+ # regexp: '\d{20}'
67
+ regexp: '(?<bank_identifier>\d{4})(?<account_number>\d{6}\d{10})'
68
+
69
+ de: # Germany
70
+ length: 22
71
+ # regexp: '\d{18}'
72
+ regexp: '(?<bank_identifier>\d{8})(?<account_number>\d{10})'
57
73
 
58
- dk:
74
+ dk: # Denmark
75
+ length: 18
76
+ # regexp: '\d{14}'
77
+ regexp: '(?<bank_identifier>\d{4})(?<account_number>\d{9})(?<national_check_digits>\d{1})'
78
+
79
+ gl: # Greenland (same as Denmark)
80
+ length: 18
81
+ # regexp: '\d{14}'
82
+ regexp: '(?<bank_identifier>\d{4})(?<account_number>\d{9})(?<national_check_digits>\d{1})'
83
+
84
+ fo: # Faroe Islands (same as Denmark)
59
85
  length: 18
60
- regexp: '\d{14}'
86
+ # regexp: '\d{14}'
87
+ regexp: '(?<bank_identifier>\d{4})(?<account_number>\d{9})(?<national_check_digits>\d{1})'
61
88
 
62
- do:
89
+ do: # Dominican Republic
63
90
  length: 28
64
- regexp: '[A-Z]{4}\d{20}'
91
+ # regexp: '[A-Z]{4}\d{20}'
92
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>\d{20})'
65
93
 
66
- ee:
94
+ ee: # Estonia
67
95
  length: 20
68
- regexp: '\d{16}'
96
+ # regexp: '\d{16}'
97
+ regexp: '(?<bank_identifier>\d{2})(?<branch_identifier>\d{2})(?<account_number>\d{11})(?<national_check_digits>\d{1})'
69
98
 
70
- fo:
99
+ fi: # Finland
71
100
  length: 18
72
- regexp: '\d{14}'
101
+ # regexp: '\d{14}'
102
+ regexp: '(?<bank_identifier>\d{6})(?<account_number>\d{7})(?<national_check_digits>\d{1})'
73
103
 
74
- fi:
75
- length: 18
76
- regexp: '\d{14}'
77
-
78
- fr:
104
+ fr: # France
79
105
  length: 27
80
- regexp: '\d{10}[A-Z0-9]{11}\d{2}'
106
+ # regexp: '\d{10}[A-Z0-9]{11}\d{2}'
107
+ regexp: '(?<bank_identifier>\d{5})(?<branch_identifier>\d{5})(?<account_number>[A-Z0-9]{11})(?<national_check_digits>\d{2})'
81
108
 
82
- de:
109
+ ge: # Georgia
83
110
  length: 22
84
- regexp: '\d{18}'
85
-
86
- gi:
111
+ # regexp: '[A-Z]{2}\d{16}'
112
+ regexp: '(?<bank_identifier>[A-Z]{2})(?<account_number>\d{16})'
113
+
114
+ gi: # Gibraltar
87
115
  length: 23
88
- regexp: '[A-Z]{4}[A-Z0-9]{15}'
116
+ # regexp: '[A-Z]{4}[A-Z0-9]{15}'
117
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>[A-Z0-9]{15})'
89
118
 
90
- gr:
119
+ gr: # Greece
91
120
  length: 27
92
- regexp: '\d{7}[A-Z0-9]{16}'
93
-
94
- gl:
95
- length: 18
96
- regexp: '\d{14}'
121
+ # regexp: '\d{7}[A-Z0-9]{16}'
122
+ regexp: '(?<bank_identifier>\d{4})(?<branch_identifier>\d{3})(?<account_number>[A-Z0-9]{16})'
97
123
 
98
- gt:
124
+ gt: # Guatemala
99
125
  length: 28
100
- regexp: '[A-Z0-9]{4}[A-Z0-9]{20}'
126
+ # regexp: '[A-Z0-9]{4}[A-Z0-9]{20}'
127
+ regexp: '(?<bank_identifier>[A-Z0-9]{4})(?<account_number>[A-Z0-9]{20})'
101
128
 
102
- hu:
129
+ hu: # Hungary
103
130
  length: 28
104
- regexp: '\d{24}'
131
+ # regexp: '\d{24}'
132
+ regexp: '(?<bank_identifier>\d{3})(?<branch_identifier>\d{4})(?<account_number>\d{1}\d{15})(?<national_check_digits>\d{1})'
105
133
 
106
- is:
134
+ is: # Iceland
107
135
  length: 26
108
- regexp: '\d{22}'
136
+ # regexp: '\d{22}'
137
+ regexp: '(?<bank_identifier>\d{4})(?<branch_identifier>\d{2})(?<account_number>\d{6}\d{10})'
109
138
 
110
- ie:
139
+ ie: # Ireland
111
140
  length: 22
112
- regexp: '[A-Z0-9]{4}\d{14}'
141
+ # regexp: '[A-Z0-9]{4}\d{14}'
142
+ regexp: '(?<branch_identifier>[A-Z0-9]{4})(?<branch_identifier>\d{6})(?<account_number>\d{8})'
113
143
 
114
- il:
144
+ il: # Israel
115
145
  length: 23
116
- regexp: '\d{19}'
146
+ # regexp: '\d{19}'
147
+ regexp: '(?<bank_identifier>\d{3})(?<branch_identifier>\d{3})(?<account_number>\d{13})'
117
148
 
118
- it:
149
+ it: # Italy
119
150
  length: 27
120
- regexp: '[A-Z]\d{10}[A-Z0-9]{12}'
151
+ # regexp: '[A-Z]\d{10}[A-Z0-9]{12}'
152
+ regexp: '(?<national_check_digits>[A-Z])(?<bank_identifier>\d{5})(?<branch_identifier>\d{5})(?<account_number>[A-Z0-9]{12})'
121
153
 
122
- kz:
154
+ kz: # Kazakhstan
123
155
  length: 20
124
- regexp: '\d{3}[A-Z0-9]{13}'
156
+ # regexp: '\d{3}[A-Z0-9]{13}'
157
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>[A-Z0-9]{13})'
125
158
 
126
- kw:
159
+ kw: # Kuwait
127
160
  length: 30
128
- regexp: '[A-Z]{4}[A-Z0-9]{22}'
161
+ # regexp: '[A-Z]{4}[A-Z0-9]{22}'
162
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>[A-Z0-9]{22})'
129
163
 
130
- lv:
164
+ lv: # Latvia
131
165
  length: 21
132
- regexp: '[A-z]{4}[A-Z0-9]{13}'
166
+ # regexp: '[A-Z]{4}[A-Z0-9]{13}'
167
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>[A-Z0-9]{13})'
133
168
 
134
- lb:
169
+ lb: # Lebanon
135
170
  length: 28
136
- regexp: '\d{4}[A-Z0-9]{20}'
171
+ # regexp: '\d{4}[A-Z0-9]{20}'
172
+ regexp: '(?<bank_identifier>\d{4})(?<account_number>[A-Z0-9]{20})'
137
173
 
138
- li:
174
+ li: # Liechtenstein
139
175
  length: 21
140
- regexp: '\d{5}[A-Z0-9]{12}'
176
+ # regexp: '\d{5}[A-Z0-9]{12}'
177
+ regexp: '(?<bank_identifier>\d{5})(?<account_number>[A-Z0-9]{12})'
141
178
 
142
- lt:
179
+ lt: # Lithuania
143
180
  length: 20
144
- regexp: '\d{16}'
181
+ # regexp: '\d{16}'
182
+ regexp: '(?<bank_identifier>\d{5})(?<account_number>\d{11})'
145
183
 
146
- lu:
184
+ lu: # Luxembourg
147
185
  length: 20
148
- regexp: '\d{3}[A-Z0-9]{13}'
186
+ # regexp: '\d{3}[A-Z0-9]{13}'
187
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>[A-Z0-9]{13})'
149
188
 
150
- mk:
189
+ mk: # Macedonia
151
190
  length: 19
152
- regexp: '\d{3}[A-Z0-9]{10}\d{2}'
191
+ # regexp: '\d{3}[A-Z0-9]{10}\d{2}'
192
+ regexp: '(?<branch_identifier>\d{3})(?<account_number>[A-Z0-9]{10})(?<national_check_digits>\d{2})'
153
193
 
154
- mt:
194
+ mt: # Malta
155
195
  length: 31
156
- regexp: '[A-Z]{4}\d{5}[A-Z0-9]{18}'
196
+ # regexp: '[A-Z]{4}\d{5}[A-Z0-9]{18}'
197
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<branch_identifier>\d{5})(?<account_number>[A-Z0-9]{18})'
157
198
 
158
- mr:
199
+ mr: # Mauritania
159
200
  length: 27
160
- regexp: '\d{23}'
201
+ # regexp: '\d{23}'
202
+ regexp: '(?<bank_identifier>\d{5})(?<branch_identifier>\d{5})(?<account_number>\d{11})(?<national_check_digits>\d{2})'
161
203
 
162
- mu:
204
+ mu: # Mauritius
163
205
  length: 30
164
- regexp: '[A-Z]{4}\d{19}[A-Z]{3}'
206
+ # regexp: '[A-Z]{4}\d{19}[A-Z]{3}'
207
+ regexp: '(?<bank_identifier>[A-Z]{4}\d{2})(?<branch_identifier>\d{2})(?<account_number>\d{12}\d{3}[A-Z]{3})'
165
208
 
166
- mc:
209
+ mc: # Monaco
167
210
  length: 27
168
- regexp: '\d{10}[A-Z0-9]{11}\d{2}'
211
+ # regexp: '\d{10}[A-Z0-9]{11}\d{2}'
212
+ regexp: '(?<bank_identifier>\d{5})(?<branch_identifier>\d{5})(?<account_number>[A-Z0-9]{11})(?<national_check_digits>\d{2})'
169
213
 
170
- md:
214
+ md: # Moldova
171
215
  length: 24
172
- regexp: '[A-Z0-9]{2}\d{18}'
216
+ # regexp: '[A-Z0-9]{2}\d{18}'
217
+ regexp: '(?<bank_identifier>[A-Z0-9]{2})(?<account_number>\d{18})'
173
218
 
174
- me:
219
+ me: # Montenegro
175
220
  length: 22
176
- regexp: '\d{18}'
221
+ # regexp: '\d{18}'
222
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>(\d{13})(\d{2}))'
177
223
 
178
- nl:
224
+ nl: # Netherlands
179
225
  length: 18
180
- regexp: '[A-Z]{4}\d{10}'
226
+ # regexp: '[A-Z]{4}\d{10}'
227
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>\d{10})'
181
228
 
182
- 'no':
229
+ 'no': # Norway
183
230
  length: 15
184
- regexp: '\d{11}'
231
+ # regexp: '\d{11}'
232
+ regexp: '(?<bank_identifier>\d{4})(?<account_number>(\d{6})(\d{1}))'
185
233
 
186
- pk:
234
+ pk: # Pakistan
187
235
  length: 24
188
- regexp: '[A-Z0-9]{4}\d{16}'
236
+ # regexp: '[A-Z0-9]{4}\d{16}'
237
+ regexp: '(?<bank_identifier>[A-Z0-9]{4})(?<account_number>\d{16})'
189
238
 
190
- ps:
239
+ ps: # Palestine
191
240
  length: 29
192
- regexp: '[A-Z0-9]{4}\d{21}'
241
+ # regexp: '[A-Z0-9]{4}\d{21}'
242
+ regexp: '(?<bank_identifier>[A-Z0-9]{4})(?<account_number>\d{21})'
193
243
 
194
- pl:
244
+ pl: # Poland
195
245
  length: 28
196
- regexp: '\d{24}'
246
+ # regexp: '\d{24}'
247
+ regexp: '(?<bank_identifier>\d{8})(?<account_number>\d{16})'
197
248
 
198
- pt:
249
+ pt: # Portugal
199
250
  length: 25
200
- regexp: '\d{21}'
251
+ # regexp: '\d{21}'
252
+ regexp: '(?<bank_identifier>\d{4})(?<branch_identifier>\d{4})(?<account_number>\d{11})(?<national_check_digits>\d{2})'
201
253
 
202
- ro:
254
+ ro: # Romania
203
255
  length: 24
204
- regexp: '[A-Z]{4}[A-Z0-9]{16}'
256
+ # regexp: '[A-Z]{4}[A-Z0-9]{16}'
257
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<account_number>[A-Z0-9]{16})'
205
258
 
206
- sm:
259
+ sm: # San Marino
207
260
  length: 27
208
- regexp: '[A-Z]\d{10}[A-Z0-9]{12}'
261
+ # regexp: '[A-Z]\d{10}[A-Z0-9]{12}'
262
+ regexp: '(?<national_check_digits>[A-Z])(?<bank_identifier>\d{5})(?<branch_identifier>\d{5})(?<account_number>[A-Z0-9]{12})'
209
263
 
210
- sa:
264
+ sa: # Saudi Arabia
211
265
  length: 24
212
- regexp: '\d{2}[A-Z0-9]{18}'
266
+ # regexp: '\d{2}[A-Z0-9]{18}'
267
+ regexp: '(?<bank_identifier>\d{2})(?<account_number>[A-Z0-9]{18})'
213
268
 
214
- rs:
269
+ rs: # Serbia
215
270
  length: 22
216
- regexp: '\d{18}'
271
+ # regexp: '\d{18}'
272
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>\d{13})(?<national_check_digits>\d{2})'
217
273
 
218
- sk:
274
+ sk: # Slovak Republic
219
275
  length: 24
220
- regexp: '\d{20}'
276
+ # regexp: '\d{20}'
277
+ regexp: '(?<bank_identifier>\d{4})(?<branch_identifier>\d{6})(?<account_number>\d{10})'
221
278
 
222
- si:
279
+ si: # Slovenia
223
280
  length: 19
224
- regexp: '\d{15}'
281
+ # regexp: '\d{15}'
282
+ regexp: '(?<bank_identifier>\d{5})(?<account_number>\d{8})(?<national_check_digits>\d{2})'
225
283
 
226
- es:
284
+ es: # Spain
227
285
  length: 24
228
- regexp: '\d{20}'
286
+ # regexp: '\d{20}'
287
+ regexp: '(?<bank_identifier>\d{4})(?<branch_identifier>\d{4})(?<national_check_digits>\d{1}\d{1})(?<account_number>\d{10})'
229
288
 
230
- se:
289
+ se: # Sweden
231
290
  length: 24
232
- regexp: '\d{20}'
291
+ # regexp: '\d{20}'
292
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>\d{16}\d{1})'
233
293
 
234
- ch:
294
+ ch: # Switzerland
235
295
  length: 21
236
- regexp: '\d{5}[A-Z0-9]{12}'
296
+ # regexp: '\d{5}[A-Z0-9]{12}'
297
+ regexp: '(?<bank_identifier>\d{5})(?<account_number>[A-Z0-9]{12})'
237
298
 
238
- tn:
299
+ tn: # Tunisia
239
300
  length: 24
240
- regexp: '\d{20}'
301
+ # regexp: '\d{20}'
302
+ regexp: '(?<bank_identifier>\d{2})(?<branch_identifier>\d{3})(?<account_number>\d{13}\d{2})'
241
303
 
242
- tr:
304
+ tr: # Turkey
243
305
  length: 26
244
- regexp: '\d{5}[A-Z0-9]{17}'
306
+ # regexp: '\d{5}[A-Z0-9]{17}'
307
+ regexp: '(?<bank_identifier>\d{5})([A-Z0-9])(?<account_number>[A-Z0-9]{16})'
245
308
 
246
- ae:
309
+ ae: # United Arab Emirates
247
310
  length: 23
248
- regexp: '\d{3}\d{16}'
311
+ # regexp: '\d{3}\d{16}'
312
+ regexp: '(?<bank_identifier>\d{3})(?<account_number>\d{16})'
249
313
 
250
- gb:
314
+ gb: # United Kingdom
251
315
  length: 22
252
- regexp: '[A-Z]{4}\d{14}'
316
+ # regexp: '[A-Z]{4}\d{14}'
317
+ regexp: '(?<bank_identifier>[A-Z]{4})(?<branch_identifier>\d{6})(?<account_number>\d{8})'
253
318
 
254
- vg:
319
+ vg: # Virgin Islands, British
255
320
  length: 24
256
- regexp: '[A-Z0-9]{4}\d{16}'
321
+ # regexp: '[A-Z0-9]{4}\d{16}'
322
+ regexp: '(?<bank_identifier>[A-Z0-9]{4})(?<account_number>\d{16})'
257
323
 
258
324
  # In addition to the above list, Nordea has catalogued IBANs for countries listed below.[32]
259
325
 
260
- ao:
326
+ ao: # Angola
261
327
  length: 25
328
+ # regexp: '\d{21}'
262
329
  regexp: '\d{21}'
263
330
 
264
- bj:
331
+ bj: # Benin
265
332
  length: 28
333
+ # regexp: '[A-Z]\d{23}'
266
334
  regexp: '[A-Z]\d{23}'
267
335
 
268
- bf:
336
+ bf: # Burkina Faso
269
337
  length: 27
338
+ # regexp: '\d{23}'
270
339
  regexp: '\d{23}'
271
340
 
272
- bi:
341
+ bi: # Burundi
273
342
  length: 16
343
+ # regexp: '\d{12}'
274
344
  regexp: '\d{12}'
275
345
 
276
- cm:
346
+ cm: # Cameroon
277
347
  length: 27
348
+ # regexp: '\d{23}'
278
349
  regexp: '\d{23}'
279
350
 
280
- cv:
351
+ cv: # Cape Verde
281
352
  length: 25
353
+ # regexp: '\d{21}'
282
354
  regexp: '\d{21}'
283
355
 
284
- ir:
356
+ ir: # Iran
285
357
  length: 26
358
+ # regexp: '\d{22}'
286
359
  regexp: '\d{22}'
287
360
 
288
- ci:
361
+ ci: # Ivory Coast
289
362
  length: 28
363
+ # regexp: '[A-Z]\d{23}'
290
364
  regexp: '[A-Z]\d{23}'
291
365
 
292
- mg:
366
+ mg: # Madagascar
293
367
  length: 27
368
+ # regexp: '\d{23}'
294
369
  regexp: '\d{23}'
295
370
 
296
- ml:
371
+ ml: # Mali
297
372
  length: 28
373
+ # regexp: '[A-Z]\d{23}'
298
374
  regexp: '[A-Z]\d{23}'
299
375
 
300
- mz:
376
+ mz: # Mozambique
301
377
  length: 25
378
+ # regexp: '\d{21}'
302
379
  regexp: '\d{21}'
303
380
 
304
- sn:
381
+ sn: # Senegal
305
382
  length: 28
383
+ # regexp: '[A-Z]\d{23}'
306
384
  regexp: '[A-Z]\d{23}'
307
385
 
308
386
  # not quite sure about these:
309
387
 
310
388
  # cg: # Republic Congo
311
389
  # length: 27
312
- # regexp: ''
390
+ # # regexp: ''
313
391
  #
314
392
  # dz: # Algeria
315
393
  # length: 24
316
- # regexp: ''
394
+ # # regexp: ''
317
395
  #
318
396
  # eg: # Egypt
319
397
  # length: 27
320
- # regexp: ''
398
+ # # regexp: ''
321
399
  #
322
400
  # ga: # Gabun
323
401
  # length: 27
324
- # regexp: ''
325
- #
326
- # ge: # Georgia
327
- # length: 22
328
- # regexp: ''
402
+ # # regexp: ''
329
403
  #
330
404
  # ua: # Ukraine
331
405
  # length: 29
332
- # regexp: ''
406
+ ## regexp: ''
@@ -1,3 +1,3 @@
1
1
  class IBAN
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -54,7 +54,7 @@ describe IBAN do
54
54
  "FO1464600009692713",
55
55
  "FI2112345600000785",
56
56
  "FR1420041010050500013M02606",
57
- #"GE29NB0000000101904917",
57
+ "GE29NB0000000101904917",
58
58
  "DE89370400440532013000",
59
59
  "GI75NWBK000000007099453",
60
60
  "GR1601101250000000012300695",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: IBAN
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,12 +66,13 @@ files:
66
66
  - README.md
67
67
  - Rakefile
68
68
  - iban.gemspec
69
+ - lib/active_model/iban_validator.rb
69
70
  - lib/iban.rb
70
71
  - lib/iban/specs.yml
71
72
  - lib/iban/version.rb
72
73
  - spec/iban_spec.rb
73
74
  - spec/spec_helper.rb
74
- homepage: ''
75
+ homepage: https://github.com/max-power/iban
75
76
  licenses:
76
77
  - MIT
77
78
  metadata: {}
@@ -94,7 +95,7 @@ rubyforge_project:
94
95
  rubygems_version: 2.0.3
95
96
  signing_key:
96
97
  specification_version: 4
97
- summary: IBAN validation
98
+ summary: IBAN information, validation and formatting.
98
99
  test_files:
99
100
  - spec/iban_spec.rb
100
101
  - spec/spec_helper.rb