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.
@@ -0,0 +1,1578 @@
1
+ # frozen_string_literal: false
2
+ # This file is taken from the original konto_check gem (Copyright (C)
3
+ # Michael Plugge, LGPL 2.1 or later) and was modified for konto_check_ruby
4
+ # by tickettoaster GmbH in September 2026: it now requires the pure Ruby
5
+ # KontoCheckRaw module instead of the C extension; the functions are
6
+ # otherwise unchanged.
7
+ # vi: ft=ruby:set si:set fileencoding=UTF-8
8
+
9
+ # KontoCheckRaw is provided by konto_check_ruby (pure Ruby port), see raw.rb
10
+ require_relative 'raw'
11
+
12
+ #This is the Ruby-like interface of konto_check_ruby, a pure Ruby port of
13
+ #the C library konto_check to check the validity of German Bank Account
14
+ #Numbers. The module is taken from the original konto_check gem (LGPL) and
15
+ #works unchanged on top of the pure Ruby KontoCheckRaw module. All currently defined test methods by Deutsche Bundesbank
16
+ #(April 2015: 00 to E2) are implemented.
17
+ #
18
+ #<b>ATTENTION:</b> There are a few important changes in the API between version 0.0.2 (version
19
+ #by Peter Horn/Provideal), version 0.0.6 (jeanmartin) and this version:
20
+ #
21
+ #* The function KontoCheck::load_bank_data() is no longer used; it is replaced by KontoCheck::init() and KontoCheck::generate_lutfile().
22
+ #* The function KontoCheck::konto_check( blz,kto) changed the order of parameters from (kto,blz) to (blz,kto)
23
+ #
24
+ #Another change affects only the version 0.0.6 by jeanmartin:
25
+ #
26
+ #* In KontoCheck::init( level,name,set) the order of the two first parameters is now free; the order is determined by the type of the variable (level is integer, filename string).
27
+ #
28
+ #Because this class is inteded for german bank accounts, the rest of the
29
+ #documentation is in german too.
30
+ #
31
+ #Diese Bibliothek implementiert die Prüfziffertests für deutsche Bankkonten.
32
+ #Die meisten Konten enthalten eine Prüfziffer; mit dieser kann getestet
33
+ #werden, ob eine Bankleitzahl plausibel ist oder nicht. Auf diese Weise
34
+ #können Zahlendreher oder Zifferverdopplungen oft festgestellt werden. Es ist
35
+ #natürlich nicht möglich, zu bestimmen, ob ein Konto wirklich existiert; dazu
36
+ #müßte jeweils eine Anfrage bei der Bank gemacht werden ;-).
37
+ #
38
+ #Die Bibliothek ist in zwei Teile gesplittet: KontoCheckRaw bildet die direkte
39
+ #Schnittstelle zur C-Bibliothek und ist daher manchmal etwas sperrig;
40
+ #KontoCheck ist dagegen mehr Ruby-artig ausgelegt. KontoCheck gibt meist nur
41
+ #eine Teilmenge von KontoCheckRaw zurück, aber (hoffentlich) die Teile, die man
42
+ #unmittelbar von den jeweiligen Funktionen erwartet. Eine Reihe einfacher
43
+ #Funktionen sind auch in beiden Versionen identisch.
44
+ #
45
+ #Die Bankleitzahldaten werden in einem eigenen (komprimierten) Format in einer
46
+ #sogenannten LUT-Datei gespeichert. Diese Datei läßt sich mit der Funktion
47
+ #KontoCheck::generate_lutfile bzw. KontoCheckRaw::generate_lutfile aus der
48
+ #Datei der Deutschen Bundesbank (online erhältlich unter
49
+ #http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php)
50
+ #erzeugen. Die LUT-Datei hat den großen Vorteil, daß die Datenblocks (BLZ,
51
+ #Prüfziffer, Bankname, Ort, ...) unabhängig voneinander gespeichert sind; jeder
52
+ #Block kann für sich geladen werden. In einer Datei können zwei Datensätze der
53
+ #Bundesbank mit unterschiedlichem Gültigkeitsdatum enthalten sein. Wenn bei der
54
+ #Initialisierung kein bestimmter Datensatz ausgewählt wird, prüft die
55
+ #Bibliothek aufgrund des mit jedem Datensatz gespeicherten Gültigkeitszeitraums
56
+ #welcher Satz aktuell gültig ist und lädt diesen dann in den Speicher.
57
+ #
58
+ #Numerische Werte (z.B. Bankleitzahlen, Kontonummern, PLZ,...) können als
59
+ #Zahlwerte oder als String angegeben werden; sie werden automatisch
60
+ #konvertiert. Prüfziffermethoden können ebenfalls als Zahl oder String
61
+ #angegeben werden; die Angabe als Zahl ist allerdings nicht immer eindeutig. So
62
+ #kann z.B. 131 sowohl für D1 als auch 13a stehen; daher ist es besser, die
63
+ #Prüfziffermethode als String anzugeben (in diesem Beispiel würde 131 als 13a
64
+ #interpretiert).
65
+
66
+ module KontoCheck
67
+
68
+ #mögliche Suchschlüssel für die Funktion KontoCheck::suche()
69
+ #
70
+ #:ort, :plz, :pz, :bic, :blz, :namen, :namen_kurz
71
+ SEARCH_KEYS = [:ort, :plz, :pz, :bic, :blz, :namen, :namen_kurz, :regel, :volltext, :multiple]
72
+ #Aliasnamen für einige Suchschlüssel der Funktion KontoCheck::suche()
73
+ #
74
+ #:bankleitzahl, :city, :zip, :name, :kurzname, :shortname, :pruefziffer
75
+ SEARCH_KEY_MAPPINGS = {
76
+ :bankleitzahl => :blz,
77
+ :city => :ort,
78
+ :zip => :plz,
79
+ :name => :namen,
80
+ :kurzname => :namen_kurz,
81
+ :shortname => :namen_kurz,
82
+ :pruefziffer => :pz,
83
+ :regel => :regel,
84
+ :vt => :volltext,
85
+ :fulltext => :volltext,
86
+ :m => :multiple,
87
+ :x => :multiple
88
+ }
89
+
90
+ class << self
91
+
92
+ #===KontoCheck::lut_info()
93
+ #=====KontoCheckRaw::lut_info( [lutfile])
94
+ #=====KontoCheck::lut_info1( lutfile)
95
+ #=====KontoCheck::lut_info2( lutfile)
96
+ #
97
+ #Diese Funktion liefert den Infoblock des Datensatzes zurück, der mittels
98
+ #init() in den Speichergeladen wurde. Weitere Infos über die LUT-Datei
99
+ #lassen sich mit der Funktion KontoCheckRaw::lut_info() sowie
100
+ #KontoCheck::dump_lutfile() erhalten.
101
+
102
+ def lut_info()
103
+ KontoCheckRaw::lut_info()[3]
104
+ end
105
+
106
+ #===KontoCheck::lut_info1( lutfile)
107
+ #=====KontoCheck::lut_info()
108
+ #=====KontoCheck::lut_info2()
109
+ #=====KontoCheckRaw::lut_info()
110
+ #
111
+ #Diese Funktion liefert den Infoblock des ersten Datensatzes der angegebenen
112
+ #LUT-Datei zurück. Weitere Infos über die LUT-Datei lassen sich mit der
113
+ #Funktion KontoCheckRaw::lut_info() sowie KontoCheck::dump_lutfile() erhalten.
114
+
115
+ def lut_info1(filename)
116
+ KontoCheckRaw::lut_info(filename)[3]
117
+ end
118
+
119
+ #===KontoCheck::lut_info2( lutfile)
120
+ #=====KontoCheck::lut_info()
121
+ #=====KontoCheck::lut_info1( lutfile)
122
+ #=====KontoCheckRaw::lut_info( [lutfile])
123
+ #
124
+ #Diese Funktion liefert den Infoblock des zweiten Datensatzes der angegebenen
125
+ #LUT-Datei zurück. Weitere Infos über die LUT-Datei lassen sich mit der
126
+ #Funktion KontoCheckRaw::lut_info() sowie KontoCheck::dump_lutfile() erhalten.
127
+
128
+ def lut_info2(filename)
129
+ KontoCheckRaw::lut_info(filename)[4]
130
+ end
131
+
132
+
133
+ #===KontoCheck::dump_lutfile( lutfile)
134
+ #=====KontoCheckRaw::dump_lutfile( lutfile)
135
+ #
136
+ #Diese Funktion liefert detaillierte Informationen über alle Blocks, die in der
137
+ #LUT-Datei gespeichert sind, sowie noch einige Internas der LUT-Datei. Im
138
+ #Fehlerfall wird nil zurückgegeben.
139
+
140
+ def dump_lutfile(filename)
141
+ KontoCheckRaw::dump_lutfile(filename).first
142
+ end
143
+
144
+ #===KontoCheck::encoding( [mode])
145
+ #=====KontoCheckRaw::encoding( [mode])
146
+ #=====KontoCheck::encoding_str( [mode])
147
+ #=====KontoCheckRaw::keep_raw_data( mode)
148
+ #
149
+ #Diese Funktion legt den benutzten Zeichensatz für Fehlermeldungen durch die
150
+ #Funktion KontoCheck::retval2txt() und einige Felder der LUT-Datei (Name,
151
+ #Kurzname, Ort) fest. Wenn die Funktion nicht aufgerufen wird, wird der Wert
152
+ #DEFAULT_ENCODING aus konto_check.h benutzt.
153
+ #
154
+ #_Achtung_: Das Verhalten der Funktion hängt von dem Flag keep_raw_data der
155
+ #C-Bibliothek ab. Falls das Flag gesetzt ist, werden die Rohdaten der Blocks
156
+ #Name, Kurzname und Ort im Speicher gehalten; bei einem Wechsel der Kodierung
157
+ #wird auch für diese Blocks die Kodierung umgesetzt. Falls das Flag nicht
158
+ #gesetzt ist, sollte die Funktion *vor* der Initialisierung aufgerufen werden,
159
+ #da in dem Fall die Daten der LUT-Datei nur bei der Initialisierung konvertiert
160
+ #werden. Mit der Funktion KontoCheckRaw::keep_raw_data() kann das Flag gesetzt
161
+ #oder gelöscht werden.
162
+ #
163
+ #Für den Parameter mode werden die folgenden Werte akzeptiert (die Strings sind
164
+ #nicht case sensitiv; Mi oder mI oder MI ist z.B. auch möglich; wird der
165
+ #Parameter nicht angegeben, wird die aktuelle Kodierung ausgegeben):
166
+ #
167
+ # 0: aktuelle Kodierung ausgeben
168
+ # 1, 'i', 'I': ISO-8859-1
169
+ # 2, 'u', 'U': UTF-8
170
+ # 3, 'h', 'H': HTML
171
+ # 4, 'd', 'D': DOS CP 850
172
+ # 51, 'mi': ISO-8859-1, Makro für Fehlermeldungen
173
+ # 52, 'mu': UTF-8, Makro für Fehlermeldungen
174
+ # 53, 'mh': HTML, Makro für Fehlermeldungen
175
+ # 54, 'md': DOS CP 850, Makro für Fehlermeldungen
176
+ #
177
+ #Rückgabewert ist die aktuelle Kodierung als Integer (falls zwei Kodierungen
178
+ #angegeben sind, ist die erste die der Statusmeldungen, die zweite die der
179
+ #LUT-Blocks):
180
+ #
181
+ # 0: "noch nicht spezifiziert" (vor der Initialisierung)
182
+ # 1: "ISO-8859-1";
183
+ # 2: "UTF-8";
184
+ # 3: "HTML entities";
185
+ # 4: "DOS CP 850";
186
+ # 12: "ISO-8859-1/UTF-8";
187
+ # 13: "ISO-8859-1/HTML";
188
+ # 14: "ISO-8859-1/DOS CP 850";
189
+ # 21: "UTF-8/ISO-8859-1";
190
+ # 23: "UTF-8/HTML";
191
+ # 24: "UTF-8/DOS CP-850";
192
+ # 31: "HTML entities/ISO-8859-1";
193
+ # 32: "HTML entities/UTF-8";
194
+ # 34: "HTML entities/DOS CP-850";
195
+ # 41: "DOS CP-850/ISO-8859-1";
196
+ # 42: "DOS CP-850/UTF-8";
197
+ # 43: "DOS CP-850/HTML";
198
+ # 51: "Makro/ISO-8859-1";
199
+ # 52: "Makro/UTF-8";
200
+ # 53: "Makro/HTML";
201
+ # 54: "Makro/DOS CP 850";
202
+
203
+ def encoding(*args)
204
+ KontoCheckRaw::encoding(*args)
205
+ end
206
+
207
+ #===KontoCheck::pz_aenderungen_enable( set)
208
+ #=====KontoCheckRaw::pz_aenderungen_enable( set)
209
+ #
210
+ # Die Funktion pz_aenderungen_enable() dient dazu, den Status des Flags
211
+ # pz_aenderungen_aktivieren abzufragen bzw. zu setzen. Falls die Variable
212
+ # set 1 ist, werden die Änderungen aktiviert, falls sie 0 ist, werden die
213
+ # Änderungen deaktiviert. Beim Aufruf ohne Parameter oder mit einem anderen
214
+ # Wert wird das aktuelle Flag nicht verändert, sondern nur der Status
215
+ # zurückgegeben.
216
+ #
217
+ #====Parameter:
218
+ #
219
+ # set: 0 oder 1: Änderungen deaktivieren/aktivieren
220
+ # anderer Wert: nur Abfrage des Status
221
+ #
222
+ #====Rückgabe:
223
+ # Rückgabe: aktueller Status des Flags #
224
+
225
+ def pz_aenderungen_enable(*args)
226
+ KontoCheckRaw::pz_aenderungen_enable(*args)
227
+ end
228
+
229
+ #===KontoCheck::encoding_str( [mode])
230
+ #=====KontoCheckRaw::encoding_str( [mode])
231
+ #=====KontoCheck::encoding( [mode])
232
+ #=====KontoCheckRaw::keep_raw_data( mode)
233
+ #
234
+ #Diese Funktion entspricht der Funktion KontoCheck::encoding(). Allerdings
235
+ #ist der Rückgabewert nicht numerisch, sondern ein String, der die aktuelle
236
+ #Kodierung angibt. Die folgenden Rückgabewerte sind möglich (falls zwei
237
+ #Kodierungen angegeben sind, ist die erste die der Statusmeldungen, die
238
+ #zweite die der LUT-Blocks):
239
+ #
240
+ # "noch nicht spezifiziert" (vor der Initialisierung)
241
+ # "ISO-8859-1";
242
+ # "UTF-8";
243
+ # "HTML entities";
244
+ # "DOS CP 850";
245
+ # "ISO-8859-1/UTF-8";
246
+ # "ISO-8859-1/HTML";
247
+ # "ISO-8859-1/DOS CP 850";
248
+ # "UTF-8/ISO-8859-1";
249
+ # "UTF-8/HTML";
250
+ # "UTF-8/DOS CP-850";
251
+ # "HTML entities/ISO-8859-1";
252
+ # "HTML entities/UTF-8";
253
+ # "HTML entities/DOS CP-850";
254
+ # "DOS CP-850/ISO-8859-1";
255
+ # "DOS CP-850/UTF-8";
256
+ # "DOS CP-850/HTML";
257
+ # "Makro/ISO-8859-1";
258
+ # "Makro/UTF-8";
259
+ # "Makro/HTML";
260
+ # "Makro/DOS CP 850";
261
+
262
+ def encoding_str(*args)
263
+ KontoCheckRaw::encoding_str(*args)
264
+ end
265
+
266
+ #===KontoCheck::retval2txt( retval)
267
+ #=====KontoCheckRaw::retval2txt( retval)
268
+ #
269
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String. Der
270
+ #benutzte Zeichensatz wird über die Funktion KontoCheck::encoding() festgelegt.
271
+ #Falls diese Funktion nicht aufgerufen wurde, wird der Wert des Makros
272
+ #DEFAULT_ENCODING aus konto_check.h benutzt.
273
+
274
+ def retval2txt(retval)
275
+ KontoCheckRaw::retval2txt(retval)
276
+ end
277
+
278
+ #===KontoCheck::retval2iso( retval)
279
+ #=====KontoCheckRaw::retval2iso( retval)
280
+ #
281
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
282
+ #Der benutzte Zeichensatz ist ISO 8859-1.
283
+
284
+ def retval2iso(retval)
285
+ KontoCheckRaw::retval2iso(retval)
286
+ end
287
+
288
+ #===KontoCheck::retval2txt_short( retval)
289
+ #=====KontoCheckRaw::retval2txt_short( retval)
290
+ #=====KontoCheck::retval2txt_kurz( retval)
291
+ #
292
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen kurzen
293
+ #String. Die Ausgabe ist der Makroname, wie er in C benutzt wird.
294
+
295
+ def retval2txt_short(retval)
296
+ KontoCheckRaw::retval2txt_short(retval)
297
+ end
298
+ alias_method :retval2txt_kurz, :retval2txt_short
299
+
300
+ #===KontoCheck::retval2txt_kurz( retval)
301
+ #=====KontoCheckRaw::retval2txt_short( retval)
302
+ #=====KontoCheck::retval2txt_short( retval)
303
+ #
304
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen kurzen
305
+ #String. Die Ausgabe ist der Makroname, wie er in C benutzt wird. Die Funktion
306
+ #ist ein Alias zu KontoCheck::retval2txt_short().
307
+
308
+ def retval2txt_kurz(retval)
309
+ KontoCheckRaw::retval2txt_short(retval)
310
+ end
311
+
312
+ #===KontoCheck::retval2dos( retval)
313
+ #=====KontoCheckRaw::retval2dos( retval)
314
+ #
315
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
316
+ #Der benutzte Zeichensatz ist cp850 (DOS).
317
+ #
318
+ def retval2dos(retval)
319
+ KontoCheckRaw::retval2dos(retval)
320
+ end
321
+
322
+ #===KontoCheck::retval2html( retval)
323
+ #=====KontoCheckRaw::retval2html( retval)
324
+ #
325
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
326
+ #Für Umlaute werden HTML-Entities benutzt.
327
+
328
+ def retval2html(retval)
329
+ KontoCheckRaw::retval2html(retval)
330
+ end
331
+
332
+ #===KontoCheck::retval2utf8( retval)
333
+ #=====KontoCheckRaw::retval2utf8( retval)
334
+ #
335
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
336
+ #Der benutzte Zeichensatz ist UTF-8.
337
+
338
+ def retval2utf8(retval)
339
+ KontoCheckRaw::retval2utf8(retval)
340
+ end
341
+
342
+ #===KontoCheck::generate_lutfile( inputfile,outputfile [,user_info [,gueltigkeit [,felder [,filialen [,set [,iban_file]]]]]])
343
+ #=====KontoCheckRaw::generate_lutfile( inputfile,outputfile [,user_info [,gueltigkeit [,felder [,filialen [,set [,iban_file]]]]]])
344
+ #
345
+ #Diese Funktion generiert eine neue LUT-Datei aus der BLZ-Datei der Deutschen Bundesbank. Die folgenden
346
+ #Parameter werden unterstützt:
347
+ #* inputfile: Eingabedatei (Textdatei) der Bundesbank
348
+ #* outputfile: Name der Ausgabedatei
349
+ #* user_info: Info-String der in die LUT-Datei geschrieben wird (frei wählbar; wird in den Info-Block aufgenommen)
350
+ #* gueltigkeit: Gültigkeit des Datensatzes im Format JJJJMMTT-JJJJMMTT. Diese Angabe wird benutzt, um festzustellen, ob ein Datensatz aktuell noch gültig ist.
351
+ #* felder: (0-9) Welche Daten aufgenommmen werden sollen (PZ steht in der folgenden Tabelle für Prüfziffer, NAME_NAME_KURZ ist ein Block, der sowohl den Namen als auch den Kurznamen der Bank enthält; dieser läßt sich besser komprimieren als wenn beide Blocks getrennt sind):
352
+ # 0. BLZ,PZ
353
+ # 1. BLZ,PZ,NAME_KURZ
354
+ # 2. BLZ,PZ,NAME_KURZ,BIC
355
+ # 3. BLZ,PZ,NAME,PLZ,ORT
356
+ # 4. BLZ,PZ,NAME,PLZ,ORT,BIC
357
+ # 5. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC
358
+ # 6. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ
359
+ # 7. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG
360
+ # 8. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG
361
+ # 9. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG,PAN,NR
362
+ #* filialen: (0 oder 1) Flag, ob nur die Daten der Hauptstellen (0) oder auch die der Filialen aufgenommen werden sollen
363
+ #* set (0, 1 oder 2): Datensatz-Nummer. Jede LUT-Datei kann zwei Datensätze enthalten. Falls bei der Initialisierung nicht ein bestimmter Datensatz ausgewählt wird, wird derjenige genommen, der (laut Gültigkeitsstring) aktuell gültig ist. Bei 0 wird eine neue LUT-Datei generiert, bei 1 oder 2 wird der entsprechende Datensatz angehängt.
364
+ #* iban_blacklist: Datei der Banken, die einer Selbstberechnung des IBAN nicht zugestimmt haben, bzw. von der IBAN-Berechnung ausgeschlossen werden sollen
365
+ #
366
+ #Mögliche Rückgabewerte:
367
+ #
368
+ # -112 (KTO_CHECK_UNSUPPORTED_COMPRESSION) "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
369
+ # -57 (LUT2_GUELTIGKEIT_SWAPPED) "Im Gültigkeitsdatum sind Anfangs- und Enddatum vertauscht"
370
+ # -56 (LUT2_INVALID_GUELTIGKEIT) "Das angegebene Gültigkeitsdatum ist ungültig (Soll: JJJJMMTT-JJJJMMTT)"
371
+ # -32 (LUT2_COMPRESS_ERROR) "Fehler beim Komprimieren eines LUT-Blocks"
372
+ # -31 (LUT2_FILE_CORRUPTED) "Die LUT-Datei ist korrumpiert"
373
+ # -30 (LUT2_NO_SLOT_FREE) "Im Inhaltsverzeichnis der LUT-Datei ist kein Slot mehr frei"
374
+ # -15 (INVALID_BLZ_FILE) "Fehler in der blz.txt Datei (falsche Zeilenlänge)"
375
+ # -11 (FILE_WRITE_ERROR) "kann Datei nicht schreiben"
376
+ # -10 (FILE_READ_ERROR) "kann Datei nicht lesen"
377
+ # -9 (ERROR_MALLOC) "kann keinen Speicher allokieren"
378
+ # -7 (INVALID_LUT_FILE) "die blz.lut Datei ist inkosistent/ungültig"
379
+ # 1 (OK) "ok"
380
+ # 7 (LUT1_FILE_GENERATED) "ok; es wurde allerdings eine LUT-Datei im alten Format (1.0/1.1) generiert"
381
+
382
+ def generate_lutfile(*args)
383
+ KontoCheckRaw::generate_lutfile(*args)
384
+ end
385
+
386
+
387
+ #===KontoCheck::rebuild_blzfile( inputfile,outputfile,set)
388
+ #=====KontoCheckRaw::rebuild_blzfile( inputfile,outputfile,set)
389
+ #
390
+ #Die Funktion rebuild_blzfile() war ursprünglich als Härtetest für die
391
+ #LUT2-Routinen konzipiert: mit ihr lässt sich die BLZ-Datei komplett aus
392
+ #einer LUT-Datei neu generieren. Die Funktion ist allerdings auch so
393
+ #interessant, so daß sie in alle Ports eingebunden wurde. Die generierte
394
+ #BLZ-Datei sollte (bis auf die Sortierung und die vier Testbanken) keinen
395
+ #Unterschied zur originalen BLZ-Datei aufweisen.
396
+ #
397
+ #Falls der Parameter set 1 oder 2 ist, wird als Eingabedatei eine LUT-
398
+ #datei erwartet; bei einem set-Parameter von 0 eine Klartextdatei
399
+ #(Bundesbankdatei).
400
+ #
401
+ #Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de>
402
+ #
403
+ #====Aufruf:
404
+ #retval=KontoCheck::rebuild_blzfile(inputname,outputname,set)
405
+ #
406
+ #====Parameter:
407
+ #
408
+ #* inputfile: Eingabedatei (LUT-Datei oder Textdatei der Deutschen Bundesbank)
409
+ #* outputfile: Name der Ausgabedatei
410
+ #* set: (0, 1 oder 2)
411
+ # 0: Die Eingabedatei ist eine Textdatei; es wird eine LUT-Datei generieret und diese wieder zurück umgewandlt.
412
+ # 1. Das erste Set der LUT-Datei wird extrahiert
413
+ # 2. Das zweite Set der LUT-Datei wird extrahiert
414
+ #
415
+ #====Rückgabe:
416
+ #Rückgabe ist ein skalarer Statuscode, der die folgenden Werte annehmen kann:
417
+ #
418
+ #====Mögliche Statuscodes:
419
+ # -112 (KTO_CHECK_UNSUPPORTED_COMPRESSION) "die notwendige Kompressions-Bibliothek wurde beim Kompilieren nicht eingebunden"
420
+ # -64 (INIT_FATAL_ERROR) "Initialisierung fehlgeschlagen (init_wait geblockt)"
421
+ # -57 (LUT2_GUELTIGKEIT_SWAPPED) "Im Gültigkeitsdatum sind Anfangs- und Enddatum vertauscht"
422
+ # -56 (LUT2_INVALID_GUELTIGKEIT) "Das angegebene Gültigkeitsdatum ist ungültig (Soll: JJJJMMTT-JJJJMMTT)"
423
+ # -38 (LUT2_PARTIAL_OK) "es wurden nicht alle Blocks geladen"
424
+ # -36 (LUT2_Z_MEM_ERROR) "Memory error in den ZLIB-Routinen"
425
+ # -35 (LUT2_Z_DATA_ERROR) "Datenfehler im komprimierten LUT-Block"
426
+ # -34 (LUT2_BLOCK_NOT_IN_FILE) "Der Block ist nicht in der LUT-Datei enthalten"
427
+ # -33 (LUT2_DECOMPRESS_ERROR) "Fehler beim Dekomprimieren eines LUT-Blocks"
428
+ # -32 (LUT2_COMPRESS_ERROR) "Fehler beim Komprimieren eines LUT-Blocks"
429
+ # -31 (LUT2_FILE_CORRUPTED) "Die LUT-Datei ist korrumpiert"
430
+ # -20 (LUT_CRC_ERROR) "Prüfsummenfehler in der blz.lut Datei"
431
+ # -15 (INVALID_BLZ_FILE) "Fehler in der blz.txt Datei (falsche Zeilenlänge)"
432
+ # -13 (FATAL_ERROR) "schwerer Fehler im Konto_check-Modul"
433
+ # -11 (FILE_WRITE_ERROR) "kann Datei nicht schreiben"
434
+ # -10 (FILE_READ_ERROR) "kann Datei nicht lesen"
435
+ # -9 (ERROR_MALLOC) "kann keinen Speicher allokieren"
436
+ # -7 (INVALID_LUT_FILE) "die blz.lut Datei ist inkosistent/ungültig"
437
+ # -6 (NO_LUT_FILE) "die blz.lut Datei wurde nicht gefunden"
438
+ # 1 (OK) "ok"
439
+
440
+ def rebuild_blzfile(*args)
441
+ KontoCheckRaw::rebuild_blzfile(*args)
442
+ end
443
+
444
+ #===KontoCheck::init( [p1 [,p2 [,set]]])
445
+ #=====KontoCheckRaw::init( [p1 [,p2 [,set]]])
446
+ #Die Variablen p1 und p2 stehen für level und lutfile (in beliebiger
447
+ #Reihenfolge); die Zuordnung der beiden Parameter erfolgt on the fly durch eine
448
+ #Typüberprüfung.
449
+ #
450
+ #Diese Funktion initialisiert die Bibliothek und lädt die gewünschten
451
+ #Datenblocks in den Speicher. Alle Argumente sind optional; in konto_check.h
452
+ #werden die Defaultwerte definiert.
453
+ #
454
+ #Die beiden ersten Parameter sind der Dateiname und der
455
+ #Initialisierungslevel. Der Dateiname ist immer als String anzugeben, der
456
+ #Initialisierungslevel immer als Zahl, ansonsten wird eine TypeError
457
+ #Exception geworfen. Auf diese Weise ist es problemlos möglich festzustellen,
458
+ #wie die Parameter p1 und p2 den Variablen lutfile und level zuzuordnen
459
+ #sind.
460
+ #
461
+ #Für die LUT-Datei ist als Defaultwert sowohl für den Pfad als auch den
462
+ #Dateinamen eine Liste möglich, die sequenziell abgearbeitet wird; diese wird
463
+ #in konto_check.h spezifiziert (Compilerzeit-Konstante der C-Bibliothek). Die
464
+ #folgenden Werte sind in der aktuellen konto_check.h definiert:
465
+ #
466
+ # DEFAULT_LUT_NAME blz.lut, blz.lut2f, blz.lut2
467
+ # DEFAULT_LUT_PATH ., /usr/local/etc/, /etc/, /usr/local/bin/, /opt/konto_check/ (für nicht-Windows-Systeme)
468
+ # DEFAULT_LUT_PATH ., C:\\, C:\\Programme\\konto_check (für Windows-Systeme)
469
+ #
470
+ #Der Defaultwert für level ist ebenfalls in konto_check.h definiert; in der
471
+ #aktuellen Version ist er 5. Bei diesem Level werden die Blocks BLZ,
472
+ #Prüfziffer, Name, Kurzname, PLZ, Ort und BIC geladen.
473
+ #
474
+ #Falls der Parameter set nicht angegeben ist, wird versucht, das aktuell
475
+ #gültige Set aus dem Systemdatum und dem Gültigkeitszeitraum der in der
476
+ #LUT-Datei gespeicherten Sets zu bestimmen.
477
+ #
478
+ #Hier noch einmal ein Überblick über die Parameter:
479
+ #
480
+ #* lutfile: die LUT-Datei, mit der initialisiert werden soll
481
+ #* level: (0-9) Welche Daten geladen werden sollen (PZ steht in der folgenden Tabelle für Prüfziffer, NAME_NAME_KURZ ist ein Block, der sowohl den Namen als auch den Kurznamen der Bank enthält; dieser läßt sich besser komprimieren als wenn beide Blocks getrennt sind):
482
+ # 0. BLZ,PZ
483
+ # 1. BLZ,PZ,NAME_KURZ
484
+ # 2. BLZ,PZ,NAME_KURZ,BIC
485
+ # 3. BLZ,PZ,NAME,PLZ,ORT
486
+ # 4. BLZ,PZ,NAME,PLZ,ORT,BIC
487
+ # 5. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC
488
+ # 6. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ
489
+ # 7. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG
490
+ # 8. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG
491
+ # 9. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG,PAN,NR
492
+ #* set (1 oder 2): Datensatz
493
+ #
494
+ #Mögliche Rückgabewerte:
495
+ #
496
+ # -112 (KTO_CHECK_UNSUPPORTED_COMPRESSION) "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
497
+ # -64 (INIT_FATAL_ERROR) "Initialisierung fehlgeschlagen (init_wait geblockt)"
498
+ # -63 (INCREMENTAL_INIT_NEEDS_INFO) "Ein inkrementelles Initialisieren benötigt einen Info-Block in der LUT-Datei"
499
+ # -62 (INCREMENTAL_INIT_FROM_DIFFERENT_FILE) "Ein inkrementelles Initialisieren mit einer anderen LUT-Datei ist nicht möglich"
500
+ # -38 (LUT2_PARTIAL_OK) "es wurden nicht alle Blocks geladen"
501
+ # -36 (LUT2_Z_MEM_ERROR) "Memory error in den ZLIB-Routinen"
502
+ # -35 (LUT2_Z_DATA_ERROR) "Datenfehler im komprimierten LUT-Block"
503
+ # -34 (LUT2_BLOCK_NOT_IN_FILE) "Der Block ist nicht in der LUT-Datei enthalten"
504
+ # -33 (LUT2_DECOMPRESS_ERROR) "Fehler beim Dekomprimieren eines LUT-Blocks"
505
+ # -31 (LUT2_FILE_CORRUPTED) "Die LUT-Datei ist korrumpiert"
506
+ # -20 (LUT_CRC_ERROR) "Prüfsummenfehler in der blz.lut Datei"
507
+ # -10 (FILE_READ_ERROR) "kann Datei nicht lesen"
508
+ # -9 (ERROR_MALLOC) "kann keinen Speicher allokieren"
509
+ # -7 (INVALID_LUT_FILE) "die blz.lut Datei ist inkosistent/ungültig"
510
+ # -6 (NO_LUT_FILE) "die blz.lut Datei wurde nicht gefunden"
511
+ #
512
+ # 1 (OK) "ok"
513
+ # 6 (LUT1_SET_LOADED) "Die Datei ist im alten LUT-Format (1.0/1.1)"
514
+ #
515
+ #Anmerkung: Falls der Statuscode LUT2_PARTIAL_OK ist, waren bei der
516
+ #Initialisierung nicht alle Blocks in der LUT-Datei enthalten.
517
+
518
+ def init(*args)
519
+ KontoCheckRaw::init(*args)
520
+ end
521
+
522
+ #===KontoCheck::lut_blocks( )
523
+ #=====KontoCheckRaw::lut_blocks1( )
524
+ #=====KontoCheckRaw::lut_blocks( mode)
525
+ #Die Funktion gibt Auskunft, ob bei der Initialisierung alle angeforderten
526
+ #Blocks der LUT-Datei geladen wurden. Die korrespondierende Funktion
527
+ #KontoCheckRaw::lut_blocks( mode) gibt noch einige weitere Infos über die
528
+ #geladenen Blocks aus.
529
+ #
530
+ #====Aufruf:
531
+ #ret=KontoCheck::lut_blocks( )
532
+ #
533
+ #====Rückgabe:
534
+ #Rückgabe ist ein skalarer Wert, der Information über den Initialisierungsprozess gibt:
535
+ #
536
+ #* -136 LUT2_BLOCKS_MISSING "ok, bei der Initialisierung konnten allerdings ein oder mehrere Blocks nicht geladen werden"
537
+ #* -40 LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
538
+ #* -9 ERROR_MALLOC "kann keinen Speicher allokieren"
539
+ #* 1 OK "ok"
540
+
541
+ def lut_blocks()
542
+ KontoCheckRaw::lut_blocks1()
543
+ end
544
+
545
+ #===KontoCheck::load_bank_data( datafile)
546
+ #=====KontoCheckRaw::load_bank_data( datafile)
547
+ #
548
+ #Diese Funktion war die alte Initialisierungsroutine für konto_check; es ist
549
+ #nun durch die Funktionen KontoCheck::init() und KontoCheck::generate_lutfile()
550
+ #ersetzt. Zur Initialisierung benutzte sie die Textdatei der Deutschen
551
+ #Bundesbank und generiertge daraus eine LUT-Datei, die dann von der
552
+ #Initialisierungsroutine der C-Bibliothek benutzt wurde.
553
+ #
554
+ #Die init() Funktion ist wesentlich schneller (7..20 mal so schnell) und hat
555
+ #eine Reihe weiterer Vorteile. So ist es z.B. möglich, zwwei Datensätze mit
556
+ #unterschiedlichem Gültigkeitszeitraum in einer Datei zu halten und den jeweils
557
+ #gültigen Satz automatisch (nach der Systemzeit) auswählen zu lassen. Die
558
+ #einzelnen Datenblocks (Bankleitzahlen, Prüfziffermethoden, PLZ, Ort...) sind
559
+ #in der LUT-Datei in jeweils unabhängigen Blocks gespeichert und können einzeln
560
+ #geladen werden; die Bankdatei von der Deutschen Bundesbank enthält alle Felder
561
+ #in einem linearen Format, so daß einzelne Blocks nicht unabhängig von anderen
562
+ #geladen werden können.
563
+ #
564
+ #Die Funktion load_bank_data() wird nur noch als ein schibbolet benutzt, um
565
+ #zu testen, ob jemand das alte Interface benutzt. Bei der Routine
566
+ #KontoCheck::konto_check() wurde die Reihenfolge der Parameter getauscht, so
567
+ #daß man in dem Falle den alten Code umstellen muß.
568
+
569
+ def load_bank_data(*args)
570
+ KontoCheckRaw::load_bank_data(*args)
571
+ end
572
+
573
+ #===KontoCheck::current_lutfile_name()
574
+ #=====KontoCheckRaw::current_lutfile_name()
575
+ #=====KontoCheck::current_lutfile_set()
576
+ #=====KontoCheck::current_init_level()
577
+ #
578
+ #Diese Funktion bestimmt den Dateinamen der zur Initialisierung benutzten LUT-Datei.
579
+
580
+ def current_lutfile_name()
581
+ KontoCheckRaw::current_lutfile_name().first
582
+ end
583
+
584
+ #===KontoCheck::current_lutfile_set()
585
+ #=====KontoCheckRaw::current_lutfile_name()
586
+ #=====KontoCheck::current_lutfile_name()
587
+ #=====KontoCheck::current_init_level()
588
+ #
589
+ #Diese Funktion bestimmt das Set der LUT-Datei, das bei der Initialisierung benutzt wurde.
590
+
591
+ def current_lutfile_set()
592
+ raw_results = KontoCheckRaw::current_lutfile_name()
593
+ raw_results[1]
594
+ end
595
+
596
+ #===KontoCheck::current_init_level()
597
+ #=====KontoCheckRaw::current_lutfile_name()
598
+ #=====KontoCheckRaw::current_lutfile_name()
599
+ #=====KontoCheck::current_lutfile_set()
600
+ #
601
+ #Diese Funktion bestimmt den aktuell benutzten Initialisierungslevel
602
+
603
+ def current_init_level()
604
+ raw_results = KontoCheckRaw::current_lutfile_name()
605
+ raw_results[2]
606
+ end
607
+
608
+ #===KontoCheck::free()
609
+ #=====KontoCheckRaw::free()
610
+ #Diese Funktion gibt allen allokierten Speicher wieder frei.
611
+
612
+ def free()
613
+ KontoCheckRaw::free()
614
+ end
615
+
616
+ #===KontoCheck::konto_check( blz,kto)
617
+ #=====KontoCheckRaw::konto_check( blz,kto)
618
+ #=====KontoCheck::valid( blz,kto)
619
+ #Test, ob eine BLZ/Konto-Kombination eine gültige Prüfziffer enthält. Die Funktion gibt einen skalaren
620
+ #Statuswert zurück, der das Ergebnis der Prüfung enthält. Mögliche Rückgabewerte sind:
621
+ #
622
+ # -69 MISSING_PARAMETER "Bei der Kontoprüfung fehlt ein notwendiger Parameter (BLZ oder Konto)"
623
+ # -40 LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
624
+ #
625
+ # -77 BAV_FALSE "BAV denkt, das Konto ist falsch (konto_check hält es für richtig)"
626
+ # -29 UNDEFINED_SUBMETHOD "Die (Unter)Methode ist nicht definiert"
627
+ # -12 INVALID_KTO_LENGTH "ein Konto muß zwischen 1 und 10 Stellen haben"
628
+ # -5 INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
629
+ # -4 INVALID_BLZ "die Bankleitzahl ist ungültig"
630
+ # -3 INVALID_KTO "das Konto ist ungültig"
631
+ # -2 NOT_IMPLEMENTED "die Methode wurde noch nicht implementiert"
632
+ # -1 NOT_DEFINED "die Methode ist nicht definiert"
633
+ # 0 FALSE "falsch"
634
+ # 1 OK "ok"
635
+ # 2 OK_NO_CHK "ok, ohne Prüfung"
636
+
637
+ def konto_check(blz,kto)
638
+ KontoCheckRaw::konto_check(blz,kto)
639
+ end
640
+
641
+ #===KontoCheck::valid( blz,kto)
642
+ #=====KontoCheck::konto_check( blz,kto)
643
+ #=====KontoCheckRaw::konto_check( blz,kto)
644
+ #Dies ist ein Alias für die Funktion KontoCheck::konto_check()
645
+
646
+ def valid(blz,kto)
647
+ KontoCheckRaw::konto_check( blz,kto)
648
+ end
649
+
650
+ #===KontoCheck::konto_check?( blz, kto)
651
+ #=====KontoCheck::konto_check( blz,kto)
652
+ #=====KontoCheckRaw::konto_check( blz,kto)
653
+ #Test, ob eine BLZ/Konto-Kombination eine gültige Prüfziffer enthält. Die
654
+ #Funktion gibt einen skalaren Statuswert zurück, der das Ergebnis der Prüfung
655
+ #enthält. Mögliche Rückgabewerte sind einfach true und false (convenience
656
+ #function für konto_check()).
657
+
658
+ def konto_check?(blz,kto)
659
+ KontoCheckRaw::konto_check(blz,kto)>0?true:false
660
+ end
661
+
662
+ #===KontoCheck::valid?( blz, kto)
663
+ #=====KontoCheck::valid( blz, kto)
664
+ #=====KontoCheckRaw::konto_check (blz, kto)
665
+ #Dies ist einn Alias für die Funktion KontoCheck::konto_check?. Mögliche Rückgabewerte sind true oder false.
666
+
667
+ def valid?(blz,kto)
668
+ KontoCheckRaw::konto_check(blz, kto)>0?true:false
669
+ end
670
+
671
+ #===KontoCheck::konto_check_pz (pz,kto [,blz])
672
+ #=====KontoCheckRaw::konto_check_pz (pz,kto [,blz])
673
+ #=====KontoCheck::valid_pz (pz,kto [,blz])
674
+ #Diese Funktion testet, ob eine gegebene Prüfziffer/Kontonummer-Kombination gültig ist.
675
+ #
676
+ #Der zusätzliche Parameter blz ist nur für die Verfahren 52, 53, B6 und C0 notwendig; bei
677
+ #diesen Verfahren geht die BLZ in die Berechnung der Prüfziffer ein. Bei allen anderen
678
+ #Prüfzifferverfahren wird er ignoriert. Wird er bei einem dieser Verfahren nicht angegeben,
679
+ #wird stattdessen eine Test-BLZ eingesetzt.
680
+ #
681
+ #Die Funktion gibt einen skalaren Statuswert zurück, der das Ergebnis der
682
+ #Prüfung enthält. Mögliche Rückgabewerte sind:
683
+ #
684
+ # -69 (MISSING_PARAMETER) "bei der Kontoprüfung fehlt ein notwendiger Parameter (BLZ oder Konto)"
685
+ # -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
686
+ #
687
+ # -77 (BAV_FALSE) "BAV denkt, das Konto ist falsch (konto_check hält es für richtig)"
688
+ # -29 (UNDEFINED_SUBMETHOD) "die (Unter)Methode ist nicht definiert"
689
+ # -12 (INVALID_KTO_LENGTH) "ein Konto muß zwischen 1 und 10 Stellen haben"
690
+ # -3 (INVALID_KTO) "das Konto ist ungültig"
691
+ # -2 (NOT_IMPLEMENTED) "die Methode wurde noch nicht implementiert"
692
+ # -1 (NOT_DEFINED) "die Methode ist nicht definiert"
693
+ # 0 (FALSE) "falsch"
694
+ # 1 (OK) "ok"
695
+ # 2 (OK_NO_CHK) "ok, ohne Prüfung"
696
+
697
+ def konto_check_pz(*args)
698
+ KontoCheckRaw::konto_check_pz(*args)
699
+ end
700
+
701
+ #===KontoCheck::konto_check_pz?( pz,kto [,blz])
702
+ #=====KontoCheckRaw::konto_check_pz (pz,kto [,blz])
703
+ #=====KontoCheck::valid_pz?( pz,kto [,blz])
704
+ #Diese Funktion testet, ob eine gegebene Prüfziffer/Kontonummer-Kombination
705
+ #gültig ist. Der Rückgabewert dieser Funktion ist true oder false (convenience
706
+ #function für KontoCheck::konto_check_pz()).
707
+ #
708
+ #Der zusätzliche Parameter blz ist nur für die Verfahren 52, 53, B6 und C0 notwendig; bei
709
+ #diesen Verfahren geht die BLZ in die Berechnung der Prüfziffer ein. Bei allen anderen
710
+ #Prüfzifferverfahren wird er ignoriert. Wird er bei einem dieser Verfahren nicht angegeben,
711
+ #wird stattdessen eine Test-BLZ eingesetzt.
712
+
713
+ def konto_check_pz?(*args)
714
+ KontoCheckRaw::konto_check_pz(*args)>0?true:false
715
+ end
716
+
717
+ #===KontoCheck::valid_pz( pz,kto [,blz])
718
+ #=====KontoCheck::konto_check_pz( pz,kto [,blz])
719
+ #=====KontoCheckRaw::konto_check_pz( pz,kto [,blz])
720
+ #Diese Funktion ist ein Alias für KontoCheck::konto_check_pz
721
+
722
+ def valid_pz(*args)
723
+ KontoCheckRaw::konto_check_pz(*args)
724
+ end
725
+
726
+ #===KontoCheck::valid_pz?( pz,kto [,blz])
727
+ #=====KontoCheck::valid_pz( pz,kto [,blz])
728
+ #=====KontoCheckRaw::konto_check_pz( pz,kto [,blz])
729
+ #Diese Funktion ist ein Alias für KontoCheck::konto_check_pz?()
730
+
731
+ def valid_pz?(*args)
732
+ KontoCheckRaw::konto_check_pz(*args)>0?true:false
733
+ end
734
+
735
+ #===KontoCheck::konto_check_regel( blz,kto)
736
+ #=====KontoCheck::konto_check_regel?( blz,kto)
737
+ #=====KontoCheckRaw::konto_check_regel( blz,kto)
738
+ #=====KontoCheckRaw::konto_check_regel_dbg( blz,kto)
739
+ #Test, ob eine BLZ/Konto-Kombination eine gültige Prüfziffer enthält. Die Funktion gibt einen skalaren
740
+ #Statuswert zurück, der das Ergebnis der Prüfung enthält. Vor dem Test werden die IBAN-Regeln angewendet,
741
+ #dadurch werden u.U. Konto und BLZ ersetzt.
742
+ #Falls nicht alle für IBAN-Berechnung notwendigen Blocks geladen sind, werden diese automatisch noch
743
+ #nachgeladen. Dadurch tauchen hier auch die Rückgabewerte für die Initialisierung auf.
744
+ #Mögliche Rückgabewerte sind:
745
+ #
746
+ # -135 FALSE_UNTERKONTO_ATTACHED "falsch, es wurde ein Unterkonto hinzugefügt (IBAN-Regel)"
747
+ # -133 BLZ_MARKED_AS_DELETED "Die BLZ ist in der Bundesbank-Datei als gelöscht markiert und somit ungültig"
748
+ # -128 IBAN_INVALID_RULE "Die BLZ passt nicht zur angegebenen IBAN-Regel"
749
+ # -127 IBAN_AMBIGUOUS_KTO "Die Kontonummer ist nicht eindeutig (es gibt mehrere Möglichkeiten)"
750
+ # -125 IBAN_RULE_UNKNOWN "Die IBAN-Regel ist nicht bekannt"
751
+ # -124 NO_IBAN_CALCULATION "Für die Bankverbindung ist keine IBAN-Berechnung erlaubt"
752
+ # -112 KTO_CHECK_UNSUPPORTED_COMPRESSION "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
753
+ # -77 BAV_FALSE "BAV denkt, das Konto ist falsch (konto_check hält es für richtig)"
754
+ # -69 MISSING_PARAMETER "Für die aufgerufene Funktion fehlt ein notwendiger Parameter"
755
+ # -64 INIT_FATAL_ERROR "Initialisierung fehlgeschlagen (init_wait geblockt)"
756
+ # -63 INCREMENTAL_INIT_NEEDS_INFO "Ein inkrementelles Initialisieren benötigt einen Info-Block in der LUT-Datei"
757
+ # -62 INCREMENTAL_INIT_FROM_DIFFERENT_FILE "Ein inkrementelles Initialisieren mit einer anderen LUT-Datei ist nicht möglich"
758
+ # -40 LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
759
+ # -38 LUT2_PARTIAL_OK "es wurden nicht alle Blocks geladen"
760
+ # -36 LUT2_Z_MEM_ERROR "Memory error in den ZLIB-Routinen"
761
+ # -35 LUT2_Z_DATA_ERROR "Datenfehler im komprimierten LUT-Block"
762
+ # -34 LUT2_BLOCK_NOT_IN_FILE "Der Block ist nicht in der LUT-Datei enthalten"
763
+ # -33 LUT2_DECOMPRESS_ERROR "Fehler beim Dekomprimieren eines LUT-Blocks"
764
+ # -31 LUT2_FILE_CORRUPTED "Die LUT-Datei ist korrumpiert"
765
+ # -29 UNDEFINED_SUBMETHOD "Die (Unter)Methode ist nicht definiert"
766
+ # -20 LUT_CRC_ERROR "Prüfsummenfehler in der blz.lut Datei"
767
+ # -12 INVALID_KTO_LENGTH "ein Konto muß zwischen 1 und 10 Stellen haben"
768
+ # -10 FILE_READ_ERROR "kann Datei nicht lesen"
769
+ # -9 ERROR_MALLOC "kann keinen Speicher allokieren"
770
+ # -7 INVALID_LUT_FILE "die blz.lut Datei ist inkosistent/ungültig"
771
+ # -6 NO_LUT_FILE "die blz.lut Datei wurde nicht gefunden"
772
+ # -5 INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
773
+ # -4 INVALID_BLZ "die Bankleitzahl ist ungültig"
774
+ # -3 INVALID_KTO "das Konto ist ungültig"
775
+ # -2 NOT_IMPLEMENTED "die Methode wurde noch nicht implementiert"
776
+ # -1 NOT_DEFINED "die Methode ist nicht definiert"
777
+ # 0 FALSE "falsch"
778
+ # 1 OK "ok"
779
+ # 1 OK "ok"
780
+ # 2 OK_NO_CHK "ok, ohne Prüfung"
781
+ # 6 LUT1_SET_LOADED "Die Datei ist im alten LUT-Format (1.0/1.1)"
782
+ # 18 OK_KTO_REPLACED "ok, die Kontonummer wurde allerdings ersetzt"
783
+ # 21 OK_IBAN_WITHOUT_KC_TEST "ok, die Bankverbindung ist (ohne Test) als richtig anzusehen"
784
+ # 25 OK_UNTERKONTO_ATTACHED "ok, es wurde ein (weggelassenes) Unterkonto angefügt"
785
+
786
+ def konto_check_regel(blz,kto)
787
+ KontoCheckRaw::konto_check_regel(blz,kto)
788
+ end
789
+
790
+ #===KontoCheck::konto_check_regel?( blz,kto)
791
+ #=====KontoCheck::konto_check_regel( blz,kto)
792
+ #=====KontoCheckRaw::konto_check_regel( blz,kto)
793
+ #=====KontoCheckRaw::konto_check_regel_dbg( blz,kto)
794
+ #Diese Funktion testet, ob eine gegebene Prüfziffer/Kontonummer-Kombination
795
+ #gültig ist (mit IBAN-Regeln). Der Rückgabewert dieser Funktion ist nur true
796
+ #oder false (convenience function für KontoCheck::konto_check_regel()).
797
+
798
+ def konto_check_regel?(*args)
799
+ KontoCheckRaw::konto_check_regel(*args)>0?true:false
800
+ end
801
+
802
+ #==== KontoCheck::bank_valid( blz [,filiale])
803
+ #======KontoCheckRaw::bank_valid( blz [,filiale])
804
+ #======KontoCheck::bank_valid?( blz [,filiale])
805
+ #Diese Funktion testet, ob eine gegebene BLZ gültig ist. Der Rückgabewert ist ein
806
+ #Statuscode mit den unten angegebenen Werten. Falls das Argument filiale auch
807
+ #angegeben ist, wird zusätzlich noch getestet, ob eine Filiale mit dem gegebenen
808
+ #Index existiert.
809
+ #
810
+ #Mögliche Rückgabewerte sind:
811
+ #
812
+ # -55 (LUT2_INDEX_OUT_OF_RANGE) "Der Index für die Filiale ist ungültig"
813
+ # -53 (LUT2_BLZ_NOT_INITIALIZED) "Das Feld BLZ wurde nicht initialisiert"
814
+ # -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
815
+ # -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
816
+ # 1 (OK) "ok"
817
+
818
+ def bank_valid(*args)
819
+ KontoCheckRaw::bank_valid(*args)
820
+ end
821
+
822
+ #====KontoCheck::bank_valid?( blz [,filiale])
823
+ #======KontoCheckRaw::bank_valid( blz [,filiale])
824
+ #======KontoCheck::bank_valid( blz [,filiale])
825
+ #Dies ist eine convenience function zu KontoCheck::bank_valid(). Es wird getestet, ob
826
+ #die gegebene BLZ (und evl. noch der Filialindex) gültig ist. Der Rückgabewert ist
827
+ #nur true oder false.
828
+
829
+ def bank_valid?(*args)
830
+ KontoCheckRaw::bank_valid(*args)>0?true:false
831
+ end
832
+
833
+ #===KontoCheck::bank_filialen( blz)
834
+ #=====KontoCheckRaw::bank_filialen(blz)
835
+ #
836
+ #Diese Funktion liefert die Anzahl Filialen einer Bank (inklusive Hauptstelle).
837
+ #Die LUT-Datei muß dazu natürlich mit den Filialdaten generiert sein, sonst
838
+ #wird für alle Banken nur 1 zurückgegeben.
839
+
840
+ def bank_filialen(*args)
841
+ KontoCheckRaw::bank_filialen(*args).first
842
+ end
843
+
844
+ #===KontoCheck::bank_name( blz [,filiale])
845
+ #=====KontoCheckRaw::bank_name(blz [,filiale])
846
+ #
847
+ #Diese Funktion liefert den Namen einer Bank, oder nil im Fehlerfall.
848
+
849
+ def bank_name(*args)
850
+ KontoCheckRaw::bank_name(*args).first
851
+ end
852
+
853
+ #===KontoCheck::bank_name_kurz( blz [,filiale])
854
+ #=====KontoCheckRaw::bank_name_kurz(blz [,filiale])
855
+ #
856
+ #Diese Funktion liefert den Kurznamen einer Bank, oder nil im Fehlerfall.
857
+
858
+ def bank_name_kurz(*args)
859
+ KontoCheckRaw::bank_name_kurz(*args).first
860
+ end
861
+
862
+ #===KontoCheck::bank_ort( blz [,filiale])
863
+ #=====KontoCheckRaw::bank_ort(blz [,filiale])
864
+ #
865
+ #Diese Funktion liefert den Ort einer Bank. Falls der Parameter filiale nicht
866
+ #angegeben ist, wird der Sitz der Hauptstelle ausgegeben. Im Fehlerfall wird
867
+ #für den Ort nil zurückgegeben.
868
+
869
+ def bank_ort(*args)
870
+ KontoCheckRaw::bank_ort(*args).first
871
+ end
872
+
873
+ #===KontoCheck::bank_plz( blz [,filiale])
874
+ #=====KontoCheckRaw::bank_plz(blz [,filiale])
875
+ #
876
+ #Diese Funktion liefert die Postleitzahl einer Bank. Falls der Parameter
877
+ #filiale nicht angegeben ist, wird die PLZ der Hauptstelle ausgegeben. Im
878
+ #Fehlerfall wird für die PLZ nil zurückgegeben.
879
+
880
+ def bank_plz(*args)
881
+ KontoCheckRaw::bank_plz(*args).first
882
+ end
883
+
884
+ #===KontoCheck::bank_pz( blz)
885
+ #=====KontoCheckRaw::bank_pz(blz)
886
+ #
887
+ #Diese Funktion liefert die Prüfziffer einer Bank. Die Funktion unterstützt
888
+ #keine Filialen; zu jeder BLZ kann es in der LUT-Datei nur eine
889
+ #Prüfziffermethode geben.
890
+
891
+ def bank_pz(blz)
892
+ KontoCheckRaw::bank_pz(blz).first
893
+ end
894
+
895
+ #===KontoCheck::bank_bic( blz [,filiale])
896
+ #=====KontoCheckRaw::bank_bic(blz [,filiale])
897
+ #
898
+ #Diese Funktion liefert den BIC (Bank Identifier Code) einer Bank. Im
899
+ #Fehlerfall wird nil zurückgegeben.
900
+
901
+ def bank_bic(*args)
902
+ KontoCheckRaw::bank_bic(*args).first
903
+ end
904
+
905
+ #===KontoCheck::bank_aenderung( blz [,filiale])
906
+ #=====KontoCheckRaw::bank_aenderung(blz [,filiale])
907
+ #
908
+ #Diese Funktion liefert das 'Änderung' Flag einer Bank (als string). Mögliche
909
+ #Werte sind: A (Addition), M (Modified), U (Unchanged), D (Deletion).
910
+
911
+ def bank_aenderung(*args)
912
+ KontoCheckRaw::bank_aenderung(*args).first
913
+ end
914
+
915
+ #===KontoCheck::bank_loeschung( blz [,filiale])
916
+ #=====KontoCheckRaw::bank_loeschung(blz [,filiale])
917
+ #
918
+ #Diese Funktion liefert das Lösch-Flag für eine Bank zurück (als Integer;
919
+ #mögliche Werte sind 0 und 1); im Fehlerfall wird nil zurückgegeben.
920
+
921
+ def bank_loeschung(*args)
922
+ KontoCheckRaw::bank_loeschung(*args).first
923
+ end
924
+
925
+ #===KontoCheck::bank_nachfolge_blz( blz [,filiale])
926
+ #=====KontoCheckRaw::bank_nachfolge_blz(blz [,filiale])
927
+ #Diese Funktion liefert die Nachfolge-BLZ für eine Bank, die gelöscht werden
928
+ #soll (bei der das 'Löschung' Flag 1 ist).
929
+
930
+ def bank_nachfolge_blz(*args)
931
+ KontoCheckRaw::bank_nachfolge_blz(*args).first
932
+ end
933
+
934
+ #===KontoCheck::bank_pan( blz [,filiale])
935
+ #=====KontoCheckRaw::bank_pan(blz [,filiale])
936
+ #
937
+ #Diese Funktion liefert den PAN (Primary Account Number) einer Bank.
938
+
939
+ def bank_pan(*args)
940
+ KontoCheckRaw::bank_pan(*args).first
941
+ end
942
+
943
+ #===KontoCheck::bank_nr( blz [,filiale])
944
+ #=====KontoCheckRaw::bank_nr(blz [,filiale])
945
+ #
946
+ #Diese Funktion liefert die laufende Nummer einer Bank (internes Feld der BLZ-Datei). Der Wert
947
+ #wird wahrscheinlich nicht oft benötigt, ist aber der Vollständigkeit halber enthalten.
948
+
949
+ def bank_nr(*args)
950
+ KontoCheckRaw::bank_nr(*args).first
951
+ end
952
+
953
+ #===KontoCheck::bank_alles( blz [,filiale])
954
+ #=====KontoCheckRaw::bank_alles(blz [,filiale])
955
+ #
956
+ #Dies ist eine Mammutfunktion, die alle vorhandenen Informationen über eine
957
+ #Bank zurückliefert. Das Ergebnis ist ein Array mit den folgenden Komponenten:
958
+ # 0: Statuscode
959
+ # 1: Anzahl Filialen
960
+ # 2: Name
961
+ # 3: Kurzname
962
+ # 4: PLZ
963
+ # 5: Ort
964
+ # 6: PAN
965
+ # 7: BIC
966
+ # 8: Prüfziffer
967
+ # 9: Laufende Nr.
968
+ # 10: Änderungs-Flag
969
+ # 11: Löeschung-Flag
970
+ # 12: Nachfolge-BLZ
971
+ #
972
+ #Der Statuscode (Element 0) kann folgende Werte annehmen:
973
+ #
974
+ # -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
975
+ # -38 (LUT2_PARTIAL_OK) "es wurden nicht alle Blocks geladen"
976
+ # -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
977
+ # -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
978
+ # 1 (OK) "ok"
979
+ #
980
+ #Anmerkung: Falls der Statuscode LUT2_PARTIAL_OK ist, wurden bei der
981
+ #Initialisierung nicht alle Blocks geladen (oder es sind nicht alle verfügbar);
982
+ #die entsprechenden Elemente haben dann den Wert nil.
983
+
984
+ def bank_alles(*args)
985
+ KontoCheckRaw::bank_alles(*args)
986
+ end
987
+
988
+ #===KontoCheck::iban2bic( iban)
989
+ #=====KontoCheckRaw::iban2bic(iban)
990
+ #
991
+ #Diese Funktion bestimmt zu einer (deutschen!) IBAN den zugehörigen BIC (Bank
992
+ #Identifier Code). Der BIC wird für eine EU-Standard-Überweisung im
993
+ #SEPA-Verfahren (Single Euro Payments Area) benötigt; für die deutschen Banken
994
+ #ist er in der BLZ-Datei enthalten. Nähere Infos gibt es z.B. unter
995
+ #http://www.bic-code.de/ .
996
+
997
+ def iban2bic(*args)
998
+ KontoCheckRaw::iban2bic(*args).first
999
+ end
1000
+
1001
+ #===KontoCheck::ci_check( ci)
1002
+ #=====KontoCheckRaw::ci_check( ci)
1003
+ #
1004
+ #Diese Funktion testet eine Gläubiger-Identifikationsnummer (Credit Identifier, ci)
1005
+ #
1006
+ #Mögliche Rückgabewerte sind:
1007
+ #
1008
+ # -146 (INVALID_PARAMETER_TYPE) "Falscher Parametertyp für die Funktion"
1009
+ # 0 (FALSE) "falsch"
1010
+ # 1 (OK) "ok"
1011
+
1012
+ def ci_check(*args)
1013
+ KontoCheckRaw::ci_check(*args)
1014
+ end
1015
+
1016
+ #===KontoCheck::bic_check( bic)
1017
+ #=====KontoCheckRaw::bic_check( bic)
1018
+ #
1019
+ #Diese Funktion testet die Existenz eines (deutschen) BIC. Die Rückgabe ist ein
1020
+ #skalarer Wert, der das Testergebnis für den BIC angibt. Der BIC muß mit genau
1021
+ #8 oder 11 Stellen angegeben werden. Intern wird dabei die Funktion
1022
+ #lut_suche_bic() verwendet.
1023
+ #
1024
+ #Die Funktion arbeitet nur für deutsche Banken, da für andere keine Infos
1025
+ #vorliegen.
1026
+ #
1027
+ #Mögliche Rückgabewerte sind:
1028
+ #
1029
+ # -146 (INVALID_PARAMETER_TYPE) "Falscher Parametertyp für die Funktion"
1030
+ # -145 (BIC_ONLY_GERMAN) "Es werden nur deutsche BICs unterstützt"
1031
+ # -144 (INVALID_BIC_LENGTH) "Die Länge des BIC muß genau 8 oder 11 Zeichen sein"
1032
+ # 0 (FALSE) "falsch"
1033
+ # 1 (OK) "ok"
1034
+
1035
+ def bic_check(*args)
1036
+ KontoCheckRaw::bic_check(*args).first
1037
+ end
1038
+
1039
+ #===KontoCheck::iban_check( iban)
1040
+ #=====KontoCheckRaw::iban_check( iban)
1041
+ #
1042
+ #Diese Funktion testet einen IBAN. Dabei wird sowohl die Prüfziffer des IBAN
1043
+ #getestet als auch (bei deutschen Konten) die Prüfziffer der Bankverbindung
1044
+ #(aus der Kontonummer). Diese Funktion gibt nur den globalen Status zurück;
1045
+ #bei der Funktion KontoCheckRaw::iban_check() kann man zusätzlich noch den
1046
+ #Status der Kontenprüfung abfragen.
1047
+ #
1048
+ #Mögliche Rückgabewerte sind:
1049
+ #
1050
+ # -67 (IBAN_OK_KTO_NOT) "Die Prüfziffer der IBAN stimmt, die der Kontonummer nicht"
1051
+ # -66 (KTO_OK_IBAN_NOT) "Die Prüfziffer der Kontonummer stimmt, die der IBAN nicht"
1052
+ # 0 (FALSE) "falsch"
1053
+ # 1 (OK) "ok"
1054
+
1055
+ def iban_check(*args)
1056
+ KontoCheckRaw::iban_check(*args).first
1057
+ end
1058
+
1059
+ #===KontoCheck::iban_gen( kto,blz)
1060
+ #=====KontoCheckRaw::iban_gen( kto,blz)
1061
+ #Diese Funktion generiert aus (deutscher) BLZ und Konto einen IBAN.
1062
+ #
1063
+ #Nachdem im Mai 2013 die IBAN-Regeln zur Berechnung von IBAN und BIC aus
1064
+ #Kontonummer und BLZ veröffentlicht wurden, gibt es endlich ein verbindliches
1065
+ #Verfahren zur Bestimmung der IBAN. Die definierten IBAN-Regeln wurden in der
1066
+ #C-Datei eingearbeitet und werden automatisch ausgewertet, falls der Block mit
1067
+ #den IBAN-Regeln in der LUT-Datei enthalten ist. Andere LUT-Dateien sollten
1068
+ #für die IBAN-Berechnung möglichst nicht verwendet werden, da die Anzahl der
1069
+ #BLZs mit Sonderregelungen doch sehr groß ist.
1070
+ #
1071
+ #Es ist möglich, sowohl die Prüfung auf Stimmigkeit der Kontonummer als auch
1072
+ #die "schwarze Liste" (ausgeschlossene BLZs) zu deaktivieren. Falls die IBAN
1073
+ #ohne Test der Blacklist berechnet werden soll, ist vor die BLZ ein @ zu
1074
+ #setzen; falls auch bei falscher Bankverbindung ein IBAN berechnet werden
1075
+ #soll, ist vor die BLZ ein + zu setzen. Um beide Prüfungen zu deaktiviern,
1076
+ #kann @+ (oder +@) vor die BLZ gesetzt werden. Die so erhaltenen IBANs sind
1077
+ #dann u.U. allerdings wohl nicht gültig.
1078
+ #
1079
+ #Rückgabewert ist der generierte IBAN oder nil, falls ein Fehler aufgetreten
1080
+ #ist. Die genauere Fehlerursache läßt sich mit der Funktion
1081
+ #KontoCheckRaw::iban_gen() feststellen.
1082
+ #
1083
+ #Bei vielen Banken wird die BLZ und damit der BIC ebenfalls ersetzt. Der
1084
+ #gültige BIC sowie viele andere Werte interessante Werte lassen sich durch die
1085
+ #Funktion KontoCheckRaw::iban_gen() ermitteln.
1086
+
1087
+ def iban_gen(*args)
1088
+ KontoCheckRaw::iban_gen(*args).first
1089
+ end
1090
+
1091
+ #===KontoCheck::ipi_gen( zweck)
1092
+ #=====KontoCheckRaw::ipi_gen( zweck)
1093
+ #
1094
+ #Diese Funktion generiert einen "Strukturierten Verwendungszweck" für SEPA-Überweisungen.
1095
+ #Der Rückgabewert ist der Strukturierte Verwendungszweck als String oder nil, falls ein Fehler
1096
+ #aufgetreten ist.
1097
+ #
1098
+ #Der String für den Strukturierten Verwendungszweck darf maximal 18 Byte lang sein und nur
1099
+ #alphanumerische Zeichen enthalten (also auch keine Umlaute). Die Funktion KontoCheckRaw::ipi_gen()
1100
+ #gibt einen Statuscode zurück, der etwas nähere Infos im Fehlerfall enthält.
1101
+
1102
+ def ipi_gen(zweck)
1103
+ KontoCheckRaw::ipi_gen(zweck).first
1104
+ end
1105
+
1106
+ #===KontoCheck::ipi_check( zweck)
1107
+ #=====KontoCheckRaw::ipi_check( zweck)
1108
+ #
1109
+ #Die Funktion testet, ob ein Strukturierter Verwendungszweck gültig ist (Anzahl Zeichen, Prüfziffer). Der
1110
+ #Rückgabewert ist true oder false.
1111
+
1112
+ def ipi_check(zweck)
1113
+ KontoCheckRaw::ipi_check(zweck)>0?true:false
1114
+ end
1115
+
1116
+ #===KontoCheck::suche()
1117
+ #=====KontoCheck::search()
1118
+ #=====KontoCheck::SEARCH_KEYS
1119
+ #=====KontoCheck::SEARCH_KEY_MAPPINGS
1120
+ #=====KontoCheckRaw::bank_suche_bic(search_bic)
1121
+ #=====KontoCheckRaw::bank_suche_blz(blz1 [,blz2])
1122
+ #=====KontoCheckRaw::bank_suche_namen(name)
1123
+ #=====KontoCheckRaw::bank_suche_namen_kurz(short_name)
1124
+ #=====KontoCheckRaw::bank_suche_plz(plz1 [,plz2])
1125
+ #=====KontoCheckRaw::bank_suche_pz(pz1 [,pz2])
1126
+ #=====KontoCheckRaw::bank_suche_ort(suchort)
1127
+ #=====KontoCheckRaw::bank_suche_regel(regel1 [,regel2])
1128
+ #=====KontoCheckRaw::bank_suche_volltext(suchwort)
1129
+ #=====KontoCheckRaw::bank_suche_multiple(suchworte)
1130
+ #
1131
+ #Diese Funktion sucht alle Banken, die auf bestimmte Suchmuster passen.
1132
+ #Mit dem Schlüssel multiple ist auch eine Suche nach mehreren Kriterien
1133
+ #möglich; näheres findet sich in der Beschreibung von
1134
+ #KontoCheckRaw::bank_suche_multiple().
1135
+ #
1136
+ #Eine Suche ist möglich nach den Schlüsseln BIC, Bankleitzahl, Postleitzahl,
1137
+ #Prüfziffer, Ort, Name oder Kurzname oder Volltext. Bei den alphanumerischen
1138
+ #Feldern (BIC, Ort, Name, Kurzname) ist der Suchschlüssel der Wortanfang des zu
1139
+ #suchenden Feldes (ohne Unterscheidung zwischen Groß- und Kleinschreibung); bei
1140
+ #den numerischen Feldern (BLZ, PLZ, Prüfziffer) ist die Suche nach einem
1141
+ #bestimmten Wert oder nach einem Wertebereich möglich; dieser wird dann
1142
+ #angegeben als Array mit zwei Elementen. Der Rückgabewert ist jeweils ein Array
1143
+ #mit den Bankleitzahlen, oder nil falls die Suche fehlschlug. Die Ursache für
1144
+ #eine fehlgeschlagene Suche läßt sich nur mit den Funktionen der KontoCheckRaw
1145
+ #Bibliothek näher lokalisieren.
1146
+ #
1147
+ #Die Funktion KontoCheck::search() ist ein Alias für die Funktion
1148
+ #KontoCheck::suche().
1149
+ #
1150
+ #Die möglichen Suchschlüssel sind in den Variablen KontoCheck::SEARCH_KEYS
1151
+ #definiert; in der Variablen KontoCheck::SEARCH_KEY_MAPPINGS finden sich noch
1152
+ #einige Aliasdefinitionen zu den Suchschlüsseln.
1153
+ #
1154
+ #Für das Suchkommando von KontoCheckRaw::bank_suche_multiple() gibt es die Alias-
1155
+ #Varianten cmd, such_cmd und search_cmd.
1156
+ #
1157
+ #Bei allen Suchfeldern wird noch die Option :uniq=>[01] unterstützt. Bei uniq==0
1158
+ #werden alle gefundenen Zweigstellen ausgegeben, bei uniq==1 nur jeweils die
1159
+ #erste gefundene Zweigstelle. Das Schlüsselwort ist in allen Suchfunktionen
1160
+ #vorhanden; in der C-Bibliothek ist es nur für lut_suche_multiple() implementiert.
1161
+ #
1162
+ #Hier einige Beispiele möglicher Suchaufrufe:
1163
+ #
1164
+ # s=KontoCheck::suche( :blz => [13051172,13070172] ) BLZ-Bereich
1165
+ # s=KontoCheck::suche( :blz => [13051172,13070172,333] ) überzählige Array-Elemente werden ignoriert
1166
+ # s=KontoCheck::suche( :bic => 'genodef1wi' ) BIC Teilstring
1167
+ # s=KontoCheck::suche( :plz => [68100,68200] ) PLZ-Bereich
1168
+ # s=KontoCheck::suche( :pz => 90 ) Prüfziffer numerisch
1169
+ # s=KontoCheck::suche( :pz => '90' ) Prüfziffer als String
1170
+ # s=KontoCheck::suche( :pz => ['95',98] ) Prüfzifferbereich gemischt String/numerisch auch möglich
1171
+ # s=KontoCheck::suche( :regel => [20,25] ) IBAN-Regeln
1172
+ # s=KontoCheck::suche( :name => 'postbank' )
1173
+ # s=KontoCheck::suche( :ort => 'lingenfeld' )
1174
+ # r=KontoCheck::suche( :volltext=>'südwest',:uniq=>1) Volltextsuche mit uniq
1175
+ # s=KontoCheck::suche( :multiple=>'deutsche bank mannheim y:sparda x:südwest',:uniq=>1, :cmd=>'ac+xy')
1176
+ # Suche nach mehreren Kriterien: Deutsche Bank in Mannheim oder Sparda Südwest
1177
+ # r=KontoCheck::suche( :multiple=>'deutsche bank mannheim sparda mainz', :cmd=>'abc+de')
1178
+ # nochmal dasselbe, nur Sparda in Mainz
1179
+
1180
+
1181
+ def suche(options={})
1182
+ search_cmd=value=key=""
1183
+ sort=uniq=1
1184
+ options.each{ |k,v|
1185
+ uniq=v if k.to_s=="uniq"
1186
+ sort=v if k.to_s=="sort"
1187
+ search_cmd=v if k.to_s=="such_cmd" or k.to_s=="search_cmd" or k.to_s=="cmd"
1188
+ if SEARCH_KEYS.include?(k)
1189
+ key=k
1190
+ value=options[k]
1191
+ end
1192
+ if SEARCH_KEY_MAPPINGS.keys.include?(k)
1193
+ key=SEARCH_KEY_MAPPINGS[k]
1194
+ value=options[k]
1195
+ end
1196
+ }
1197
+ raise 'no valid search key found' if key.length==0
1198
+ uniq=2 if uniq>0 # sortieren und uniq
1199
+ uniq=1 if sort>0 && uniq==0 # nur sortieren
1200
+ raw_results = KontoCheckRaw::send("bank_suche_#{key}",value,search_cmd,uniq)
1201
+ raw_results[1]
1202
+ end
1203
+ alias_method :search, :suche
1204
+
1205
+ #===KontoCheck::bank_suche_bic( search_bic [,sort_uniq [,sort]])
1206
+ #=====KontoCheckRaw::bank_suche_bic( search_bic [,sort_uniq [,sort]])
1207
+ #=====KontoCheck::suche()
1208
+ #
1209
+ #Diese Funktion sucht alle Banken, deren BIC mit dem angegebenen Wert <search_bic> beginnen.
1210
+ #Die Rückgabe ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1211
+
1212
+ def bank_suche_bic(*args)
1213
+ KontoCheckRaw::bank_suche_bic(*args)[1]
1214
+ end
1215
+
1216
+
1217
+ #===KontoCheck::bank_suche_namen( name [,sort_uniq [,sort]])
1218
+ #===KontoCheckRaw::bank_suche_namen( name [,sort_uniq [,sort]])
1219
+ #=====KontoCheck::suche()
1220
+ #
1221
+ #Diese Funktion sucht alle Banken, deren Namen mit dem angegebenen Wert <name> beginnen.
1222
+ #Die Rückgabe ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1223
+
1224
+ def bank_suche_namen(*args)
1225
+ KontoCheckRaw::bank_suche_namen(*args)[1]
1226
+ end
1227
+
1228
+
1229
+ #===KontoCheck::bank_suche_namen_kurz( name [,sort_uniq [,sort]])
1230
+ #===KontoCheckRaw::bank_suche_namen_kurz( name [,sort_uniq [,sort]])
1231
+ #=====KontoCheck::suche()
1232
+ #
1233
+ #Diese Funktion sucht alle Banken, deren Kurznamen mit dem angegebenen Wert <name> beginnen.
1234
+ #Die Rückgabe ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1235
+
1236
+ def bank_suche_namen_kurz(*args)
1237
+ KontoCheckRaw::bank_suche_namen_kurz(*args)[1]
1238
+ end
1239
+
1240
+
1241
+ #===KontoCheck::bank_suche_ort( ort [,sort_uniq [,sort]])
1242
+ #===KontoCheckRaw::bank_suche_ort( ort [,sort_uniq [,sort]])
1243
+ #=====KontoCheck::suche()
1244
+ #
1245
+ #Diese Funktion sucht alle Banken, deren Sitz mit dem angegebenen Wert <ort> beginnen.
1246
+ #Die Rückgabe ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1247
+
1248
+ def bank_suche_ort(*args)
1249
+ KontoCheckRaw::bank_suche_ort(*args)[1]
1250
+ end
1251
+
1252
+
1253
+ #===KontoCheck::bank_suche_blz( blz1 [,blz2 [,sort_uniq [,sort]]])
1254
+ #=====KontoCheckRaw::bank_suche_blz( blz1 [,blz2 [,sort_uniq [,sort]]])
1255
+ #=====KontoCheck::suche()
1256
+ #
1257
+ #Diese Funktion sucht alle Banken, deren BLZ gleich <blz1> ist oder (bei
1258
+ #Angabe von blz2) die im Bereich zwischen <blz1> und <blz2> liegen. Die
1259
+ #Rückgabe ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1260
+
1261
+ def bank_suche_blz(*args)
1262
+ KontoCheckRaw::bank_suche_blz(*args)[1]
1263
+ end
1264
+
1265
+
1266
+ #===KontoCheck::bank_suche_plz( plz1 [,plz2 [,sort_uniq [,sort]]])
1267
+ #=====KontoCheckRaw::bank_suche_plz( plz1 [,plz2 [,sort_uniq [,sort]]])
1268
+ #=====KontoCheck::suche()
1269
+ #
1270
+ #Diese Funktion sucht alle Banken, deren PLZ gleich <plz1> ist oder (bei
1271
+ #Angabe von plz2) die im Bereich zwischen <plz1> und <plz2> liegen. Die
1272
+ #Rückgabe ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1273
+
1274
+ def bank_suche_plz(*args)
1275
+ KontoCheckRaw::bank_suche_plz(*args)[1]
1276
+ end
1277
+
1278
+
1279
+ #===KontoCheck::bank_suche_pz( pz1 [,pz2 [,sort_uniq [,sort]]])
1280
+ #=====KontoCheckRaw::bank_suche_pz( pz1 [,pz2 [,sort_uniq [,sort]]])
1281
+ #=====KontoCheck::suche()
1282
+ #
1283
+ #Diese Funktion sucht alle Banken, deren Prüfziffer gleich <pz1> ist oder (bei
1284
+ #Angabe von pz2) die im Bereich zwischen <pz1> und <pz2> liegen. Die Rückgabe
1285
+ #ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1286
+
1287
+ def bank_suche_pz(*args)
1288
+ KontoCheckRaw::bank_suche_pl(*args)[1]
1289
+ end
1290
+
1291
+
1292
+ #===KontoCheck::bank_suche_regel( regel1 [,regel2 [,sort_uniq [,sort]]])
1293
+ #=====KontoCheckRaw::bank_suche_regel( regel1 [,regel2 [,sort_uniq [,sort]]])
1294
+ #=====KontoCheck::suche()
1295
+ #
1296
+ #Diese Funktion sucht alle Banken, deren IBAN-Regel gleich <regel1> ist oder (bei
1297
+ #Angabe von regel2) die im Bereich zwischen <regel1> und <regel2> liegen. Die Rückgabe
1298
+ #ist ein Array mit den Bankleitzahlen, die auf das Suchmuster passen.
1299
+
1300
+ def bank_suche_regel(*args)
1301
+ KontoCheckRaw::bank_suche_regel(*args)[1]
1302
+ end
1303
+
1304
+
1305
+ #===KontoCheck::bank_suche_volltext( suchwort [,sort_uniq [,sort]])
1306
+ #=====KontoCheckRaw::bank_suche_volltext( suchwort [,sort_uniq [,sort]])
1307
+ #=====KontoCheck::suche()
1308
+ #
1309
+ #Diese Funktion sucht alle Banken, bei denen in Name, Kurzname oder Ort das
1310
+ #angegebenen Wort <suchwort> vorkommt. Dabei wird immer nur ein einziges Wort
1311
+ #gesucht; mehrere Worte führen zu einer Fehlermeldung in der KontoCheckRaw-
1312
+ #Bibliothek. Eine solche Suche läßt sich durch die Funktion
1313
+ #KontoCheck::bank_suche_multiple( ) bewerkstelligen. Die Rückgabe ist ein Array
1314
+ #mit den Bankleitzahlen, die auf das Suchmuster passen.
1315
+
1316
+ def bank_suche_volltext(*args)
1317
+ KontoCheckRaw::bank_suche_volltext(*args)[1]
1318
+ end
1319
+
1320
+
1321
+ #===KontoCheck::bank_suche_multiple( suchtext [,such_cmd] [,uniq])
1322
+ #===KontoCheckRaw::bank_suche_multiple( suchtext [,such_cmd] [,uniq])
1323
+ #=====KontoCheck::suche()
1324
+ #
1325
+ #Diese Funktion sucht alle Banken, die mehreren Kriterien entsprechen. Dabei
1326
+ #können bis zu 26 Teilsuchen definiert werden, die beliebig miteinander
1327
+ #verknüpft werden können (additiv, subtraktiv und multiplikativ). Eine nähere
1328
+ #Beschreibung der Funktion und der Parameter findet sich unter
1329
+ #KontoCheckRaw::bank_suche_multiple( ). Die Rückgabe ist ein Array
1330
+ #mit den Bankleitzahlen, die auf das Suchmuster passen.
1331
+
1332
+ #
1333
+ #====Aufruf:
1334
+ #result=bank_suche_multiple(such_string [,such_cmd] [,uniq])
1335
+
1336
+ def bank_suche_multiple(*args)
1337
+ KontoCheckRaw::bank_suche_multiple(*args)[1]
1338
+ end
1339
+
1340
+
1341
+ #===KontoCheck::scl_init([lutname])
1342
+ #=====KontoCheckRaw::scl_init([lutname})
1343
+ #
1344
+ #Mit den scl_* Funktionen können für einen gegebenen BIC oder eine BLZ die
1345
+ #Einträge des SCL-Verzeichnisses bestimmt werden. Falls die _blz() Version der
1346
+ #Funktionen verwendet wird, muß die Bibliothek mittels KontoCheck::init *und*
1347
+ #KontoCheck::scl_init initialisiert werden, um sowohl die Kontodaten als auch die
1348
+ #Daten des SCL-Verzeichnisses einzulesen.
1349
+ #
1350
+ #Die Funktion scl_init liest die SCL-Blocks aus einer LUT-Datei und initialisiert
1351
+ #die zugehörigen internen Datenstrukturen.initialisiert SCL-Datenstrukturen.
1352
+ #Falls der Parameter lut_name nicht angegeben ist, wird die LUT-Datei benutzt,
1353
+ #mit der die Bibliothek mittels KontoCheck::init initialisiert wurde.
1354
+ #
1355
+ #====Aufruf:
1356
+ #ret=KontoCheckRaw::scl_init([lutname])
1357
+ #
1358
+ #====Rückgabe:
1359
+ #Es wird ein skalarer Statuscode zurückgegeben, der Auskunft über die Initialisierung bzw.
1360
+ #aufgetretene Fehler gibt.
1361
+
1362
+ def scl_init(*args)
1363
+ KontoCheckRaw::scl_init(*args)
1364
+ end
1365
+
1366
+ #===KontoCheck::scl_multi(bic)
1367
+ #=====KontoCheckRaw::scl_multi(bic)
1368
+ #Diese Funktion bestimmt alle Werte des BIC-Verzeichnisses zu einem gegebenen BIC.
1369
+ #Im Fehlerfall wird nil zurückgegeben und die Variable retval auf den
1370
+ #entsprechende Fehlercode (<0) gesetzt.
1371
+ #
1372
+ #====Aufruf:
1373
+ #* ret=KontoCheckRaw::scl_multi(bic)
1374
+ #
1375
+ #====Rückgabe:
1376
+ #Die Rückgabe ist ein Array mit vier Elementen:
1377
+ #
1378
+ #Das erste Element ist der Statuscode (s.u.)
1379
+ #Das zweite Element sind die SCL Flags (als String)
1380
+ #das dritte Element ist der benutzte BIC
1381
+ #das vierte Element ist der Institutsname aus dem BIC-Verzeichnis
1382
+
1383
+ def scl_multi(*args)
1384
+ KontoCheckRaw::scl_multi(*args)
1385
+ end
1386
+
1387
+ #===KontoCheck::scl_sct(bic)
1388
+ #=====KontoCheckRaw::scl_sct(bic)
1389
+ #=====KontoCheck::scl_sct_blz(blz)
1390
+ #Diese Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL-
1391
+ #Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1392
+ #Im Fehlerfall wird nil zurückgegeben
1393
+ #
1394
+ #====Aufruf:
1395
+ #ret=KontoCheckRaw::scl_sct(bic)
1396
+ #
1397
+ #====Rückgabe:
1398
+ #Rückgabe ist das Flag SCT des SCL-Verzeichnisses
1399
+
1400
+ def scl_sct(*args)
1401
+ KontoCheckRaw::scl_sct(*args).first
1402
+ end
1403
+
1404
+ #===KontoCheck::scl_sct_blz(blz)
1405
+ #=====KontoCheckRaw::scl_sct_blz(blz)
1406
+ #=====KontoCheck::scl_sct(bic)
1407
+ #Diese Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL-
1408
+ #Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1409
+ #Im Fehlerfall wird nil zurückgegeben
1410
+ #
1411
+ #====Aufruf:
1412
+ #ret=KontoCheckRaw::scl_sct_blz(blz)
1413
+ #
1414
+ #====Rückgabe:
1415
+ #Rückgabe ist das Flag SCT des SCL-Verzeichnisses
1416
+
1417
+ def scl_sct_blz(*args)
1418
+ KontoCheckRaw::scl_sct_blz(*args).first
1419
+ end
1420
+
1421
+ #===KontoCheck::scl_sdd(bic)
1422
+ #=====KontoCheckRaw::scl_sdd(bic)
1423
+ #=====KontoCheck::scl_sdd_blz(bic)
1424
+ #Diese Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basislastschrift)
1425
+ #des SCL- Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1426
+ #Im Fehlerfall wird nil zurückgegeben
1427
+ #
1428
+ #====Aufruf:
1429
+ #* ret=KontoCheck::scl_sdd(bic)
1430
+ #
1431
+ #====Rückgabe:
1432
+ #Rückgabe ist das Flag SDD des SCL-Verzeichnisses
1433
+
1434
+ def scl_sdd(*args)
1435
+ KontoCheckRaw::scl_sdd(*args).first
1436
+ end
1437
+
1438
+ #===KontoCheck::scl_sdd_blz(blz)
1439
+ #=====KontoCheckRaw::scl_sdd_blz(blz)
1440
+ #=====KontoCheck::scl_sdd(bic)
1441
+ #Diese Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basislastschrift)
1442
+ #des SCL- Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1443
+ #Im Fehlerfall wird nil zurückgegeben
1444
+ #
1445
+ #====Aufruf:
1446
+ #* ret=KontoCheckRaw::scl_sdd_blz(blz)
1447
+ #
1448
+ #====Rückgabe:
1449
+ #Rückgabe ist das Flag SDD des SCL-Verzeichnisses
1450
+
1451
+ def scl_sdd_blz(*args)
1452
+ KontoCheckRaw::scl_sdd_blz(*args).first
1453
+ end
1454
+
1455
+ #===KontoCheck::scl_cor1(bic)
1456
+ #=====KontoCheckRaw::scl_cor1(bic)
1457
+ #=====KontoCheck::scl_cor1_blz(blz)
1458
+ #Diese Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basislastschrift
1459
+ #mit verkürzter Vorlagefrist) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1460
+ #Im Fehlerfall wird nil zurückgegeben
1461
+ #
1462
+ #====Aufruf:
1463
+ #* ret=KontoCheckRaw::scl_cor1(bic)
1464
+ #
1465
+ #====Rückgabe:
1466
+ #Rückgabe ist das Flag COR1 des SCL-Verzeichnisses
1467
+
1468
+ def scl_cor1(*args)
1469
+ KontoCheckRaw::scl_cor1(*args).first
1470
+ end
1471
+
1472
+ #===KontoCheck::scl_cor1_blz(blz)
1473
+ #=====KontoCheckRaw::scl_cor1_blz(blz)
1474
+ #=====KontoCheck::scl_cor1(bic)
1475
+ #Diese Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basislastschrift
1476
+ #mit verkürzter Vorlagefrist) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1477
+ #Im Fehlerfall wird nil zurückgegeben
1478
+ #
1479
+ #====Aufruf:
1480
+ #* ret=KontoCheckRaw::scl_cor1_blz(blz)
1481
+ #
1482
+ #====Rückgabe:
1483
+ #Rückgabe ist das Flag COR1 des SCL-Verzeichnisses
1484
+
1485
+ def scl_cor1_blz(*args)
1486
+ KontoCheckRaw::scl_cor1_blz(*args).first
1487
+ end
1488
+
1489
+ #===KontoCheck::scl_b2b(bic)
1490
+ #=====KontoCheckRaw::scl_b2b(bic)
1491
+ #=====KontoCheck::scl_b2b_blz(blz)
1492
+ #Diese Funktion bestimmt das Flag B2B (SEPA B2B Direct Debit, Sepa-Firmelastschrift)
1493
+ #des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1494
+ #Im Fehlerfall wird nil zurückgegeben
1495
+ #
1496
+ #====Aufruf:
1497
+ #* ret=KontoCheckRaw::scl_b2b(bic)
1498
+ #
1499
+ #====Rückgabe:
1500
+ #Rückgabe ist das Flag B2B des SCL-Verzeichnisses
1501
+
1502
+ def scl_b2b(*args)
1503
+ KontoCheckRaw::scl_b2b(*args).first
1504
+ end
1505
+
1506
+ #===KontoCheck::scl_b2b_blz(blz)
1507
+ #=====KontoCheckRaw::scl_b2b(bic)
1508
+ #=====KontoCheck::scl_b2b(bic)
1509
+ #Diese Funktion bestimmt das Flag B2B (SEPA B2B Direct Debit, Sepa-Firmelastschrift)
1510
+ #des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1511
+ #Im Fehlerfall wird nil zurückgegeben
1512
+ #
1513
+ #====Aufruf:
1514
+ #* ret=KontoCheckRaw::scl_b2b_blz(blz)
1515
+ #
1516
+ #====Rückgabe:
1517
+ #Rückgabe ist das Flag B2B des SCL-Verzeichnisses
1518
+
1519
+ def scl_b2b_blz(*args)
1520
+ KontoCheckRaw::scl_b2b_blz(*args).first
1521
+ end
1522
+
1523
+ #===KontoCheck::scl_scc(bic)
1524
+ #=====KontoCheckRaw::scl_scc(bic)
1525
+ #=====KontoCheck::scl_scc_blz(blz)
1526
+ #Diese Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karteneinzüge)
1527
+ #des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1528
+ #Im Fehlerfall wird nil zurückgegeben.
1529
+ #
1530
+ #====Aufruf:
1531
+ #* ret=KontoCheckRaw::scl_scc(bic)
1532
+ #
1533
+ #====Rückgabe:
1534
+ #Rückgabe ist das Flag SCC des SCL-Verzeichnisses
1535
+
1536
+ def scl_scc(*args)
1537
+ KontoCheckRaw::scl_scc(*args).first
1538
+ end
1539
+
1540
+ #===KontoCheck::scl_scc_blz(blz)
1541
+ #=====KontoCheckRaw::scl_scc_blz(blz)
1542
+ #=====KontoCheck::scl_scc(bic)
1543
+ #Diese Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karteneinzüge)
1544
+ #des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zurück.
1545
+ #Im Fehlerfall wird nil zurückgegeben.
1546
+ #
1547
+ #====Aufruf:
1548
+ #* ret=KontoCheckRaw::scl_scc_blz(blz)
1549
+ #
1550
+ #====Rückgabe:
1551
+ #Rückgabe ist das Flag SCC des SCL-Verzeichnisses
1552
+
1553
+ def scl_scc_blz(*args)
1554
+ KontoCheckRaw::scl_scc_blz(*args).first
1555
+ end
1556
+
1557
+
1558
+ #===KontoCheck::version( [mode] )
1559
+ #=====KontoCheckRaw::version( [mode] )
1560
+ #Diese Funktion gibt die Versions-Infos der C-Bibliothek zurück.
1561
+ #
1562
+ #====Mögliche Werte für mode:
1563
+ #* 0 bzw. ohne Parameter: Versionsstring der C-Bibliothek
1564
+ #* 1: Versionsnummer
1565
+ #* 2: Versionsdatum
1566
+ #* 3: Compilerdatum und -zeit
1567
+ #* 4: Datum der Prüfziffermethoden
1568
+ #* 5: Datum der IBAN-Regeln
1569
+ #* 6: Klartext-Datum der Bibliotheksversion
1570
+ #* 7: Versionstyp (devel, beta, final)
1571
+
1572
+ def version(*args)
1573
+ KontoCheckRaw::version(*args)
1574
+ end
1575
+
1576
+ end
1577
+
1578
+ end