konto_check_ruby 1.0.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/CHANGELOG.md +26 -0
- data/COPYRIGHT +22 -0
- data/LICENSE +504 -0
- data/README.md +295 -0
- data/bin/konto_check_ruby +202 -0
- data/data/README.md +17 -0
- data/data/blz.lut2f +0 -0
- data/data/iban_regeln.txt +1260 -0
- data/lib/konto_check_ruby/bank_data.rb +421 -0
- data/lib/konto_check_ruby/blz_file.rb +705 -0
- data/lib/konto_check_ruby/check_methods/part1.rb +1634 -0
- data/lib/konto_check_ruby/check_methods/part2.rb +1604 -0
- data/lib/konto_check_ruby/check_methods/part3.rb +1905 -0
- data/lib/konto_check_ruby/check_methods/part4.rb +1738 -0
- data/lib/konto_check_ruby/check_methods/part5.rb +1407 -0
- data/lib/konto_check_ruby/check_methods.rb +147 -0
- data/lib/konto_check_ruby/collation.rb +52 -0
- data/lib/konto_check_ruby/engine.rb +1006 -0
- data/lib/konto_check_ruby/iban_rules.rb +1060 -0
- data/lib/konto_check_ruby/konto_check.rb +1578 -0
- data/lib/konto_check_ruby/lut_file.rb +457 -0
- data/lib/konto_check_ruby/raw.rb +614 -0
- data/lib/konto_check_ruby/retvals.rb +826 -0
- data/lib/konto_check_ruby/search.rb +440 -0
- data/lib/konto_check_ruby/update.rb +176 -0
- data/lib/konto_check_ruby/version.rb +18 -0
- data/lib/konto_check_ruby.rb +42 -0
- metadata +112 -0
|
@@ -0,0 +1,1060 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This file is part of konto_check_ruby, a Ruby port of the C library
|
|
4
|
+
# konto_check, Copyright (C) 2002-2023 Michael Plugge <konto_check@yahoo.com>.
|
|
5
|
+
# Ruby port Copyright (C) 2026 tickettoaster GmbH <https://tickettoaster.de>.
|
|
6
|
+
#
|
|
7
|
+
# konto_check_ruby is free software; you can redistribute it and/or modify it
|
|
8
|
+
# under the terms of the GNU Lesser General Public License as published by
|
|
9
|
+
# the Free Software Foundation; either version 2.1 of the License, or (at
|
|
10
|
+
# your option) any later version. It is distributed WITHOUT ANY WARRANTY; see
|
|
11
|
+
# the file LICENSE for details.
|
|
12
|
+
|
|
13
|
+
require_relative "retvals"
|
|
14
|
+
|
|
15
|
+
module KontoCheckRuby
|
|
16
|
+
# Port of iban_regel_cvt() from konto_check.c: applies the IBAN rules of
|
|
17
|
+
# the Deutsche Bundesbank to a BLZ/account combination. The rules may
|
|
18
|
+
# replace the BLZ and/or the account number, forbid the IBAN calculation
|
|
19
|
+
# or prescribe a BIC.
|
|
20
|
+
#
|
|
21
|
+
# This module is included into Engine and uses its lookup helpers.
|
|
22
|
+
module IbanRules
|
|
23
|
+
# ---------------------------------------------------------------- Regel 5
|
|
24
|
+
# Kontenkreis 9 98000000..99499999 ohne IBAN-Berechnung (Commerzbank)
|
|
25
|
+
IBAN_R5_NO_IBAN_BLZ = [
|
|
26
|
+
10080900, 12080000, 13080000, 14080000, 15080000, 16080000, 17080000, 18080000,
|
|
27
|
+
20080055, 20080057, 21080050, 21280002, 21480003, 21580000, 22180000, 22181400,
|
|
28
|
+
22280000, 24080000, 24180001, 25480021, 25780022, 25980027, 26080024, 26281420,
|
|
29
|
+
26580070, 26880063, 26981062, 28280012, 29280011, 30080055, 30080057, 31080015,
|
|
30
|
+
32080010, 33080030, 34080031, 34280032, 36280071, 36580072, 40080040, 41280043,
|
|
31
|
+
42080082, 42680081, 43080083, 44080055, 44080057, 44580070, 45080060, 46080010,
|
|
32
|
+
47880031, 49080025, 50080055, 50080057, 50080082, 50680002, 50780006, 50880050,
|
|
33
|
+
51380040, 52080080, 53080030, 54080021, 54280023, 54580020, 54680022, 55080065,
|
|
34
|
+
57080070, 58580074, 59080090, 60080055, 60080057, 60380002, 60480008, 61080006,
|
|
35
|
+
61281007, 61480001, 62080012, 62280012, 63080015, 64080014, 64380011, 65080009,
|
|
36
|
+
65180005, 65380003, 66280053, 66680013, 67280051, 69280035, 70080056, 70080057,
|
|
37
|
+
70380006, 71180005, 72180002, 73180011, 73380004, 73480013, 74180009, 74380007,
|
|
38
|
+
75080003, 76080053, 79080052, 79380051, 79580099, 80080000, 81080000, 82080000,
|
|
39
|
+
83080000, 84080000, 85080200, 86080055, 86080057, 87080000
|
|
40
|
+
].freeze
|
|
41
|
+
|
|
42
|
+
# ab Version 1 der Regel 5 freigegeben (im Kontenkreis 98000000..99499999)
|
|
43
|
+
IBAN_R5_NO_IBAN_BLZ_V0 = [50080081, 51080000].freeze
|
|
44
|
+
|
|
45
|
+
# BLZs ohne IBAN-Berechnung, ab Version 1 freigegeben
|
|
46
|
+
IBAN_R5_BLZ_V0 = [
|
|
47
|
+
10045050, 70045050, 10040085, 35040085, 36040085,
|
|
48
|
+
44040085, 50040085, 67040085, 82040085
|
|
49
|
+
].freeze
|
|
50
|
+
|
|
51
|
+
# Spendenkonten der Commerzbank: BLZ => { [k1, k2] => neue Kontonummer }
|
|
52
|
+
IBAN_R5_SPENDEN = {
|
|
53
|
+
10040000 => { [0, 7878] => "0267878700" },
|
|
54
|
+
10080000 => { [0, 1987] => "0928127700", [0, 8888] => "0928126501", [0, 1234567] => "0920192001" },
|
|
55
|
+
12080000 => { [0, 212121] => "4050462200", [0, 7654321] => "0144000700", [0, 12121212] => "4101725100" },
|
|
56
|
+
16080000 => { [0, 123456] => "0012345600", [0, 3030400] => "4205227110" },
|
|
57
|
+
20080000 => { [0, 2222] => "0903927200", [0, 505050] => "0500100600", [0, 666666] => "0900732500" },
|
|
58
|
+
25040066 => { [0, 1919] => "0141919100" },
|
|
59
|
+
26580070 => { [0, 700] => "0710000000" },
|
|
60
|
+
29080010 => { [0, 124124] => "0107502000", [0, 12412400] => "0107502000" },
|
|
61
|
+
30040000 => { [0, 36] => "0261103600", [0, 222] => "0348010002", [0, 999] => "0123799900" },
|
|
62
|
+
30080000 => { [0, 700000] => "0800005000", [0, 70000000] => "0800005000" },
|
|
63
|
+
32040024 => { [0, 47800] => "0155515000" },
|
|
64
|
+
34280032 => { [0, 14111935] => "0645753800" },
|
|
65
|
+
36040039 => { [0, 150] => "0161620000" },
|
|
66
|
+
37040044 => { [0, 1888] => "0212129101", [0, 102030] => "0222344400", [0, 300000] => "0300000700" },
|
|
67
|
+
37080040 => { [0, 100] => "0269100000", [0, 111] => "0215022000", [0, 4004] => "0233533500",
|
|
68
|
+
[0, 4444] => "0233000300", [0, 55555] => "0263602501", [0, 182002] => "0216603302",
|
|
69
|
+
[0, 300000] => "0983307900", [0, 333333] => "0270330000", [0, 414141] => "0041414100",
|
|
70
|
+
[0, 555666] => "0055566600", [0, 909090] => "0269100000", [0, 5555500] => "0263602501" },
|
|
71
|
+
38040007 => { [0, 100] => "0119160000", [0, 240] => "0109024000", [0, 3366] => "0385333000",
|
|
72
|
+
[0, 55555] => "0305555500", [0, 336666] => "0105232300", [0, 414141] => "0108000100",
|
|
73
|
+
[0, 909090] => "0119160000", [0, 1555555] => "0258266600", [0, 43434343] => "0118163500" },
|
|
74
|
+
39040013 => { [0, 556] => "0106555600" },
|
|
75
|
+
39080005 => { [0, 556] => "0204655600", [0, 9800] => "0208457000" },
|
|
76
|
+
43080083 => { [0, 4630] => "0825110100" },
|
|
77
|
+
44040037 => { [1, 11111111] => "0320565500" },
|
|
78
|
+
47840065 => { [0, 50] => "0150103000", [0, 55] => "0150103000", [0, 99] => "0150103000" },
|
|
79
|
+
47880031 => { [0, 50] => "0519899900" },
|
|
80
|
+
50040000 => { [0, 2000] => "0728400300", [0, 101010] => "0311011100" },
|
|
81
|
+
50080000 => { [0, 6060] => "0096736100", [0, 9000] => "0026492100", [0, 42195] => "0900333200",
|
|
82
|
+
[0, 101010] => "0090003500" },
|
|
83
|
+
50640015 => { [0, 777] => "0222222200" },
|
|
84
|
+
51080060 => { [0, 123] => "0012299300" },
|
|
85
|
+
55040022 => { [0, 555] => "0211050000", [0, 343434] => "0217900000" },
|
|
86
|
+
57080070 => { [0, 661] => "0604101200" },
|
|
87
|
+
60040071 => { [0, 502] => "0525950200", [5, 500500] => "0512700600" },
|
|
88
|
+
60080000 => { [0, 502] => "0901581400", [5, 500500] => "0901581400" },
|
|
89
|
+
61080006 => { [0, 9999999] => "0202427500" },
|
|
90
|
+
64140036 => { [0, 8907339] => "0890733900" },
|
|
91
|
+
66280053 => { [0, 121212] => "0625242400" },
|
|
92
|
+
68080030 => { [0, 202] => "0416520200" },
|
|
93
|
+
69240075 => { [0, 444] => "0445520000" },
|
|
94
|
+
70040041 => { [4, 500500] => "0400500500", [0, 94] => "0212808000", [0, 1111111] => "0152140000",
|
|
95
|
+
[0, 7777777] => "0213600000" },
|
|
96
|
+
70080000 => { [0, 94] => "0928553201", [0, 700000] => "0750055500", [0, 900000] => "0319966601",
|
|
97
|
+
[0, 949494] => "0575757500", [0, 1111111] => "0448060000", [0, 7777777] => "0443540000",
|
|
98
|
+
[0, 9000000] => "0319966601", [0, 70000000] => "0750055500" },
|
|
99
|
+
75040062 => { [0, 6008833] => "0600883300" },
|
|
100
|
+
76040061 => { [0, 2500000] => "0482146800" },
|
|
101
|
+
79040047 => { [0, 9696] => "0680210200" },
|
|
102
|
+
79080052 => { [0, 9696] => "0300021700" },
|
|
103
|
+
85080000 => { [0, 400000] => "0459488501" },
|
|
104
|
+
86080000 => { [0, 1212] => "0480375900", [0, 121200] => "0480375900" }
|
|
105
|
+
}.freeze
|
|
106
|
+
|
|
107
|
+
# ------------------------------------------------------------ Regeln 31-35
|
|
108
|
+
# "Tabelle zu Kontokreise exHypo": Kontokreis (erste drei Ziffern der
|
|
109
|
+
# 10-stelligen Kontonummer) => Nachfolge-BLZ
|
|
110
|
+
IBAN_R31_KONTOKREIS = {
|
|
111
|
+
100 => "76020070", 101 => "10020890", 102 => "78320076", 103 => "79320075", 104 => "76320072",
|
|
112
|
+
105 => "79020076", 106 => "79320075", 107 => "79320075", 108 => "77320072", 109 => "79320075",
|
|
113
|
+
110 => "76220073", 111 => "76020070", 112 => "79320075", 113 => "76020070", 114 => "76020070",
|
|
114
|
+
115 => "76520071", 117 => "77120073", 118 => "76020070", 119 => "75320075", 120 => "72120078",
|
|
115
|
+
121 => "76220073", 122 => "76320072", 123 => "76420080", 124 => "76320072", 125 => "79520070",
|
|
116
|
+
126 => "77320072", 127 => "78020070", 128 => "78020070", 129 => "77120073", 130 => "78020070",
|
|
117
|
+
131 => "78020070", 132 => "60020290", 134 => "78020070", 135 => "77020070", 136 => "79520070",
|
|
118
|
+
137 => "79320075", 138 => "61120286", 139 => "66020286", 140 => "79020076", 142 => "64020186",
|
|
119
|
+
143 => "60020290", 144 => "79020076", 145 => "66020286", 146 => "72120078", 147 => "72223182",
|
|
120
|
+
148 => "76520071", 149 => "79020076", 150 => "76020070", 151 => "76320072", 152 => "78320076",
|
|
121
|
+
154 => "70020270", 155 => "76520071", 156 => "76020070", 157 => "10020890", 158 => "70020270",
|
|
122
|
+
159 => "54520194", 160 => "70020270", 161 => "54520194", 162 => "70020270", 163 => "70020270",
|
|
123
|
+
164 => "70020270", 166 => "71120078", 167 => "74320073", 168 => "70320090", 169 => "79020076",
|
|
124
|
+
170 => "70020270", 172 => "70020270", 174 => "70020270", 175 => "72120078", 176 => "74020074",
|
|
125
|
+
177 => "74320073", 178 => "70020270", 181 => "77320072", 182 => "79520070", 183 => "70020270",
|
|
126
|
+
185 => "70020270", 186 => "79020076", 188 => "70020270", 189 => "70020270", 190 => "76020070",
|
|
127
|
+
191 => "77020070", 192 => "70025175", 193 => "85020086", 194 => "76020070", 196 => "72020070",
|
|
128
|
+
198 => "76320072", 199 => "70020270", 201 => "76020070", 202 => "76020070", 203 => "76020070",
|
|
129
|
+
204 => "76020070", 205 => "79520070", 206 => "79520070", 207 => "71120078", 208 => "73120075",
|
|
130
|
+
209 => "18020086", 210 => "10020890", 211 => "60020290", 212 => "51020186", 214 => "75020073",
|
|
131
|
+
215 => "63020086", 216 => "75020073", 217 => "79020076", 218 => "59020090", 219 => "79520070",
|
|
132
|
+
220 => "73322380", 221 => "73120075", 222 => "73421478", 223 => "74320073", 224 => "73322380",
|
|
133
|
+
225 => "74020074", 227 => "75020073", 228 => "71120078", 229 => "80020086", 230 => "72120078",
|
|
134
|
+
231 => "72020070", 232 => "75021174", 233 => "71020072", 234 => "71022182", 235 => "74320073",
|
|
135
|
+
236 => "71022182", 237 => "76020070", 238 => "63020086", 239 => "70020270", 240 => "75320075",
|
|
136
|
+
241 => "76220073", 243 => "72020070", 245 => "72120078", 246 => "74320073", 247 => "60020290",
|
|
137
|
+
248 => "85020086", 249 => "73321177", 250 => "73420071", 251 => "70020270", 252 => "70020270",
|
|
138
|
+
253 => "70020270", 254 => "10020890", 255 => "50820292", 256 => "71022182", 257 => "83020086",
|
|
139
|
+
258 => "79320075", 259 => "71120077", 260 => "10020890", 261 => "70025175", 262 => "72020070",
|
|
140
|
+
264 => "74020074", 267 => "63020086", 268 => "70320090", 269 => "71122183", 270 => "82020086",
|
|
141
|
+
271 => "75020073", 272 => "73420071", 274 => "63020086", 276 => "70020270", 277 => "74320073",
|
|
142
|
+
278 => "71120077", 279 => "10020890", 281 => "71120078", 282 => "70020270", 283 => "72020070",
|
|
143
|
+
284 => "79320075", 286 => "54520194", 287 => "70020270", 288 => "75220070", 291 => "77320072",
|
|
144
|
+
292 => "76020070", 293 => "72020070", 294 => "54520194", 295 => "70020270", 296 => "70020270",
|
|
145
|
+
299 => "72020070", 301 => "85020086", 302 => "54520194", 304 => "70020270", 308 => "70020270",
|
|
146
|
+
309 => "54520194", 310 => "72020070", 312 => "74120071", 313 => "76320072", 314 => "70020270",
|
|
147
|
+
315 => "70020270", 316 => "70020270", 317 => "70020270", 318 => "70020270", 320 => "71022182",
|
|
148
|
+
321 => "75220070", 322 => "79520070", 324 => "70020270", 326 => "85020086", 327 => "72020070",
|
|
149
|
+
328 => "72020070", 329 => "70020270", 330 => "76020070", 331 => "70020270", 333 => "70020270",
|
|
150
|
+
334 => "75020073", 335 => "70020270", 337 => "80020086", 341 => "10020890", 342 => "10020890",
|
|
151
|
+
344 => "70020270", 345 => "77020070", 346 => "76020070", 350 => "79320075", 351 => "79320075",
|
|
152
|
+
352 => "70020270", 353 => "70020270", 354 => "72223182", 355 => "72020070", 356 => "70020270",
|
|
153
|
+
358 => "54220091", 359 => "76220073", 360 => "80020087", 361 => "70020270", 362 => "70020270",
|
|
154
|
+
363 => "70020270", 366 => "72220074", 367 => "70020270", 368 => "10020890", 369 => "76520071",
|
|
155
|
+
370 => "85020086", 371 => "70020270", 373 => "70020270", 374 => "73120075", 375 => "70020270",
|
|
156
|
+
379 => "70020270", 380 => "70020270", 381 => "70020270", 382 => "79520070", 383 => "72020070",
|
|
157
|
+
384 => "72020070", 386 => "70020270", 387 => "70020270", 389 => "70020270", 390 => "67020190",
|
|
158
|
+
391 => "70020270", 392 => "70020270", 393 => "54520194", 394 => "70020270", 396 => "70020270",
|
|
159
|
+
398 => "66020286", 399 => "87020088", 401 => "30220190", 402 => "36020186", 403 => "38020090",
|
|
160
|
+
404 => "30220190", 405 => "68020186", 406 => "48020086", 407 => "37020090", 408 => "68020186",
|
|
161
|
+
409 => "10020890", 410 => "66020286", 411 => "60420186", 412 => "57020086", 422 => "70020270",
|
|
162
|
+
423 => "70020270", 424 => "76020070", 426 => "70025175", 427 => "50320191", 428 => "70020270",
|
|
163
|
+
429 => "85020086", 432 => "70020270", 434 => "60020290", 435 => "76020070", 436 => "76020070",
|
|
164
|
+
437 => "70020270", 438 => "70020270", 439 => "70020270", 440 => "70020270", 441 => "70020270",
|
|
165
|
+
442 => "85020086", 443 => "55020486", 444 => "50520190", 446 => "80020086", 447 => "70020270",
|
|
166
|
+
450 => "30220190", 451 => "44020090", 452 => "70020270", 453 => "70020270", 456 => "10020890",
|
|
167
|
+
457 => "87020086", 458 => "54520194", 459 => "61120286", 460 => "70020270", 461 => "70020270",
|
|
168
|
+
462 => "70020270", 463 => "70020270", 465 => "70020270", 466 => "10020890", 467 => "10020890",
|
|
169
|
+
468 => "70020270", 469 => "60320291", 470 => "65020186", 471 => "84020087", 472 => "76020070",
|
|
170
|
+
473 => "74020074", 476 => "78320076", 477 => "78320076", 478 => "87020088", 480 => "70020270",
|
|
171
|
+
481 => "70020270", 482 => "84020087", 484 => "70020270", 485 => "50320191", 486 => "70020270",
|
|
172
|
+
488 => "67220286", 489 => "10020890", 490 => "10020890", 491 => "16020086", 492 => "10020890",
|
|
173
|
+
494 => "79020076", 495 => "87020088", 497 => "87020087", 499 => "79020076", 502 => "10020890",
|
|
174
|
+
503 => "10020890", 505 => "70020270", 506 => "10020890", 507 => "87020086", 508 => "86020086",
|
|
175
|
+
509 => "83020087", 510 => "80020086", 511 => "83020086", 513 => "85020086", 515 => "17020086",
|
|
176
|
+
518 => "82020086", 519 => "83020086", 522 => "10020890", 523 => "70020270", 524 => "85020086",
|
|
177
|
+
525 => "70020270", 527 => "82020088", 528 => "10020890", 530 => "10020890", 531 => "10020890",
|
|
178
|
+
533 => "50320191", 534 => "70020270", 536 => "85020086", 538 => "82020086", 540 => "65020186",
|
|
179
|
+
541 => "80020087", 545 => "18020086", 546 => "10020890", 547 => "10020890", 548 => "10020890",
|
|
180
|
+
549 => "82020087", 555 => "79020076", 560 => "79320075", 567 => "86020086", 572 => "10020890",
|
|
181
|
+
580 => "70020270", 581 => "70020270", 601 => "74320073", 602 => "70020270", 603 => "70020270",
|
|
182
|
+
604 => "70020270", 605 => "70020270", 606 => "70020270", 607 => "74320073", 608 => "72020070",
|
|
183
|
+
609 => "72020070", 610 => "72020070", 611 => "72020070", 612 => "71120077", 613 => "70020270",
|
|
184
|
+
614 => "72020070", 615 => "70025175", 616 => "73420071", 617 => "68020186", 618 => "73120075",
|
|
185
|
+
619 => "60020290", 620 => "71120077", 621 => "71120077", 622 => "74320073", 623 => "72020070",
|
|
186
|
+
624 => "71020072", 625 => "71023173", 626 => "71020072", 627 => "71021270", 628 => "71120077",
|
|
187
|
+
629 => "73120075", 630 => "71121176", 631 => "71022182", 632 => "70020270", 633 => "74320073",
|
|
188
|
+
634 => "70020270", 635 => "70320090", 636 => "70320090", 637 => "72120078", 638 => "72120078",
|
|
189
|
+
640 => "70020270", 641 => "70020270", 643 => "74320073", 644 => "70020270", 645 => "70020270",
|
|
190
|
+
646 => "70020270", 647 => "70020270", 648 => "72120078", 649 => "72122181", 650 => "54520194",
|
|
191
|
+
652 => "71021270", 653 => "70020270", 654 => "70020270", 655 => "72120078", 656 => "71120078",
|
|
192
|
+
657 => "71020072", 658 => "68020186", 659 => "54520194", 660 => "54620093", 661 => "74320073",
|
|
193
|
+
662 => "73120075", 663 => "70322192", 664 => "72120078", 665 => "70321194", 666 => "73322380",
|
|
194
|
+
667 => "60020290", 668 => "60020290", 669 => "73320073", 670 => "75020073", 671 => "74220075",
|
|
195
|
+
672 => "74020074", 673 => "74020074", 674 => "74120071", 675 => "74020074", 676 => "74020074",
|
|
196
|
+
677 => "72020070", 678 => "72020070", 679 => "54520194", 680 => "71120077", 681 => "67020190",
|
|
197
|
+
682 => "78020070", 683 => "71020072", 684 => "70020270", 685 => "70020270", 686 => "70020270",
|
|
198
|
+
687 => "70020270", 688 => "70020270", 689 => "70020270", 690 => "76520071", 692 => "70020270",
|
|
199
|
+
693 => "73420071", 694 => "70021180", 695 => "70320090", 696 => "74320073", 697 => "54020090",
|
|
200
|
+
698 => "73320073", 710 => "30220190", 711 => "70020270", 712 => "10020890", 714 => "76020070",
|
|
201
|
+
715 => "75020073", 717 => "74320073", 718 => "87020086", 719 => "37020090", 720 => "30220190",
|
|
202
|
+
723 => "77320072", 733 => "83020087", 798 => "70020270",
|
|
203
|
+
}.freeze
|
|
204
|
+
|
|
205
|
+
# --------------------------------------------------------------- Regel 53
|
|
206
|
+
# BLZ => { [k1, k2] => echte Kontonummer }; BLZ neu ist stets 60050101,
|
|
207
|
+
# der BIC stets SOLADEST600
|
|
208
|
+
IBAN_R53_SONDERKONTEN = {
|
|
209
|
+
55050000 => { [0, 901] => "7401507497", [0, 902] => "7401507473", [0, 908] => "7401507480",
|
|
210
|
+
[0, 910] => "7401507466", [0, 3500] => "7401555913", [0, 35000] => "7401555913",
|
|
211
|
+
[0, 35100] => "7401555913", [0, 44000] => "7401555872", [0, 55020100] => "7401555872",
|
|
212
|
+
[1, 10024270] => "7401501266", [1, 10050002] => "7401502234", [1, 10132511] => "7401550530",
|
|
213
|
+
[1, 10149226] => "7401512248", [1, 19345106] => "7401555906" },
|
|
214
|
+
60020030 => { [10, 617900] => "0002009906", [10, 919900] => "7871531505", [10, 2999900] => "0002588991",
|
|
215
|
+
[10, 3340500] => "0002001155", [10, 4184600] => "7871513509", [10, 40748400] => "0001366705",
|
|
216
|
+
[10, 47444300] => "7871538395", [10, 54290000] => "7871521216" },
|
|
217
|
+
60050000 => { [0, 1523] => "0001364934", [0, 2502] => "0001366705", [0, 2535] => "0001119897",
|
|
218
|
+
[0, 2811] => "0001367450", [0, 3002] => "0001367924", [0, 3009] => "0001367924",
|
|
219
|
+
[0, 3080] => "0002009906", [0, 4596] => "0001372809", [0, 5500] => "0001375703",
|
|
220
|
+
[0, 123456] => "0001362826", [0, 250412] => "7402051588", [0, 1029204] => "0002782254" },
|
|
221
|
+
66020020 => { [40, 604100] => "0002810030", [40, 2015800] => "7495530102", [40, 2401000] => "7495500967",
|
|
222
|
+
[40, 3746700] => "7495501485" },
|
|
223
|
+
66050000 => { [0, 85304] => "7402045439", [0, 85990] => "7402051588", [0, 86345] => "7402046641",
|
|
224
|
+
[0, 86567] => "0001364934" },
|
|
225
|
+
86050000 => { [0, 1016] => "7461500128", [0, 2020] => "7461500018", [0, 3535] => "7461505611",
|
|
226
|
+
[0, 4394] => "7461505714" }
|
|
227
|
+
}.freeze
|
|
228
|
+
|
|
229
|
+
# Applies IBAN rule `regel_version` (rule * 100 + version, as stored in
|
|
230
|
+
# the Bundesbank file) to blz (mutable String, 8 digits) and kto (mutable
|
|
231
|
+
# String, 10 digits, zero padded). Both may be modified in place.
|
|
232
|
+
# Returns [ret, bic]: ret is a return code (OK, OK_BLZ_REPLACED,
|
|
233
|
+
# OK_KTO_REPLACED, OK_BLZ_KTO_REPLACED, NO_IBAN_CALCULATION,
|
|
234
|
+
# IBAN_RULE_UNKNOWN, ...), bic a prescribed BIC or nil.
|
|
235
|
+
def iban_regel_cvt(blz, kto, regel_version, retvals = nil)
|
|
236
|
+
return [LUT2_NOT_INITIALIZED, nil] unless @data
|
|
237
|
+
return [INVALID_BLZ, nil] unless blz =~ /\A\d{8}\z/
|
|
238
|
+
return [INVALID_KTO, nil] unless kto =~ /\A\d{1,10}\z/
|
|
239
|
+
|
|
240
|
+
ret = iban_init
|
|
241
|
+
return [ret, nil] if ret < OK
|
|
242
|
+
|
|
243
|
+
regel = regel_version / 100
|
|
244
|
+
version = regel_version % 100
|
|
245
|
+
bic = nil
|
|
246
|
+
ret = OK
|
|
247
|
+
|
|
248
|
+
# Konto und BLZ nach Integer umwandeln
|
|
249
|
+
k1 = kto[0, 2].to_i
|
|
250
|
+
k2 = kto[2, 8].to_i
|
|
251
|
+
b_alt = b = blz.to_i
|
|
252
|
+
|
|
253
|
+
# Löschkennzeichen der BLZ überprüfen, u.U. Nachfolge-BLZ einsetzen
|
|
254
|
+
if lut_aenderung_i(b) == "D"
|
|
255
|
+
b = lut_nachfolge_blz_i(b)
|
|
256
|
+
return [BLZ_MARKED_AS_DELETED, bic] if b == 0
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Makros RETURN_OK und RETURN_OK_KTO_REPLACED (Löschkennzeichen und
|
|
260
|
+
# Nachfolge-BLZ werden für den Rückgabewert beachtet)
|
|
261
|
+
r_ok = -> { [b != b_alt ? OK_BLZ_REPLACED : OK, bic] }
|
|
262
|
+
r_ok_kto = -> { [b != b_alt ? OK_BLZ_KTO_REPLACED : OK_KTO_REPLACED, bic] }
|
|
263
|
+
|
|
264
|
+
case regel
|
|
265
|
+
|
|
266
|
+
# IBAN-Regel 0000.00 Standardregel zur IBAN-Berechnung
|
|
267
|
+
when 0
|
|
268
|
+
return [ret, bic] if ret == OK_UNTERKONTO_ATTACHED
|
|
269
|
+
return r_ok.call
|
|
270
|
+
|
|
271
|
+
# IBAN-Regel 0001.00 Standardregel: keine Berechnung
|
|
272
|
+
when 1
|
|
273
|
+
return [NO_IBAN_CALCULATION, bic]
|
|
274
|
+
|
|
275
|
+
# IBAN-Regel 0002.00 Augsburger Aktienbank
|
|
276
|
+
when 2
|
|
277
|
+
return [NO_IBAN_CALCULATION, bic] if (kto[7] == "8" && kto[8] == "6") || kto[7] == "6"
|
|
278
|
+
return r_ok.call
|
|
279
|
+
|
|
280
|
+
# IBAN-Regel 0003.00 Aareal Bank AG
|
|
281
|
+
when 3
|
|
282
|
+
return [NO_IBAN_CALCULATION, bic] if kto == "6161604670"
|
|
283
|
+
return r_ok.call
|
|
284
|
+
|
|
285
|
+
# IBAN-Regel 0004.00 Landesbank Berlin / Berliner Sparkasse
|
|
286
|
+
when 4
|
|
287
|
+
if k1 == 0
|
|
288
|
+
neu = case k2
|
|
289
|
+
when 135 then "0990021440"
|
|
290
|
+
when 1111 then "6600012020"
|
|
291
|
+
when 1900 then "0920019005"
|
|
292
|
+
when 7878 then "0780008006"
|
|
293
|
+
when 8888 then "0250030942"
|
|
294
|
+
when 9595 then "1653524703"
|
|
295
|
+
when 97097 then "0013044150"
|
|
296
|
+
when 112233 then "0630025819"
|
|
297
|
+
when 336666 then "6604058903"
|
|
298
|
+
when 484848 then "0920018963"
|
|
299
|
+
end
|
|
300
|
+
if neu
|
|
301
|
+
kto.replace(neu)
|
|
302
|
+
return r_ok_kto.call
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
return r_ok.call
|
|
306
|
+
|
|
307
|
+
# IBAN-Regel 0005.03 Commerzbank AG
|
|
308
|
+
when 5
|
|
309
|
+
idx = lut_index(blz)
|
|
310
|
+
return [idx, bic] if idx < 0
|
|
311
|
+
pz_methode = @data.pz[idx]
|
|
312
|
+
|
|
313
|
+
# comdirect bank behält ihren BIC, alle anderen BLZs der Commerzbank
|
|
314
|
+
# bekommen COBADEFFXXX
|
|
315
|
+
bic = "COBADEFFXXX" if blz[3] == "4" && blz[4] != "1"
|
|
316
|
+
|
|
317
|
+
# BLZs ohne Prüfzifferberechnung
|
|
318
|
+
return [OK_NO_CHK, bic] if pz_methode == 9
|
|
319
|
+
|
|
320
|
+
# Kontenkreis ohne IBAN-Berechnung (für etliche BLZs)
|
|
321
|
+
if k1 == 9 && k2 >= 98_000_000 && k2 <= 99_499_999
|
|
322
|
+
return [NO_IBAN_CALCULATION, bic] if IBAN_R5_NO_IBAN_BLZ.include?(b)
|
|
323
|
+
return [NO_IBAN_CALCULATION, bic] if version == 0 && IBAN_R5_NO_IBAN_BLZ_V0.include?(b)
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# BLZs ohne IBAN-Berechnung (etliche ab Version 1 der Regel freigegeben)
|
|
327
|
+
return [NO_IBAN_CALCULATION, bic] if b == 50040033
|
|
328
|
+
return [NO_IBAN_CALCULATION, bic] if version == 0 && IBAN_R5_BLZ_V0.include?(b)
|
|
329
|
+
|
|
330
|
+
# Spendenkonten
|
|
331
|
+
if (tab = IBAN_R5_SPENDEN[b]) && (neu = tab[[k1, k2]])
|
|
332
|
+
kto.replace(neu)
|
|
333
|
+
return r_ok_kto.call
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# Prüfziffermethode 13: fehlendes Unterkonto "00" ergänzen, falls die
|
|
337
|
+
# Kontonummer nur 6- oder 7-stellig ist
|
|
338
|
+
if pz_methode == 13 && kto[0] == "0" && kto[1] == "0" && kto[2] == "0" &&
|
|
339
|
+
(kto[3] != "0" || kto[4] != "0")
|
|
340
|
+
kto.replace(kto[0] + kto[3, 7] + "00")
|
|
341
|
+
return [kto_check_pz("13a", kto, nil) > 0 ? OK_UNTERKONTO_ATTACHED : FALSE_UNTERKONTO_ATTACHED, bic]
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# Ausnahme in Prüfziffermethode 76 (Prüfziffer auf Stelle 10)
|
|
345
|
+
if pz_methode == 76
|
|
346
|
+
ret = kto_check_pz("76a", kto, nil)
|
|
347
|
+
if ret < OK && kto[0] == "0" && kto[1] == "0" && kto_check_pz("76b", kto, nil) > 0
|
|
348
|
+
kto.replace(kto[2, 8] + "00")
|
|
349
|
+
return [OK_UNTERKONTO_ATTACHED, bic]
|
|
350
|
+
end
|
|
351
|
+
return [ret, bic]
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
return r_ok.call
|
|
355
|
+
|
|
356
|
+
# IBAN-Regel 0006.00 Stadtsparkasse München
|
|
357
|
+
when 6
|
|
358
|
+
if k1 == 0
|
|
359
|
+
neu = case k2
|
|
360
|
+
when 1111111 then "0020228888"
|
|
361
|
+
when 7777777 then "0903286003"
|
|
362
|
+
when 34343434 then "1000506517"
|
|
363
|
+
when 70000 then "0018180018"
|
|
364
|
+
end
|
|
365
|
+
if neu
|
|
366
|
+
kto.replace(neu)
|
|
367
|
+
return r_ok_kto.call
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
return r_ok.call
|
|
371
|
+
|
|
372
|
+
# IBAN-Regel 0007.00 Sparkasse Köln-Bonn
|
|
373
|
+
when 7
|
|
374
|
+
if k1 == 2
|
|
375
|
+
if k2 == 820082
|
|
376
|
+
kto.replace("1901783868")
|
|
377
|
+
return r_ok_kto.call
|
|
378
|
+
end
|
|
379
|
+
if k2 == 22220022
|
|
380
|
+
kto.replace("0002222222")
|
|
381
|
+
return r_ok_kto.call
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
if k1 == 0
|
|
385
|
+
neu = case k2
|
|
386
|
+
when 111 then "0000001115"
|
|
387
|
+
when 221 then "0023002157"
|
|
388
|
+
when 1888 then "0018882068"
|
|
389
|
+
when 2006 then "1900668508"
|
|
390
|
+
when 2626 then "1900730100"
|
|
391
|
+
when 3004 then "1900637016"
|
|
392
|
+
when 3636 then "0023002447"
|
|
393
|
+
when 4000 then "0000004028"
|
|
394
|
+
when 4444 then "0000017368"
|
|
395
|
+
when 5050 then "0000073999"
|
|
396
|
+
when 8888 then "1901335750"
|
|
397
|
+
when 30000 then "0009992959"
|
|
398
|
+
when 43430 then "1901693331"
|
|
399
|
+
when 46664 then "1900399856"
|
|
400
|
+
when 55555 then "0034407379"
|
|
401
|
+
when 102030 then "1900480466"
|
|
402
|
+
when 151515 then "0057762957"
|
|
403
|
+
when 222222 then "0002222222"
|
|
404
|
+
when 300000 then "0009992959"
|
|
405
|
+
when 333333 then "0000033217"
|
|
406
|
+
when 414141 then "0000092817"
|
|
407
|
+
when 606060 then "0000091025"
|
|
408
|
+
when 909090 then "0000090944"
|
|
409
|
+
when 2602024 then "0005602024"
|
|
410
|
+
when 3000000 then "0009992959"
|
|
411
|
+
when 7777777 then "0002222222"
|
|
412
|
+
when 8090100 then "0000038901"
|
|
413
|
+
when 14141414 then "0043597665"
|
|
414
|
+
when 15000023 then "0015002223"
|
|
415
|
+
when 15151515 then "0057762957"
|
|
416
|
+
when 22222222 then "0002222222"
|
|
417
|
+
end
|
|
418
|
+
if neu
|
|
419
|
+
kto.replace(neu)
|
|
420
|
+
return r_ok_kto.call
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
return r_ok.call
|
|
424
|
+
|
|
425
|
+
# IBAN-Regel 0008.00 BHF-Bank AG
|
|
426
|
+
when 8
|
|
427
|
+
return [OK, bic] if b == 50020200
|
|
428
|
+
blz.replace("50020200")
|
|
429
|
+
bic = "BHFBDEFF500"
|
|
430
|
+
return [OK_BLZ_REPLACED, bic]
|
|
431
|
+
|
|
432
|
+
# IBAN-Regel 0009.00 Sparkasse Schopfheim-Zell
|
|
433
|
+
when 9
|
|
434
|
+
return [OK, bic] if b == 68351557
|
|
435
|
+
blz.replace("68351557")
|
|
436
|
+
bic = "SOLADES1SFH"
|
|
437
|
+
# Konten der ehemaligen Sparkasse Zell im Wiesental, die mit 1116
|
|
438
|
+
# beginnen: die ersten vier Stellen werden durch 3047 ersetzt
|
|
439
|
+
if b == 68351976 && kto[0, 4] == "1116"
|
|
440
|
+
kto[0, 4] = "3047"
|
|
441
|
+
return [OK_BLZ_KTO_REPLACED, bic]
|
|
442
|
+
end
|
|
443
|
+
return [OK_BLZ_REPLACED, bic]
|
|
444
|
+
|
|
445
|
+
# IBAN-Regel 0010.01 Frankfurter Sparkasse
|
|
446
|
+
when 10
|
|
447
|
+
if b == 50050222
|
|
448
|
+
blz.replace("50050201")
|
|
449
|
+
ret = OK_BLZ_REPLACED
|
|
450
|
+
b = 50050201
|
|
451
|
+
else
|
|
452
|
+
ret = OK
|
|
453
|
+
end
|
|
454
|
+
if b == 50050201 && k1 == 0
|
|
455
|
+
if k2 == 2000
|
|
456
|
+
kto.replace("0000222000")
|
|
457
|
+
return ret == OK_BLZ_REPLACED ? [OK_BLZ_KTO_REPLACED, bic] : r_ok_kto.call
|
|
458
|
+
end
|
|
459
|
+
if k2 == 800000
|
|
460
|
+
kto.replace("0000180802")
|
|
461
|
+
return ret == OK_BLZ_REPLACED ? [OK_BLZ_KTO_REPLACED, bic] : r_ok_kto.call
|
|
462
|
+
end
|
|
463
|
+
end
|
|
464
|
+
return [ret, bic]
|
|
465
|
+
|
|
466
|
+
# IBAN-Regel 0011.00 Sparkasse Krefeld
|
|
467
|
+
when 11
|
|
468
|
+
if k1 == 0
|
|
469
|
+
case k2
|
|
470
|
+
when 1000
|
|
471
|
+
kto.replace("0008010001")
|
|
472
|
+
return r_ok_kto.call
|
|
473
|
+
when 47800
|
|
474
|
+
kto.replace("0000047803")
|
|
475
|
+
return r_ok_kto.call
|
|
476
|
+
end
|
|
477
|
+
end
|
|
478
|
+
return r_ok.call
|
|
479
|
+
|
|
480
|
+
# IBAN-Regel 0012.01 Landesbank Hessen-Thüringen
|
|
481
|
+
when 12
|
|
482
|
+
return [OK, bic] if b == 50050000
|
|
483
|
+
blz.replace("50050000")
|
|
484
|
+
bic = "HELADEFFXXX"
|
|
485
|
+
return [OK_BLZ_REPLACED, bic]
|
|
486
|
+
|
|
487
|
+
# IBAN-Regel 0013.01 Landesbank Hessen-Thüringen
|
|
488
|
+
when 13
|
|
489
|
+
return [OK, bic] if b == 30050000
|
|
490
|
+
blz.replace("30050000")
|
|
491
|
+
bic = "WELADEDDXXX"
|
|
492
|
+
return [OK_BLZ_REPLACED, bic]
|
|
493
|
+
|
|
494
|
+
# IBAN-Regel 0014.00 Deutsche Apotheker- u. Ärztebank
|
|
495
|
+
when 14
|
|
496
|
+
return [OK, bic] if b == 30060601
|
|
497
|
+
blz.replace("30060601")
|
|
498
|
+
bic = "DAAEDEDDXXX"
|
|
499
|
+
return [OK_BLZ_REPLACED, bic]
|
|
500
|
+
|
|
501
|
+
# IBAN-Regel 0015.01 Pax-Bank eG
|
|
502
|
+
when 15
|
|
503
|
+
if k1 == 4 && k2 == 569017
|
|
504
|
+
kto.replace("4000569017")
|
|
505
|
+
return r_ok_kto.call
|
|
506
|
+
end
|
|
507
|
+
if k1 == 0
|
|
508
|
+
neu = case k2
|
|
509
|
+
when 94 then "3008888018"
|
|
510
|
+
when 556 then "0000101010"
|
|
511
|
+
when 888 then "0031870011"
|
|
512
|
+
when 4040 then "4003600101"
|
|
513
|
+
when 5826 then "1015826017"
|
|
514
|
+
when 25000 then "0025000110"
|
|
515
|
+
when 393393 then "0033013019"
|
|
516
|
+
when 444555 then "0032230016"
|
|
517
|
+
when 603060 then "6002919018"
|
|
518
|
+
when 2120041 then "0002130041"
|
|
519
|
+
when 80868086 then "4007375013"
|
|
520
|
+
end
|
|
521
|
+
if neu
|
|
522
|
+
kto.replace(neu)
|
|
523
|
+
return r_ok_kto.call
|
|
524
|
+
end
|
|
525
|
+
end
|
|
526
|
+
return r_ok.call
|
|
527
|
+
|
|
528
|
+
# IBAN-Regel 0016.00 Kölner Bank eG
|
|
529
|
+
when 16
|
|
530
|
+
if k1 == 0 && k2 == 300000
|
|
531
|
+
kto.replace("0018128012")
|
|
532
|
+
return r_ok_kto.call
|
|
533
|
+
end
|
|
534
|
+
return r_ok.call
|
|
535
|
+
|
|
536
|
+
# IBAN-Regel 0017.00 Volksbank Bonn Rhein-Sieg
|
|
537
|
+
when 17
|
|
538
|
+
if k1 == 0
|
|
539
|
+
neu = case k2
|
|
540
|
+
when 100 then "2009090013"
|
|
541
|
+
when 111 then "2111111017"
|
|
542
|
+
when 240 then "2100240010"
|
|
543
|
+
when 4004 then "2204004016"
|
|
544
|
+
when 4444 then "2044444014"
|
|
545
|
+
when 6060 then "2016060014"
|
|
546
|
+
when 102030 then "1102030016"
|
|
547
|
+
when 333333 then "2033333016"
|
|
548
|
+
when 909090 then "2009090013"
|
|
549
|
+
when 50005000 then "5000500013"
|
|
550
|
+
end
|
|
551
|
+
if neu
|
|
552
|
+
kto.replace(neu)
|
|
553
|
+
return r_ok_kto.call
|
|
554
|
+
end
|
|
555
|
+
end
|
|
556
|
+
return r_ok.call
|
|
557
|
+
|
|
558
|
+
# IBAN-Regel 0018.00 Aachener Bank eG
|
|
559
|
+
when 18
|
|
560
|
+
if k1 == 54 && k2 == 35435430
|
|
561
|
+
kto.replace("0543543543")
|
|
562
|
+
return r_ok_kto.call
|
|
563
|
+
end
|
|
564
|
+
if k1 == 0
|
|
565
|
+
neu = case k2
|
|
566
|
+
when 556 then "0120440110"
|
|
567
|
+
when 2157 then "0121787016"
|
|
568
|
+
when 9800 then "0120800019"
|
|
569
|
+
when 202050 then "1221864014"
|
|
570
|
+
end
|
|
571
|
+
if neu
|
|
572
|
+
kto.replace(neu)
|
|
573
|
+
return r_ok_kto.call
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
return r_ok.call
|
|
577
|
+
|
|
578
|
+
# IBAN-Regel 0019.00 Bethmann Bank
|
|
579
|
+
when 19
|
|
580
|
+
return [OK, bic] if b == 50120383
|
|
581
|
+
blz.replace("50120383")
|
|
582
|
+
bic = "DELBDE33XXX"
|
|
583
|
+
return [OK_BLZ_REPLACED, bic]
|
|
584
|
+
|
|
585
|
+
# IBAN-Regel 0020.02 Deutsche Bank AG
|
|
586
|
+
when 20
|
|
587
|
+
# BLZ ohne IBAN-Berechnung
|
|
588
|
+
return [NO_IBAN_CALCULATION, bic] if b == 10020000
|
|
589
|
+
|
|
590
|
+
# Spendenkontonummer
|
|
591
|
+
if b == 50070010 && k1 == 0 && k2 == 9999
|
|
592
|
+
kto.replace("0092777202")
|
|
593
|
+
return r_ok_kto.call
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
idx = lut_index(blz)
|
|
597
|
+
return [idx, bic] if idx < 0
|
|
598
|
+
pz_methode = @data.pz[idx]
|
|
599
|
+
|
|
600
|
+
# Prüfzifferverfahren 09 (Deutsche Bank GF intern)
|
|
601
|
+
return [OK_NO_CHK, bic] if pz_methode == 9
|
|
602
|
+
|
|
603
|
+
# Sonderfall Norisbank: Konten, bei denen ausschließlich das
|
|
604
|
+
# Prüfzifferverfahren 06 eine gültige Prüfziffer liefert, sind für die
|
|
605
|
+
# IBAN-Berechnung nicht zugelassen
|
|
606
|
+
if pz_methode == 127 && kto_check_pz("c7a", kto, nil) < OK && kto_check_pz("c7c", kto, nil) < OK
|
|
607
|
+
if retvals
|
|
608
|
+
retvals.methode = "c7b"
|
|
609
|
+
retvals.pz_methode = 2127
|
|
610
|
+
end
|
|
611
|
+
ret = kto_check_pz("c7b", kto, nil)
|
|
612
|
+
return [ret == OK ? NO_IBAN_CALCULATION : ret, bic]
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
# 10-stellige Konten sind ungültig
|
|
616
|
+
return [INVALID_KTO, bic] if kto[0] != "0"
|
|
617
|
+
|
|
618
|
+
# jetzt kommt nur noch das Prüfzifferverfahren 63 (Deutsche Bank)
|
|
619
|
+
if retvals
|
|
620
|
+
retvals.methode = "63"
|
|
621
|
+
retvals.pz_methode = 63
|
|
622
|
+
end
|
|
623
|
+
|
|
624
|
+
if k1 == 0
|
|
625
|
+
# 1-4 stellige Konten sind generell nicht zugelassen
|
|
626
|
+
return [NO_IBAN_CALCULATION, bic] if k2 < 10000
|
|
627
|
+
|
|
628
|
+
# 5- und 6-stellige Konten: rechts zwei Nullen anfügen
|
|
629
|
+
if k2 < 1000000
|
|
630
|
+
tmp = kto_check_pz("63a", kto, nil)
|
|
631
|
+
kto.replace(kto[2, 8] + "00")
|
|
632
|
+
ret = kto_check_pz("63a", kto, nil)
|
|
633
|
+
return [OK_UNTERKONTO_ATTACHED, bic] if ret == OK
|
|
634
|
+
if retvals
|
|
635
|
+
retvals.methode = "63b"
|
|
636
|
+
retvals.pz_methode = 2063
|
|
637
|
+
end
|
|
638
|
+
return [tmp == OK ? NO_IBAN_CALCULATION : ret, bic]
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
# 7-stellige Konten: zuerst Unterkonto 00 anhängen, sonst mit 63a
|
|
642
|
+
if k2 >= 1000000 && k2 < 10000000
|
|
643
|
+
if kto_check_pz("63b", kto, nil) == OK
|
|
644
|
+
kto.replace(kto[2, 8] + "00")
|
|
645
|
+
return [OK_UNTERKONTO_ATTACHED, bic]
|
|
646
|
+
end
|
|
647
|
+
return [kto_check_pz("63a", kto, nil), bic]
|
|
648
|
+
end
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
# alle restlichen Konten (8- bis 9-stellig) nur mit Methode 63a prüfen
|
|
652
|
+
return [kto_check_pz("63a", kto, nil), bic]
|
|
653
|
+
|
|
654
|
+
# IBAN-Regel 0021.01 National-Bank AG
|
|
655
|
+
when 21
|
|
656
|
+
# 1-5 stellige oder 8 stellige Konten sind ungültig
|
|
657
|
+
return [INVALID_KTO, bic] if k1 == 0 && (k2 < 100000 || k2 > 9999999)
|
|
658
|
+
return [OK, bic] if b == 36020030
|
|
659
|
+
blz.replace("36020030")
|
|
660
|
+
bic = "NBAGDE3EXXX"
|
|
661
|
+
return [OK_BLZ_REPLACED, bic]
|
|
662
|
+
|
|
663
|
+
# IBAN-Regel 0022.00 GLS Gemeinschaftsbank eG
|
|
664
|
+
when 22
|
|
665
|
+
if k1 == 0 && k2 == 1111111
|
|
666
|
+
kto.replace("2222200000")
|
|
667
|
+
return r_ok_kto.call
|
|
668
|
+
end
|
|
669
|
+
return r_ok.call
|
|
670
|
+
|
|
671
|
+
# IBAN-Regel 0023.00 Volksbank Osnabrück eG
|
|
672
|
+
when 23
|
|
673
|
+
if k1 == 0 && k2 == 700
|
|
674
|
+
kto.replace("1000700800")
|
|
675
|
+
return r_ok_kto.call
|
|
676
|
+
end
|
|
677
|
+
return r_ok.call
|
|
678
|
+
|
|
679
|
+
# IBAN-Regel 0024.00 Bank im Bistum Essen eG
|
|
680
|
+
# (die Ersatzkontonummern sind hier nur achtstellig, wie im C-Code)
|
|
681
|
+
when 24
|
|
682
|
+
if k1 == 0
|
|
683
|
+
neu = case k2
|
|
684
|
+
when 94 then "00001694"
|
|
685
|
+
when 248 then "00017248"
|
|
686
|
+
when 345 then "00017345"
|
|
687
|
+
when 400 then "00014400"
|
|
688
|
+
end
|
|
689
|
+
if neu
|
|
690
|
+
kto.replace(neu)
|
|
691
|
+
return r_ok_kto.call
|
|
692
|
+
end
|
|
693
|
+
end
|
|
694
|
+
return r_ok.call
|
|
695
|
+
|
|
696
|
+
# IBAN-Regel 0025.00 Landesbank Baden-Württemberg / BW-Bank
|
|
697
|
+
when 25
|
|
698
|
+
return [OK, bic] if b == 60050101
|
|
699
|
+
blz.replace("60050101")
|
|
700
|
+
bic = "SOLADEST600"
|
|
701
|
+
return [OK_BLZ_REPLACED, bic]
|
|
702
|
+
|
|
703
|
+
# IBAN-Regel 0026.00 Bank für Kirche und Diakonie eG
|
|
704
|
+
when 26
|
|
705
|
+
return [OK_IBAN_WITHOUT_KC_TEST, bic] if k1 == 0 && (k2 == 55111 || k2 == 8090100)
|
|
706
|
+
return r_ok.call
|
|
707
|
+
|
|
708
|
+
# IBAN-Regel 0027.00 Volksbank Krefeld eG
|
|
709
|
+
when 27
|
|
710
|
+
return [OK_IBAN_WITHOUT_KC_TEST, bic] if k1 == 0 && (k2 == 3333 || k2 == 4444)
|
|
711
|
+
return r_ok.call
|
|
712
|
+
|
|
713
|
+
# IBAN-Regel 0028.00 Sparkasse Hannover
|
|
714
|
+
when 28
|
|
715
|
+
return [OK, bic] if b == 25050180
|
|
716
|
+
blz.replace("25050180")
|
|
717
|
+
bic = "SPKHDE2HXXX"
|
|
718
|
+
return [OK_BLZ_REPLACED, bic]
|
|
719
|
+
|
|
720
|
+
# IBAN-Regel 0029.00 Société Générale
|
|
721
|
+
when 29
|
|
722
|
+
# 10-stellige Kontonummern mit einer "0" an Position 4: die 4. Ziffer
|
|
723
|
+
# wird entfernt
|
|
724
|
+
if kto[0] != "0" && kto[3] == "0"
|
|
725
|
+
kto.replace("0" + kto[0, 3] + kto[4, 6])
|
|
726
|
+
return r_ok_kto.call
|
|
727
|
+
end
|
|
728
|
+
return r_ok.call
|
|
729
|
+
|
|
730
|
+
# IBAN-Regel 0030.00 Pommersche Volksbank eG (ab September 2018 entfallen)
|
|
731
|
+
when 30
|
|
732
|
+
return [OK, bic]
|
|
733
|
+
|
|
734
|
+
# IBAN-Regeln 0031.01 .. 0035.01 UniCredit Bank AG (ex HypoVereinsbank)
|
|
735
|
+
when 31, 32, 33, 34, 35
|
|
736
|
+
loesch, ret = lut_loeschung(blz, 0)
|
|
737
|
+
loesch = loesch == 1 ? 1 : 0
|
|
738
|
+
return [ret, bic] if ret < OK
|
|
739
|
+
|
|
740
|
+
# Spendenkonten nicht testen
|
|
741
|
+
spende = (regel == 33 && k1 == 0 &&
|
|
742
|
+
(k2 == 22222 || k2 == 1111111 || k2 == 94 || k2 == 7777777 || k2 == 55555)) ||
|
|
743
|
+
(regel == 34 && ((k1 == 0 && k2 == 502) || (k1 == 5 && k2 == 500500))) ||
|
|
744
|
+
(regel == 35 && k1 == 0 && k2 == 9696)
|
|
745
|
+
unless spende
|
|
746
|
+
ret = kto_check_blz(blz, kto)
|
|
747
|
+
return [ret, bic] if ret < OK
|
|
748
|
+
end
|
|
749
|
+
|
|
750
|
+
case regel
|
|
751
|
+
when 31
|
|
752
|
+
if loesch == 0
|
|
753
|
+
# Testfall D bei IBAN-Regel 31: weiter wie Regel 32
|
|
754
|
+
return [NO_IBAN_CALCULATION, bic] if k1 == 8
|
|
755
|
+
else
|
|
756
|
+
# 31: nur 10-stellige Konten
|
|
757
|
+
return [NO_IBAN_CALCULATION, bic] if kto[0] == "0"
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
when 32
|
|
761
|
+
return [IBAN_INVALID_RULE, bic] if loesch != 0
|
|
762
|
+
return [NO_IBAN_CALCULATION, bic] if k1 == 8
|
|
763
|
+
|
|
764
|
+
when 33
|
|
765
|
+
return [IBAN_INVALID_RULE, bic] if b != 70020270
|
|
766
|
+
if k1 == 0
|
|
767
|
+
neu = case k2
|
|
768
|
+
when 22222 then "5803435253"
|
|
769
|
+
when 1111111 then "0039908140"
|
|
770
|
+
when 94 then "0002711931"
|
|
771
|
+
when 7777777 then "5800522694"
|
|
772
|
+
when 55555 then "5801800000"
|
|
773
|
+
end
|
|
774
|
+
if neu
|
|
775
|
+
kto.replace(neu)
|
|
776
|
+
return r_ok_kto.call
|
|
777
|
+
end
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
when 34
|
|
781
|
+
return [IBAN_INVALID_RULE, bic] if b != 60020290
|
|
782
|
+
return [NO_IBAN_CALCULATION, bic] if k1 == 8
|
|
783
|
+
if k1 == 5 && k2 == 500500
|
|
784
|
+
kto.replace("4340111112")
|
|
785
|
+
return r_ok_kto.call
|
|
786
|
+
end
|
|
787
|
+
if k1 == 0 && k2 == 502
|
|
788
|
+
kto.replace("4340118001")
|
|
789
|
+
return r_ok_kto.call
|
|
790
|
+
end
|
|
791
|
+
|
|
792
|
+
when 35
|
|
793
|
+
return [IBAN_INVALID_RULE, bic] if b != 79020076
|
|
794
|
+
return [NO_IBAN_CALCULATION, bic] if k1 == 8
|
|
795
|
+
if k1 == 0 && k2 == 9696
|
|
796
|
+
kto.replace("1490196966")
|
|
797
|
+
return r_ok_kto.call
|
|
798
|
+
end
|
|
799
|
+
end
|
|
800
|
+
|
|
801
|
+
# Für 10-stellige Kontonummern die Nachfolge-BLZ aus dem Kontokreis
|
|
802
|
+
# bestimmen ("Tabelle zu Kontokreise exHypo"); gilt für die Regeln 31-35
|
|
803
|
+
if kto[0] != "0"
|
|
804
|
+
k3 = kto[0, 3].to_i
|
|
805
|
+
blz_neu = IBAN_R31_KONTOKREIS[k3]
|
|
806
|
+
# kein Kontenkreis definiert, dürfte ein ungültiges Konto sein
|
|
807
|
+
return [INVALID_KTO, bic] unless blz_neu
|
|
808
|
+
blz.replace(blz_neu)
|
|
809
|
+
b_neu = blz.to_i
|
|
810
|
+
ret = b == b_neu ? OK : OK_BLZ_REPLACED
|
|
811
|
+
else
|
|
812
|
+
ret = OK
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
# BIC aus der Nachfolge-BLZ bestimmen (die ist hier eingesetzt)
|
|
816
|
+
bic = lut_bic_int(blz, 0)[0]
|
|
817
|
+
return [ret, bic]
|
|
818
|
+
|
|
819
|
+
# IBAN-Regel 0036.00 HSH Nordbank AG
|
|
820
|
+
when 36
|
|
821
|
+
# Variante 3: Kontonummernkreise ohne IBAN-Ermittlung
|
|
822
|
+
if (k1 == 0 && (k2 <= 99999 || (k2 >= 900000 && k2 <= 29999999) || k2 >= 60000000)) ||
|
|
823
|
+
k1 == 9 || (k1 >= 20 && k1 <= 29) || (k1 >= 71 && k1 <= 84) || (k1 >= 86 && k1 <= 89)
|
|
824
|
+
return [NO_IBAN_CALCULATION, bic]
|
|
825
|
+
end
|
|
826
|
+
|
|
827
|
+
blz.replace("21050000")
|
|
828
|
+
|
|
829
|
+
# Variante 1: 6-stellige Kontonummern, 5. Stelle 1-8: rechtsbündig mit
|
|
830
|
+
# 3 Nullen aufgefüllt
|
|
831
|
+
if kto[0] == "0" && kto[1] == "0" && kto[2] == "0" && kto[3] == "0" && kto[4] != "0"
|
|
832
|
+
kto.replace("0" + kto[4, 6] + "000")
|
|
833
|
+
ret = kto_check_blz(blz, kto)
|
|
834
|
+
return [ret, bic] if ret < OK
|
|
835
|
+
return b == 21050000 ? r_ok_kto.call : [OK_BLZ_KTO_REPLACED, bic]
|
|
836
|
+
end
|
|
837
|
+
|
|
838
|
+
# Variante 2: alle übrigen Kontonummern (Standard, linksbündig)
|
|
839
|
+
ret = kto_check_blz(blz, kto)
|
|
840
|
+
return [ret, bic] if ret < OK
|
|
841
|
+
return [b == 21050000 ? OK : OK_BLZ_REPLACED, bic]
|
|
842
|
+
|
|
843
|
+
# IBAN-Regel 0037.00 The Bank of Tokyo-Mitsubishi UFJ, Ltd.
|
|
844
|
+
when 37
|
|
845
|
+
return [OK, bic] if b == 30010700
|
|
846
|
+
blz.replace("30010700")
|
|
847
|
+
bic = "BOTKDEDXXXX"
|
|
848
|
+
return [OK_BLZ_REPLACED, bic]
|
|
849
|
+
|
|
850
|
+
# IBAN-Regel 0038.00 Ostfriesische Volksbank eG
|
|
851
|
+
when 38
|
|
852
|
+
return [OK, bic] if b == 28590075
|
|
853
|
+
case b
|
|
854
|
+
when 26691213, 28591579, 25090300
|
|
855
|
+
blz.replace("28590075")
|
|
856
|
+
bic = "GENODEF1LER"
|
|
857
|
+
return [OK_BLZ_REPLACED, bic]
|
|
858
|
+
end
|
|
859
|
+
return r_ok.call
|
|
860
|
+
|
|
861
|
+
# IBAN-Regel 0039.00 Oldenburgische Landesbank AG
|
|
862
|
+
when 39
|
|
863
|
+
return [OK, bic] if b == 28020050
|
|
864
|
+
blz.replace("28020050")
|
|
865
|
+
bic = "OLBODEH2XXX"
|
|
866
|
+
return [OK_BLZ_REPLACED, bic]
|
|
867
|
+
|
|
868
|
+
# IBAN-Regel 0040.01 Sparkasse Staufen-Breisach
|
|
869
|
+
when 40
|
|
870
|
+
return [OK, bic] if b == 68052328
|
|
871
|
+
blz.replace("68052328")
|
|
872
|
+
bic = "SOLADES1STF"
|
|
873
|
+
return [OK_BLZ_REPLACED, bic]
|
|
874
|
+
|
|
875
|
+
# IBAN-Regel 0041.00 Bausparkasse Schwäbisch Hall AG
|
|
876
|
+
when 41
|
|
877
|
+
if b == 62220000
|
|
878
|
+
blz.replace("50060400")
|
|
879
|
+
kto.replace("0000011404")
|
|
880
|
+
bic = "GENODEFFXXX"
|
|
881
|
+
return [OK_BLZ_KTO_REPLACED, bic]
|
|
882
|
+
end
|
|
883
|
+
return r_ok.call
|
|
884
|
+
|
|
885
|
+
# IBAN-Regel 0042.01 Deutsche Bundesbank
|
|
886
|
+
when 42
|
|
887
|
+
# ab Dezember 2016 sind auch 10-stellige Konten nnn4400001..nnn4499999 zulässig
|
|
888
|
+
if k1 >= 10
|
|
889
|
+
if kto[3] == "4" && kto[4] == "4" &&
|
|
890
|
+
(kto[5] != "0" || kto[6] != "0" || kto[7] != "0" || kto[8] != "0" || kto[9] != "0")
|
|
891
|
+
return [OK, bic]
|
|
892
|
+
end
|
|
893
|
+
return [NO_IBAN_CALCULATION, bic]
|
|
894
|
+
end
|
|
895
|
+
|
|
896
|
+
# ansonsten sind nur noch 8-stellige Konten freigegeben
|
|
897
|
+
return [NO_IBAN_CALCULATION, bic] if k1 != 0 || k2 < 10000000
|
|
898
|
+
|
|
899
|
+
# Konten ohne IBAN-Berechnung: nnn 0 0000 bis nnn 0 0999
|
|
900
|
+
return [NO_IBAN_CALCULATION, bic] if kto[5] == "0" && kto[6] == "0"
|
|
901
|
+
|
|
902
|
+
# die Kontonummer muss an der 4. Stelle (der 8-stelligen Nummer) '0' sein
|
|
903
|
+
return [OK, bic] if kto[5] == "0"
|
|
904
|
+
|
|
905
|
+
# außerdem freigegeben: 50462000..50463999 sowie 50469000..50469999
|
|
906
|
+
if k1 == 0 && ((k2 >= 50462000 && k2 <= 50463999) || (k2 >= 50469000 && k2 <= 50469999))
|
|
907
|
+
return [OK, bic]
|
|
908
|
+
end
|
|
909
|
+
return [NO_IBAN_CALCULATION, bic]
|
|
910
|
+
|
|
911
|
+
# IBAN-Regel 0043.01 Sparkasse Pforzheim Calw
|
|
912
|
+
when 43
|
|
913
|
+
if b == 60651070
|
|
914
|
+
blz.replace("66650085")
|
|
915
|
+
bic = "PZHSDE66XXX"
|
|
916
|
+
return [OK_BLZ_REPLACED, bic]
|
|
917
|
+
end
|
|
918
|
+
return r_ok.call
|
|
919
|
+
|
|
920
|
+
# IBAN-Regel 0044.00 Sparkasse Freiburg
|
|
921
|
+
when 44
|
|
922
|
+
if k1 == 0 && k2 == 202
|
|
923
|
+
kto.replace("0002282022")
|
|
924
|
+
return r_ok_kto.call
|
|
925
|
+
end
|
|
926
|
+
return r_ok.call
|
|
927
|
+
|
|
928
|
+
# IBAN-Regel 0045.01 SEB AG (ab September 2017 entfallen)
|
|
929
|
+
when 45
|
|
930
|
+
return [OK, bic]
|
|
931
|
+
|
|
932
|
+
# IBAN-Regel 0046.00 Santander Consumer Bank
|
|
933
|
+
when 46
|
|
934
|
+
return [OK, bic] if b == 31010833
|
|
935
|
+
blz.replace("31010833")
|
|
936
|
+
bic = "CCBADE31XXX"
|
|
937
|
+
return [OK_BLZ_REPLACED, bic]
|
|
938
|
+
|
|
939
|
+
# IBAN-Regel 0047.00 Santander Consumer Bank
|
|
940
|
+
when 47
|
|
941
|
+
# achtstellige Kontonummern sind rechtsbündig mit Nullen aufzufüllen
|
|
942
|
+
if kto[0] == "0" && kto[1] == "0" && kto[2] != "0"
|
|
943
|
+
kto.replace(kto[2, 8] + "00")
|
|
944
|
+
return r_ok_kto.call
|
|
945
|
+
end
|
|
946
|
+
return r_ok.call
|
|
947
|
+
|
|
948
|
+
# IBAN-Regel 0048.00 VON ESSEN GmbH & Co. KG Bankgesellschaft
|
|
949
|
+
when 48
|
|
950
|
+
return [OK, bic] if b == 36010200
|
|
951
|
+
blz.replace("36010200")
|
|
952
|
+
bic = "VONEDE33XXX"
|
|
953
|
+
return [OK_BLZ_REPLACED, bic]
|
|
954
|
+
|
|
955
|
+
# IBAN-Regel 0049.01 DZ Bank
|
|
956
|
+
when 49
|
|
957
|
+
# Kontonummern mit einer '9' an der 5. Stelle: die ersten 4 Stellen
|
|
958
|
+
# werden ans Ende gestellt; diese Kontonummer hat keine Prüfziffer
|
|
959
|
+
return r_ok.call if kto[4] != "9"
|
|
960
|
+
tmp_buffer = kto.dup
|
|
961
|
+
kto.replace(tmp_buffer[4, 6] + tmp_buffer[0, 4])
|
|
962
|
+
return [OK_KTO_REPLACED_NO_PZ, bic]
|
|
963
|
+
|
|
964
|
+
# IBAN-Regel 0050.00 Sparkasse LeerWittmund
|
|
965
|
+
when 50
|
|
966
|
+
if b == 28252760
|
|
967
|
+
blz.replace("28550000")
|
|
968
|
+
bic = "BRLADE21LER"
|
|
969
|
+
return [OK_BLZ_REPLACED, bic]
|
|
970
|
+
end
|
|
971
|
+
return r_ok.call
|
|
972
|
+
|
|
973
|
+
# IBAN-Regel 0051.00 Landesbank Baden-Württemberg / BW-Bank
|
|
974
|
+
when 51
|
|
975
|
+
if k1 == 0
|
|
976
|
+
case k2
|
|
977
|
+
when 333
|
|
978
|
+
kto.replace("7832500881")
|
|
979
|
+
return r_ok_kto.call
|
|
980
|
+
when 502
|
|
981
|
+
kto.replace("0001108884")
|
|
982
|
+
return r_ok_kto.call
|
|
983
|
+
end
|
|
984
|
+
end
|
|
985
|
+
if k1 == 5
|
|
986
|
+
case k2
|
|
987
|
+
when 500500
|
|
988
|
+
kto.replace("0005005000")
|
|
989
|
+
return r_ok_kto.call
|
|
990
|
+
when 2502502
|
|
991
|
+
kto.replace("0001108884")
|
|
992
|
+
return r_ok_kto.call
|
|
993
|
+
end
|
|
994
|
+
end
|
|
995
|
+
return r_ok.call
|
|
996
|
+
|
|
997
|
+
# IBAN-Regel 0052.00 Landesbank Baden-Württemberg / BW-Bank
|
|
998
|
+
when 52
|
|
999
|
+
neu = if b == 67220020 && k1 == 53 && k2 == 8810004 then "0002662604"
|
|
1000
|
+
elsif b == 67220020 && k1 == 53 && k2 == 8810000 then "0002659600"
|
|
1001
|
+
elsif b == 67020020 && k1 == 52 && k2 == 3145700 then "7496510994"
|
|
1002
|
+
elsif b == 69421020 && k1 == 62 && k2 == 8908100 then "7481501341"
|
|
1003
|
+
elsif b == 66620020 && k1 == 48 && k2 == 40404000 then "7498502663"
|
|
1004
|
+
elsif b == 64120030 && k1 == 12 && k2 == 1200100 then "7477501214"
|
|
1005
|
+
elsif b == 64020030 && k1 == 14 && k2 == 8050100 then "7469534505"
|
|
1006
|
+
elsif b == 63020130 && k1 == 11 && k2 == 12156300 then "0004475655"
|
|
1007
|
+
elsif b == 62030050 && k1 == 70 && k2 == 2703200 then "7406501175"
|
|
1008
|
+
elsif b == 69220020 && k1 == 64 && k2 == 2145400 then "7485500252"
|
|
1009
|
+
end
|
|
1010
|
+
if neu
|
|
1011
|
+
blz.replace("60050101")
|
|
1012
|
+
kto.replace(neu)
|
|
1013
|
+
bic = "SOLADEST600"
|
|
1014
|
+
return [OK_BLZ_KTO_REPLACED, bic]
|
|
1015
|
+
end
|
|
1016
|
+
return [NO_IBAN_CALCULATION, bic]
|
|
1017
|
+
|
|
1018
|
+
# IBAN-Regel 0053.00 Landesbank Baden-Württemberg / BW-Bank
|
|
1019
|
+
when 53
|
|
1020
|
+
if (tab = IBAN_R53_SONDERKONTEN[b]) && (neu = tab[[k1, k2]])
|
|
1021
|
+
blz.replace("60050101")
|
|
1022
|
+
kto.replace(neu)
|
|
1023
|
+
bic = "SOLADEST600"
|
|
1024
|
+
return [OK_BLZ_KTO_REPLACED, bic]
|
|
1025
|
+
end
|
|
1026
|
+
return r_ok.call
|
|
1027
|
+
|
|
1028
|
+
# IBAN-Regel 0054.01 Evangelische Darlehnsgenossenschaft eG (ab Juni 2017 entfallen)
|
|
1029
|
+
when 54
|
|
1030
|
+
return [OK, bic]
|
|
1031
|
+
|
|
1032
|
+
# IBAN-Regel 0055.00 BHW Kreditservice GmbH
|
|
1033
|
+
when 55
|
|
1034
|
+
if b != 25410200
|
|
1035
|
+
blz.replace("25410200")
|
|
1036
|
+
bic = "BHWBDE2HXXX"
|
|
1037
|
+
return [OK_BLZ_REPLACED, bic]
|
|
1038
|
+
end
|
|
1039
|
+
return r_ok.call
|
|
1040
|
+
|
|
1041
|
+
# IBAN-Regel 0056.03 SEB AG (ab Dezember 2018 entfallen)
|
|
1042
|
+
when 56
|
|
1043
|
+
return r_ok.call
|
|
1044
|
+
|
|
1045
|
+
# IBAN-Regel 0057.00 Badenia Bausparkasse
|
|
1046
|
+
when 57
|
|
1047
|
+
if b != 66010200
|
|
1048
|
+
blz.replace("66010200")
|
|
1049
|
+
bic = "BBSPDE6KXXX"
|
|
1050
|
+
return [OK_BLZ_REPLACED, bic]
|
|
1051
|
+
end
|
|
1052
|
+
return r_ok.call
|
|
1053
|
+
|
|
1054
|
+
# Lumpensammler für unbekannte Regeln
|
|
1055
|
+
else
|
|
1056
|
+
return [IBAN_RULE_UNKNOWN, bic]
|
|
1057
|
+
end
|
|
1058
|
+
end
|
|
1059
|
+
end
|
|
1060
|
+
end
|