IBAN 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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