konto_check 0.0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'konto_check'
@@ -1,52 +1,48 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{konto_check}
8
- s.version = "0.0.2"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Provideal Systems GmbH"]
12
- s.date = %q{2010-04-14}
13
- s.description = %q{Check whether a certain bic/account-no-combination can possibly be valid. It uses the C library kontocheck (see http://sourceforge.net/projects/kontocheck/) by Michael Plugge.}
11
+ s.authors = ["Provideal Systems GmbH", "Jan Schwenzien", "Michael Plugge"]
12
+ s.date = %q{2011-08-05}
13
+ s.description = %q{Check whether a certain bic/account-no-combination or an IBAN can possibly be valid, retrieve informations about a bank or search for BICs matching certain criteria. It uses the C library kontocheck (see http://sourceforge.net/projects/kontocheck/) by Michael Plugge.}
14
14
  s.email = %q{info@provideal.net}
15
- s.extensions = ["ext/konto_check/extconf.rb"]
15
+ s.extensions = ["ext/konto_check_raw/extconf.rb"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE",
18
- "README.textile"
18
+ "README.textile",
19
+ "ext/konto_check_raw/konto_check_raw_ruby.c"
19
20
  ]
20
21
  s.files = [
21
- ".document",
22
- ".gitignore",
23
- "LICENSE",
24
- "README.textile",
25
- "Rakefile",
26
- "VERSION.yml",
27
- "ext/konto_check/extconf.rb",
28
- "ext/konto_check/konto_check.c",
29
- "ext/konto_check/konto_check.h",
30
- "ext/konto_check/konto_check_ruby.c",
31
- "konto_check.gemspec",
32
- "test/helper.rb",
33
- "test/test_konto_check.rb"
22
+ "CHANGES",
23
+ "LICENSE",
24
+ "README.textile",
25
+ "Rakefile",
26
+ "VERSION.yml",
27
+ "ext/konto_check_raw/extconf.rb",
28
+ "ext/konto_check_raw/konto_check.c",
29
+ "ext/konto_check_raw/konto_check.h",
30
+ "ext/konto_check_raw/konto_check_raw_ruby.c",
31
+ "init.rb",
32
+ "konto_check.gemspec",
33
+ "lib/konto_check.rb",
34
+ "test/helper.rb",
35
+ "test/test_konto_check.rb"
34
36
  ]
35
37
  s.homepage = %q{http://github.com/provideal/konto_check}
36
- s.rdoc_options = ["--charset=UTF-8"]
37
38
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.6}
39
- s.summary = %q{Checking german BICs/Bank account numbers}
40
- s.test_files = [
41
- "test/helper.rb",
42
- "test/test_konto_check.rb"
43
- ]
39
+ s.rubygems_version = %q{1.6.2}
40
+ s.summary = %q{Checking german BICs/Bank account numbers and IBANs, retrieve information about german Banks, search for Banks matching certain criteria}
44
41
 
45
42
  if s.respond_to? :specification_version then
46
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
43
  s.specification_version = 3
48
44
 
49
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
46
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
51
47
  else
52
48
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
@@ -0,0 +1,976 @@
1
+ # load the c extension
2
+ require 'konto_check_raw'
3
+
4
+ #This is a C/Ruby library to check the validity of German Bank Account
5
+ #Numbers. All currently defined test methods by Deutsche Bundesbank (April
6
+ #2011: 00 to D8) are implemented.
7
+ #
8
+ #<b>ATTENTION:</b> There are a few important changes in the API between version 0.0.2 (version
9
+ #by Peter Horn/Provideal), version 0.0.6 (jeanmartin) and this version:
10
+ #
11
+ #* The function KontoCheck::load_bank_data() is no longer used; it is replaced by KontoCheck::init() and KontoCheck::generate_lutfile().
12
+ #* The function KontoCheck::konto_check(blz,kto) changed the order of parameters from (kto,blz) to (blz,kto)
13
+ #
14
+ #Another change affects only the version 0.0.6 by jeanmartin:
15
+ #
16
+ #* 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).
17
+ #
18
+ #Because this class is inteded for german bank accounts, the rest of the
19
+ #documentation is in german too.
20
+ #
21
+ #Diese Bibliothek implementiert die Prüfziffertests für deutsche Bankkonten.
22
+ #Die meisten Konten enthalten eine Prüfziffer; mit dieser kann getestet
23
+ #werden, ob eine Bankleitzahl plausibel ist oder nicht. Auf diese Weise
24
+ #können Zahlendreher oder Zifferverdopplungen oft festgestellt werden. Es ist
25
+ #natürlich nicht möglich, zu bestimmen, ob ein Konto wirklich existiert; dazu
26
+ #müßte jeweils eine Anfrage bei der Bank gemacht werden ;-).
27
+ #
28
+ #Die Bibliothek ist in zwei Teile gesplittet: KontoCheckRaw bildet die direkte
29
+ #Schnittstelle zur C-Bibliothek und ist daher manchmal etwas sperrig;
30
+ #KontoCheck ist dagegen mehr Ruby-artig ausgelegt. KontoCheck gibt meist nur
31
+ #eine Teilmenge von KontoCheckRaw zurück, aber (hoffentlich) die Teile, die man
32
+ #unmittelbar von den jeweiligen Funktionen erwartet. Eine Reihe einfacher
33
+ #Funktionen sind auch in beiden Versionen identisch.
34
+ #
35
+ #Die Bankleitzahldaten werden in einem eigenen (komprimierten) Format in einer
36
+ #sogenannten LUT-Datei gespeichert. Diese Datei läßt sich mit der Funktion
37
+ #KontoCheck::generate_lutfile bzw. KontoCheckRaw::generate_lutfile aus der
38
+ #Datei der Deutschen Bundesbank (online erhältlich unter
39
+ #http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php)
40
+ #erzeugen. Die LUT-Datei hat den großen Vorteil, daß die Datenblocks (BLZ,
41
+ #Prüfziffer, Bankname, Ort, ...) unabhängig voneinander gespeichert sind; jeder
42
+ #Block kann für sich geladen werden. In einer Datei können zwei Datensätze der
43
+ #Bundesbank mit unterschiedlichem Gültigkeitsdatum enthalten sein. Wenn bei der
44
+ #Initialisierung kein bestimmter Datensatz ausgewählt wird, prüft die
45
+ #Bibliothek aufgrund des mit jedem Datensatz gespeicherten Gültigkeitszeitraums
46
+ #welcher Satz aktuell gültig ist und lädt diesen dann in den Speicher.
47
+ #
48
+ #Numerische Werte (z.B. Bankleitzahlen, Kontonummern, PLZ,...) können als
49
+ #Zahlwerte oder als String angegeben werden; sie werden automatisch
50
+ #konvertiert. Prüfziffermethoden können ebenfalls als Zahl oder String
51
+ #angegeben werden; die Angabe als Zahl ist allerdings nicht immer eindeutig. So
52
+ #kann z.B. 131 sowohl für D1 als auch 13a stehen; daher ist es besser, die
53
+ #Prüfziffermethode als String anzugeben (in diesem Beispiel würde 131 als 13a
54
+ #interpretiert).
55
+
56
+ module KontoCheck
57
+
58
+ #mögliche Suchschlüssel für die Funktion KontoCheck::suche()
59
+ #
60
+ #:ort, :plz, :pz, :bic, :blz, :namen, :namen_kurz
61
+ SEARCH_KEYS = [:ort, :plz, :pz, :bic, :blz, :namen, :namen_kurz]
62
+ #Aliasnamen für einige Suchschlüssel der Funktion KontoCheck::suche()
63
+ #
64
+ #:bankleitzahl, :city, :zip, :name, :kurzname, :shortname, :pruefziffer
65
+ SEARCH_KEY_MAPPINGS = {
66
+ :bankleitzahl => :blz,
67
+ :city => :ort,
68
+ :zip => :plz,
69
+ :name => :namen,
70
+ :kurzname => :namen_kurz,
71
+ :shortname => :namen_kurz,
72
+ :pruefziffer => :pz
73
+ }
74
+
75
+ class << self
76
+
77
+ #===<tt>KontoCheck::lut_info()</tt>
78
+ #=====<tt>KontoCheckRaw::lut_info([lutfile])</tt>
79
+ #=====<tt>KontoCheck::lut_info1(lutfile)</tt>
80
+ #=====<tt>KontoCheck::lut_info2(lutfile)</tt>
81
+ #
82
+ #Diese Funktion liefert den Infoblock des Datensatzes zurück, der mittels
83
+ #init() in den Speichergeladen wurde. Weitere Infos über die LUT-Datei
84
+ #lassen sich mit der Funktion KontoCheckRaw::lut_info() sowie
85
+ #KontoCheck::dump_lutfile() erhalten.
86
+
87
+ def lut_info()
88
+ KontoCheckRaw::lut_info()[3]
89
+ end
90
+
91
+ #===<tt>KontoCheck::lut_info1(<lutfile>)</tt>
92
+ #=====<tt>KontoCheck::lut_info()</tt>
93
+ #=====<tt>KontoCheck::lut_info2()</tt>
94
+ #=====<tt>KontoCheckRaw::lut_info()</tt>
95
+ #
96
+ #Diese Funktion liefert den Infoblock des ersten Datensatzes der angegebenen
97
+ #LUT-Datei zurück. Weitere Infos über die LUT-Datei lassen sich mit der
98
+ #Funktion KontoCheckRaw::lut_info() sowie KontoCheck::dump_lutfile() erhalten.
99
+
100
+ def lut_info1(filename)
101
+ KontoCheckRaw::lut_info(filename)[3]
102
+ end
103
+
104
+ #===<tt>KontoCheck::lut_info2(lutfile)</tt>
105
+ #=====<tt>KontoCheck::lut_info()</tt>
106
+ #=====<tt>KontoCheck::lut_info1(lutfile)</tt>
107
+ #=====<tt>KontoCheckRaw::lut_info([lutfile])</tt>
108
+ #
109
+ #Diese Funktion liefert den Infoblock des zweiten Datensatzes der angegebenen
110
+ #LUT-Datei zurück. Weitere Infos über die LUT-Datei lassen sich mit der
111
+ #Funktion KontoCheckRaw::lut_info() sowie KontoCheck::dump_lutfile() erhalten.
112
+
113
+ def lut_info2(filename)
114
+ KontoCheckRaw::lut_info(filename)[4]
115
+ end
116
+
117
+
118
+ #===<tt>KontoCheck::dump_lutfile(lutfile)</tt>
119
+ #=====<tt>KontoCheckRaw::dump_lutfile(lutfile)</tt>
120
+ #
121
+ #Diese Funktion liefert detaillierte Informationen über alle Blocks, die in der
122
+ #LUT-Datei gespeichert sind, sowie noch einige Internas der LUT-Datei. Im
123
+ #Fehlerfall wird nil zurückgegeben.
124
+
125
+ def dump_lutfile(filename)
126
+ KontoCheckRaw::dump_lutfile(filename).first
127
+ end
128
+
129
+ #===<tt>KontoCheck::encoding([mode])</tt>
130
+ #=====<tt>KontoCheckRaw::encoding([mode])</tt>
131
+ #=====<tt>KontoCheck::encoding_str([mode])</tt>
132
+ #=====<tt>KontoCheckRaw::keep_raw_data(mode)</tt>
133
+ #
134
+ #Diese Funktion legt den benutzten Zeichensatz für Fehlermeldungen durch die
135
+ #Funktion KontoCheck::retval2txt() und einige Felder der LUT-Datei (Name,
136
+ #Kurzname, Ort) fest. Wenn die Funktion nicht aufgerufen wird, wird der Wert
137
+ #DEFAULT_ENCODING aus konto_check.h benutzt.
138
+ #
139
+ #_Achtung_: Das Verhalten der Funktion hängt von dem Flag keep_raw_data der
140
+ #C-Bibliothek ab. Falls das Flag gesetzt ist, werden die Rohdaten der Blocks
141
+ #Name, Kurzname und Ort im Speicher gehalten; bei einem Wechsel der Kodierung
142
+ #wird auch für diese Blocks die Kodierung umgesetzt. Falls das Flag nicht
143
+ #gesetzt ist, sollte die Funktion *vor* der Initialisierung aufgerufen werden,
144
+ #da in dem Fall die Daten der LUT-Datei nur bei der Initialisierung konvertiert
145
+ #werden. Mit der Funktion KontoCheckRaw::keep_raw_data() kann das Flag gesetzt
146
+ #oder gelöscht werden.
147
+ #
148
+ #Für den Parameter mode werden die folgenden Werte akzeptiert (die Strings sind
149
+ #nicht case sensitiv; Mi oder mI oder MI ist z.B. auch möglich; wird der
150
+ #Parameter nicht angegeben, wird die aktuelle Kodierung ausgegeben):
151
+ #
152
+ # 0: aktuelle Kodierung ausgeben
153
+ # 1, 'i', 'I': ISO-8859-1
154
+ # 2, 'u', 'U': UTF-8
155
+ # 3, 'h', 'H': HTML
156
+ # 4, 'd', 'D': DOS CP 850
157
+ # 51, 'mi': ISO-8859-1, Makro für Fehlermeldungen
158
+ # 52, 'mu': UTF-8, Makro für Fehlermeldungen
159
+ # 53, 'mh': HTML, Makro für Fehlermeldungen
160
+ # 54, 'md': DOS CP 850, Makro für Fehlermeldungen
161
+ #
162
+ #Rückgabewert ist die aktuelle Kodierung als Integer (falls zwei Kodierungen
163
+ #angegeben sind, ist die erste die der Statusmeldungen, die zweite die der
164
+ #LUT-Blocks):
165
+ #
166
+ # 0: "noch nicht spezifiziert" (vor der Initialisierung)
167
+ # 1: "ISO-8859-1";
168
+ # 2: "UTF-8";
169
+ # 3: "HTML entities";
170
+ # 4: "DOS CP 850";
171
+ # 12: "ISO-8859-1/UTF-8";
172
+ # 13: "ISO-8859-1/HTML";
173
+ # 14: "ISO-8859-1/DOS CP 850";
174
+ # 21: "UTF-8/ISO-8859-1";
175
+ # 23: "UTF-8/HTML";
176
+ # 24: "UTF-8/DOS CP-850";
177
+ # 31: "HTML entities/ISO-8859-1";
178
+ # 32: "HTML entities/UTF-8";
179
+ # 34: "HTML entities/DOS CP-850";
180
+ # 41: "DOS CP-850/ISO-8859-1";
181
+ # 42: "DOS CP-850/UTF-8";
182
+ # 43: "DOS CP-850/HTML";
183
+ # 51: "Makro/ISO-8859-1";
184
+ # 52: "Makro/UTF-8";
185
+ # 53: "Makro/HTML";
186
+ # 54: "Makro/DOS CP 850";
187
+
188
+ def encoding(*args)
189
+ KontoCheckRaw::encoding(*args)
190
+ end
191
+
192
+ #===<tt>KontoCheck::encoding_str([mode])</tt>
193
+ #=====<tt>KontoCheckRaw::encoding_str([mode])</tt>
194
+ #=====<tt>KontoCheck::encoding([mode])</tt>
195
+ #=====<tt>KontoCheckRaw::keep_raw_data(mode)</tt>
196
+ #
197
+ #Diese Funktion entspricht der Funktion KontoCheck::encoding(). Allerdings
198
+ #ist der Rückgabewert nicht numerisch, sondern ein String, der die aktuelle
199
+ #Kodierung angibt. Die folgenden Rückgabewerte sind möglich (falls zwei
200
+ #Kodierungen angegeben sind, ist die erste die der Statusmeldungen, die
201
+ #zweite die der LUT-Blocks):
202
+ #
203
+ # "noch nicht spezifiziert" (vor der Initialisierung)
204
+ # "ISO-8859-1";
205
+ # "UTF-8";
206
+ # "HTML entities";
207
+ # "DOS CP 850";
208
+ # "ISO-8859-1/UTF-8";
209
+ # "ISO-8859-1/HTML";
210
+ # "ISO-8859-1/DOS CP 850";
211
+ # "UTF-8/ISO-8859-1";
212
+ # "UTF-8/HTML";
213
+ # "UTF-8/DOS CP-850";
214
+ # "HTML entities/ISO-8859-1";
215
+ # "HTML entities/UTF-8";
216
+ # "HTML entities/DOS CP-850";
217
+ # "DOS CP-850/ISO-8859-1";
218
+ # "DOS CP-850/UTF-8";
219
+ # "DOS CP-850/HTML";
220
+ # "Makro/ISO-8859-1";
221
+ # "Makro/UTF-8";
222
+ # "Makro/HTML";
223
+ # "Makro/DOS CP 850";
224
+
225
+ def encoding_str(*args)
226
+ KontoCheckRaw::encoding_str(*args)
227
+ end
228
+
229
+ #===<tt>KontoCheck::retval2txt(retval)</tt>
230
+ #=====<tt>KontoCheckRaw::retval2txt(retval)</tt>
231
+ #
232
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String. Der
233
+ #benutzte Zeichensatz wird über die Funktion KontoCheck::encoding() festgelegt.
234
+ #Falls diese Funktion nicht aufgerufen wurde, wird der Wert des Makros
235
+ #DEFAULT_ENCODING aus konto_check.h benutzt.
236
+
237
+ def retval2txt(retval)
238
+ KontoCheckRaw::retval2txt(retval)
239
+ end
240
+
241
+ #===<tt>KontoCheck::retval2iso(retval)</tt>
242
+ #=====<tt>KontoCheckRaw::retval2iso(retval)</tt>
243
+ #
244
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
245
+ #Der benutzte Zeichensatz ist ISO 8859-1.
246
+
247
+ def retval2iso(retval)
248
+ KontoCheckRaw::retval2iso(retval)
249
+ end
250
+
251
+ #===<tt>KontoCheck::retval2txt_short(retval)</tt>
252
+ #=====<tt>KontoCheckRaw::retval2txt_short(retval)</tt>
253
+ #=====<tt>KontoCheck::retval2txt_kurz(retval)</tt>
254
+ #
255
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen kurzen
256
+ #String. Die Ausgabe ist der Makroname, wie er in C benutzt wird.
257
+
258
+ def retval2txt_short(retval)
259
+ KontoCheckRaw::retval2txt_short(retval)
260
+ end
261
+ alias_method :retval2txt_kurz, :retval2txt_short
262
+
263
+ #===<tt>KontoCheck::retval2txt_kurz(retval)</tt>
264
+ #=====<tt>KontoCheckRaw::retval2txt_short(retval)</tt>
265
+ #=====<tt>KontoCheck::retval2txt_short(retval)</tt>
266
+ #
267
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen kurzen
268
+ #String. Die Ausgabe ist der Makroname, wie er in C benutzt wird. Die Funktion
269
+ #ist ein Alias zu KontoCheck::retval2txt_short().
270
+
271
+ def retval2txt_kurz(retval)
272
+ KontoCheckRaw::retval2txt_short(retval)
273
+ end
274
+
275
+ #===<tt>KontoCheck::retval2dos(retval)</tt>
276
+ #=====<tt>KontoCheckRaw::retval2dos(retval)</tt>
277
+ #
278
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
279
+ #Der benutzte Zeichensatz ist cp850 (DOS).
280
+ #
281
+ def retval2dos(retval)
282
+ KontoCheckRaw::retval2dos(retval)
283
+ end
284
+
285
+ #===<tt>KontoCheck::retval2html(retval)</tt>
286
+ #=====<tt>KontoCheckRaw::retval2html(retval)</tt>
287
+ #
288
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
289
+ #Für Umlaute werden HTML-Entities benutzt.
290
+
291
+ def retval2html(retval)
292
+ KontoCheckRaw::retval2html(retval)
293
+ end
294
+
295
+ #===<tt>KontoCheck::retval2utf8(retval)</tt>
296
+ #=====<tt>KontoCheckRaw::retval2utf8(retval)</tt>
297
+ #
298
+ #Diese Funktion konvertiert einen numerischen Rückgabewert in einen String.
299
+ #Der benutzte Zeichensatz ist UTF-8.
300
+
301
+ def retval2utf8(retval)
302
+ KontoCheckRaw::retval2utf8(retval)
303
+ end
304
+
305
+ #===<tt>KontoCheck::generate_lutfile(inputfile,outputfile [,user_info [,gueltigkeit [,felder [,filialen [,set [,iban_file]]]]]])</tt>
306
+ #=====<tt>KontoCheckRaw::generate_lutfile(inputfile,outputfile [,user_info [,gueltigkeit [,felder [,filialen [,set [,iban_file]]]]]])</tt>
307
+ #
308
+ #Diese Funktion generiert eine neue LUT-Datei aus der BLZ-Datei der Deutschen Bundesbank. Die folgenden
309
+ #Parameter werden unterstützt:
310
+ #* inputfile: Eingabedatei (Textdatei) der Bundesbank
311
+ #* outputfile: Name der Ausgabedatei
312
+ #* user_info: Info-String der in die LUT-Datei geschrieben wird (frei wählbar; wird in den Info-Block aufgenommen)
313
+ #* gueltigkeit: Gültigkeit des Datensatzes im Format JJJJMMTT-JJJJMMTT. Diese Angabe wird benutzt, um festzustellen, ob ein Datensatz aktuell noch gültig ist.
314
+ #* 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):
315
+ # 0. BLZ,PZ
316
+ # 1. BLZ,PZ,NAME_KURZ
317
+ # 2. BLZ,PZ,NAME_KURZ,BIC
318
+ # 3. BLZ,PZ,NAME,PLZ,ORT
319
+ # 4. BLZ,PZ,NAME,PLZ,ORT,BIC
320
+ # 5. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC
321
+ # 6. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ
322
+ # 7. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG
323
+ # 8. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG
324
+ # 9. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG,PAN,NR
325
+ #* filialen: (0 oder 1) Flag, ob nur die Daten der Hauptstellen (0) oder auch die der Filialen aufgenommen werden sollen
326
+ #* 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.
327
+ #* iban_file: Datei der Banken, die einer Selbstberechnung des IBAN nicht zugestimmt haben. Näheres dazu (inklusive Weblink) findet sich bei der Funktion KontoCheckRaw::iban_gen(blz,kto).
328
+ #
329
+ #Mögliche Rückgabewerte:
330
+ #
331
+ # -112 (KTO_CHECK_UNSUPPORTED_COMPRESSION) "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
332
+ # -57 (LUT2_GUELTIGKEIT_SWAPPED) "Im Gültigkeitsdatum sind Anfangs- und Enddatum vertauscht"
333
+ # -56 (LUT2_INVALID_GUELTIGKEIT) "Das angegebene Gültigkeitsdatum ist ungültig (Soll: JJJJMMTT-JJJJMMTT)"
334
+ # -32 (LUT2_COMPRESS_ERROR) "Fehler beim Komprimieren eines LUT-Blocks"
335
+ # -31 (LUT2_FILE_CORRUPTED) "Die LUT-Datei ist korrumpiert"
336
+ # -30 (LUT2_NO_SLOT_FREE) "Im Inhaltsverzeichnis der LUT-Datei ist kein Slot mehr frei"
337
+ # -15 (INVALID_BLZ_FILE) "Fehler in der blz.txt Datei (falsche Zeilenlänge)"
338
+ # -11 (FILE_WRITE_ERROR) "kann Datei nicht schreiben"
339
+ # -10 (FILE_READ_ERROR) "kann Datei nicht lesen"
340
+ # -9 (ERROR_MALLOC) "kann keinen Speicher allokieren"
341
+ # -7 (INVALID_LUT_FILE) "die blz.lut Datei ist inkosistent/ungültig"
342
+ # 1 (OK) "ok"
343
+ # 7 (LUT1_FILE_GENERATED) "ok; es wurde allerdings eine LUT-Datei im alten Format (1.0/1.1) generiert"
344
+
345
+ def generate_lutfile(*args)
346
+ KontoCheckRaw::generate_lutfile(*args)
347
+ end
348
+
349
+ #===<tt>KontoCheck::init([<p1>[,<p2>[,<set>]]])</tt>
350
+ #=====<tt>KontoCheckRaw::init([<p1>[,<p2>[,<set>]]])</tt>
351
+ #Die Variablen p1 und p2 stehen für level und lutfile (in beliebiger
352
+ #Reihenfolge); die Zuordnung der beiden Parameter erfolgt on the fly durch eine
353
+ #Typüberprüfung.
354
+ #
355
+ #Diese Funktion initialisiert die Bibliothek und lädt die gewünschten
356
+ #Datenblocks in den Speicher. Alle Argumente sind optional; in konto_check.h
357
+ #werden die Defaultwerte definiert.
358
+ #
359
+ #Die beiden ersten Parameter sind der Dateiname und der
360
+ #Initialisierungslevel. Der Dateiname ist immer als String anzugeben, der
361
+ #Initialisierungslevel immer als Zahl, ansonsten wird eine TypeError
362
+ #Exception geworfen. Auf diese Weise ist es problemlos möglich festzustellen,
363
+ #wie die Parameter p1 und p2 den Variablen lutfile und level zuzuordnen
364
+ #sind.
365
+ #
366
+ #Für die LUT-Datei ist als Defaultwert sowohl für den Pfad als auch den
367
+ #Dateinamen eine Liste möglich, die sequenziell abgearbeitet wird; diese wird
368
+ #in konto_check.h spezifiziert (Compilerzeit-Konstante der C-Bibliothek). Die
369
+ #folgenden Werte sind in der aktuellen konto_check.h definiert:
370
+ #
371
+ # DEFAULT_LUT_NAME blz.lut, blz.lut2f, blz.lut2
372
+ # DEFAULT_LUT_PATH ., /usr/local/etc/, /etc/, /usr/local/bin/, /opt/konto_check/ (für nicht-Windows-Systeme)
373
+ # DEFAULT_LUT_PATH ., C:\\, C:\\Programme\\konto_check (für Windows-Systeme)
374
+ #
375
+ #Der Defaultwert für level ist ebenfalls in konto_check.h definiert; in der
376
+ #aktuellen Version ist er 5. Bei diesem Level werden die Blocks BLZ,
377
+ #Prüfziffer, Name, Kurzname, PLZ, Ort und BIC geladen.
378
+ #
379
+ #Falls der Parameter set nicht angegeben ist, wird versucht, das aktuell
380
+ #gültige Set aus dem Systemdatum und dem Gültigkeitszeitraum der in der
381
+ #LUT-Datei gespeicherten Sets zu bestimmen.
382
+ #
383
+ #Hier noch einmal ein Überblick über die Parameter:
384
+ #
385
+ #* lutfile: die LUT-Datei, mit der initialisiert werden soll
386
+ #* 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):
387
+ # 0. BLZ,PZ
388
+ # 1. BLZ,PZ,NAME_KURZ
389
+ # 2. BLZ,PZ,NAME_KURZ,BIC
390
+ # 3. BLZ,PZ,NAME,PLZ,ORT
391
+ # 4. BLZ,PZ,NAME,PLZ,ORT,BIC
392
+ # 5. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC
393
+ # 6. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ
394
+ # 7. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG
395
+ # 8. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG
396
+ # 9. BLZ,PZ,NAME_NAME_KURZ,PLZ,ORT,BIC,NACHFOLGE_BLZ,AENDERUNG,LOESCHUNG,PAN,NR
397
+ #* set (1 oder 2): Datensatz
398
+ #
399
+ #Mögliche Rückgabewerte:
400
+ #
401
+ # -112 (KTO_CHECK_UNSUPPORTED_COMPRESSION) "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden"
402
+ # -64 (INIT_FATAL_ERROR) "Initialisierung fehlgeschlagen (init_wait geblockt)"
403
+ # -63 (INCREMENTAL_INIT_NEEDS_INFO) "Ein inkrementelles Initialisieren benötigt einen Info-Block in der LUT-Datei"
404
+ # -62 (INCREMENTAL_INIT_FROM_DIFFERENT_FILE) "Ein inkrementelles Initialisieren mit einer anderen LUT-Datei ist nicht möglich"
405
+ # -38 (LUT2_PARTIAL_OK) "es wurden nicht alle Blocks geladen"
406
+ # -36 (LUT2_Z_MEM_ERROR) "Memory error in den ZLIB-Routinen"
407
+ # -35 (LUT2_Z_DATA_ERROR) "Datenfehler im komprimierten LUT-Block"
408
+ # -34 (LUT2_BLOCK_NOT_IN_FILE) "Der Block ist nicht in der LUT-Datei enthalten"
409
+ # -33 (LUT2_DECOMPRESS_ERROR) "Fehler beim Dekomprimieren eines LUT-Blocks"
410
+ # -31 (LUT2_FILE_CORRUPTED) "Die LUT-Datei ist korrumpiert"
411
+ # -20 (LUT_CRC_ERROR) "Prüfsummenfehler in der blz.lut Datei"
412
+ # -10 (FILE_READ_ERROR) "kann Datei nicht lesen"
413
+ # -9 (ERROR_MALLOC) "kann keinen Speicher allokieren"
414
+ # -7 (INVALID_LUT_FILE) "die blz.lut Datei ist inkosistent/ungültig"
415
+ # -6 (NO_LUT_FILE) "die blz.lut Datei wurde nicht gefunden"
416
+ #
417
+ # 1 (OK) "ok"
418
+ # 6 (LUT1_SET_LOADED) "Die Datei ist im alten LUT-Format (1.0/1.1)"
419
+ #
420
+ #Anmerkung: Falls der Statuscode LUT2_PARTIAL_OK ist, waren bei der
421
+ #Initialisierung nicht alle Blocks in der LUT-Datei enthalten.
422
+
423
+ def init(*args)
424
+ KontoCheckRaw::init(*args)
425
+ end
426
+
427
+ #===<tt>KontoCheck::load_bank_data(<datafile>)</tt>
428
+ #=====<tt>KontoCheckRaw::load_bank_data(<datafile>)</tt>
429
+ #
430
+ #Diese Funktion war die alte Initialisierungsroutine für konto_check; es ist
431
+ #nun durch die Funktionen KontoCheck::init() und KontoCheck::generate_lutfile()
432
+ #ersetzt. Zur Initialisierung benutzte sie die Textdatei der Deutschen
433
+ #Bundesbank und generiertge daraus eine LUT-Datei, die dann von der
434
+ #Initialisierungsroutine der C-Bibliothek benutzt wurde.
435
+ #
436
+ #Die init() Funktion ist wesentlich schneller (7..20 mal so schnell) und hat
437
+ #eine Reihe weiterer Vorteile. So ist es z.B. möglich, zwwei Datensätze mit
438
+ #unterschiedlichem Gültigkeitszeitraum in einer Datei zu halten und den jeweils
439
+ #gültigen Satz automatisch (nach der Systemzeit) auswählen zu lassen. Die
440
+ #einzelnen Datenblocks (Bankleitzahlen, Prüfziffermethoden, PLZ, Ort...) sind
441
+ #in der LUT-Datei in jeweils unabhängigen Blocks gespeichert und können einzeln
442
+ #geladen werden; die Bankdatei von der Deutschen Bundesbank enthält alle Felder
443
+ #in einem linearen Format, so daß einzelne Blocks nicht unabhängig von anderen
444
+ #geladen werden können.
445
+ #
446
+ #Die Funktion load_bank_data() wird nur noch als ein schibbolet benutzt, um
447
+ #zu testen, ob jemand das alte Interface benutzt. Bei der Routine
448
+ #KontoCheck::konto_check() wurde die Reihenfolge der Parameter getauscht, so
449
+ #daß man in dem Falle den alten Code umstellen muß.
450
+
451
+ def load_bank_data(*args)
452
+ KontoCheckRaw::load_bank_data(*args)
453
+ end
454
+
455
+ #===<tt>KontoCheck::current_lutfile_name()</tt>
456
+ #=====<tt>KontoCheckRaw::current_lutfile_name()</tt>
457
+ #=====<tt>KontoCheck::current_lutfile_set()</tt>
458
+ #=====<tt>KontoCheck::current_init_level()</tt>
459
+ #
460
+ #Diese Funktion bestimmt den Dateinamen der zur Initialisierung benutzten LUT-Datei.
461
+
462
+ def current_lutfile_name()
463
+ KontoCheckRaw::current_lutfile_name().first
464
+ end
465
+
466
+ #===<tt>KontoCheck::current_lutfile_set()</tt>
467
+ #=====<tt>KontoCheckRaw::current_lutfile_name()</tt>
468
+ #=====<tt>KontoCheck::current_lutfile_name()</tt>
469
+ #=====<tt>KontoCheck::current_init_level()</tt>
470
+ #
471
+ #Diese Funktion bestimmt das Set der LUT-Datei, das bei der Initialisierung benutzt wurde.
472
+
473
+ def current_lutfile_set()
474
+ raw_results = KontoCheckRaw::current_lutfile_name()
475
+ raw_results[1]
476
+ end
477
+
478
+ #===<tt>KontoCheck::current_init_level()</tt>
479
+ #=====<tt>KontoCheckRaw::current_lutfile_name()</tt>
480
+ #=====<tt>KontoCheckRaw::current_lutfile_name()</tt>
481
+ #=====<tt>KontoCheck::current_lutfile_set()</tt>
482
+ #
483
+ #Diese Funktion bestimmt den aktuell benutzten Initialisierungslevel
484
+
485
+ def current_init_level()
486
+ raw_results = KontoCheckRaw::current_lutfile_name()
487
+ raw_results[2]
488
+ end
489
+
490
+ #===<tt>KontoCheck::free()</tt>
491
+ #=====<tt>KontoCheckRaw::free()</tt>
492
+ #Diese Funktion gibt allen allokierten Speicher wieder frei.
493
+
494
+ def free()
495
+ KontoCheckRaw::free()
496
+ end
497
+
498
+ #===<tt>KontoCheck::konto_check(blz,kto)</tt>
499
+ #=====<tt>KontoCheckRaw::konto_check(blz,kto)</tt>
500
+ #=====<tt>KontoCheck::valid(blz,kto)</tt>
501
+ #Test, ob eine BLZ/Konto-Kombination eine gültige Prüfziffer enthält. Die Funktion gibt einen skalaren
502
+ #Statuswert zurück, der das Ergebnis der Prüfung enthält. Mögliche Rückgabewerte sind:
503
+ #
504
+ # -69 MISSING_PARAMETER "Bei der Kontoprüfung fehlt ein notwendiger Parameter (BLZ oder Konto)"
505
+ # -40 LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
506
+ #
507
+ # -77 BAV_FALSE "BAV denkt, das Konto ist falsch (konto_check hält es für richtig)"
508
+ # -29 UNDEFINED_SUBMETHOD "Die (Unter)Methode ist nicht definiert"
509
+ # -12 INVALID_KTO_LENGTH "ein Konto muß zwischen 1 und 10 Stellen haben"
510
+ # -5 INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
511
+ # -4 INVALID_BLZ "die Bankleitzahl ist ungültig"
512
+ # -3 INVALID_KTO "das Konto ist ungültig"
513
+ # -2 NOT_IMPLEMENTED "die Methode wurde noch nicht implementiert"
514
+ # -1 NOT_DEFINED "die Methode ist nicht definiert"
515
+ # 0 FALSE "falsch"
516
+ # 1 OK "ok"
517
+ # 2 OK_NO_CHK "ok, ohne Prüfung"
518
+
519
+ def konto_check(blz,kto)
520
+ KontoCheckRaw::konto_check(blz,kto)
521
+ end
522
+
523
+ #===<tt>KontoCheck::valid(blz,kto)</tt>
524
+ #=====<tt>KontoCheck::konto_check(blz,kto)</tt>
525
+ #=====<tt>KontoCheckRaw::konto_check(blz,kto)</tt>
526
+ #Dies ist ein Alias für die Funktion KontoCheck::konto_check()
527
+
528
+ def valid(blz,kto)
529
+ KontoCheckRaw::konto_check(blz,kto)
530
+ end
531
+
532
+ #===<tt>KontoCheck::konto_check?(blz, kto)</tt>
533
+ #=====<tt>KontoCheck::konto_check(blz,kto)</tt>
534
+ #=====<tt>KontoCheckRaw::konto_check(blz,kto)</tt>
535
+ #Test, ob eine BLZ/Konto-Kombination eine gültige Prüfziffer enthält. Die
536
+ #Funktion gibt einen skalaren Statuswert zurück, der das Ergebnis der Prüfung
537
+ #enthält. Mögliche Rückgabewerte sind einfach true und false (convenience
538
+ #function für konto_check()).
539
+
540
+ def konto_check?(blz,kto)
541
+ KontoCheckRaw::konto_check(blz,kto)>0?true:false
542
+ end
543
+
544
+ #===<tt>KontoCheck::valid?(blz, kto)</tt>
545
+ #=====<tt>KontoCheck::valid(blz, kto)</tt>
546
+ #=====<tt>KontoCheckRaw::konto_check(blz, kto)</tt>
547
+ #Dies ist einn Alias für die Funktion KontoCheck::konto_check?. Mögliche Rückgabewerte sind true oder false.
548
+
549
+ def valid?(blz,kto)
550
+ KontoCheckRaw::konto_check(blz, kto)>0?true:false
551
+ end
552
+
553
+ #===<tt>KontoCheck::konto_check_pz(pz,kto[,blz])</tt>
554
+ #=====<tt>KontoCheckRaw::konto_check_pz(pz,kto[,blz])</tt>
555
+ #=====<tt>KontoCheck::valid_pz(pz,kto[,blz])</tt>
556
+ #Diese Funktion testet, ob eine gegebene Prüfziffer/Kontonummer-Kombination gültig ist.
557
+ #
558
+ #Der zusätzliche Parameter blz ist nur für die Verfahren 52, 53, B6 und C0 notwendig; bei
559
+ #diesen Verfahren geht die BLZ in die Berechnung der Prüfziffer ein. Bei allen anderen
560
+ #Prüfzifferverfahren wird er ignoriert. Wird er bei einem dieser Verfahren nicht angegeben,
561
+ #wird stattdessen eine Test-BLZ eingesetzt.
562
+ #
563
+ #Die Funktion gibt einen skalaren Statuswert zurück, der das Ergebnis der
564
+ #Prüfung enthält. Mögliche Rückgabewerte sind:
565
+ #
566
+ # -69 (MISSING_PARAMETER) "bei der Kontoprüfung fehlt ein notwendiger Parameter (BLZ oder Konto)"
567
+ # -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
568
+ #
569
+ # -77 (BAV_FALSE) "BAV denkt, das Konto ist falsch (konto_check hält es für richtig)"
570
+ # -29 (UNDEFINED_SUBMETHOD) "die (Unter)Methode ist nicht definiert"
571
+ # -12 (INVALID_KTO_LENGTH) "ein Konto muß zwischen 1 und 10 Stellen haben"
572
+ # -3 (INVALID_KTO) "das Konto ist ungültig"
573
+ # -2 (NOT_IMPLEMENTED) "die Methode wurde noch nicht implementiert"
574
+ # -1 (NOT_DEFINED) "die Methode ist nicht definiert"
575
+ # 0 (FALSE) "falsch"
576
+ # 1 (OK) "ok"
577
+ # 2 (OK_NO_CHK) "ok, ohne Prüfung"
578
+
579
+ def konto_check_pz(*args)
580
+ KontoCheckRaw::konto_check_pz(*args)
581
+ end
582
+
583
+ #===<tt>KontoCheck::konto_check_pz?(pz,kto[,blz])</tt>
584
+ #=====<tt>KontoCheckRaw::konto_check_pz(pz,kto[,blz])</tt>
585
+ #=====<tt>KontoCheck::valid_pz?(pz,kto[,blz])</tt>
586
+ #Diese Funktion testet, ob eine gegebene Prüfziffer/Kontonummer-Kombination
587
+ #gültig ist. Der Rückgabewert dieser Funktion ist true oder false (convenience
588
+ #function für KontoCheck::konto_check_pz()).
589
+ #
590
+ #Der zusätzliche Parameter blz ist nur für die Verfahren 52, 53, B6 und C0 notwendig; bei
591
+ #diesen Verfahren geht die BLZ in die Berechnung der Prüfziffer ein. Bei allen anderen
592
+ #Prüfzifferverfahren wird er ignoriert. Wird er bei einem dieser Verfahren nicht angegeben,
593
+ #wird stattdessen eine Test-BLZ eingesetzt.
594
+
595
+ def konto_check_pz?(*args)
596
+ KontoCheckRaw::konto_check_pz(*args)>0?true:false
597
+ end
598
+
599
+ #===<tt>KontoCheck::valid_pz(pz,kto[,blz])</tt>
600
+ #=====<tt>KontoCheck::konto_check_pz(pz,kto[,blz])</tt>
601
+ #=====<tt>KontoCheckRaw::konto_check_pz(pz,kto[,blz])</tt>
602
+ #Diese Funktion ist ein Alias für KontoCheck::konto_check_pz
603
+
604
+ def valid_pz(*args)
605
+ KontoCheckRaw::konto_check_pz(*args)
606
+ end
607
+
608
+ #===<tt>KontoCheck::valid_pz?(pz,kto[,blz])</tt>
609
+ #=====<tt>KontoCheck::valid_pz(pz,kto[,blz])</tt>
610
+ #=====<tt>KontoCheckRaw::konto_check_pz(pz,kto[,blz])</tt>
611
+ #Diese Funktion ist ein Alias für KontoCheck::konto_check_pz?()
612
+
613
+ def valid_pz?(*args)
614
+ KontoCheckRaw::konto_check_pz(*args)>0?true:false
615
+ end
616
+
617
+ #==== <tt>KontoCheck::bank_valid(blz [,filiale])</tt>
618
+ #======<tt>KontoCheckRaw::bank_valid(blz [,filiale])</tt>
619
+ #======<tt>KontoCheck::bank_valid?(blz [,filiale])</tt>
620
+ #Diese Funktion testet, ob eine gegebene BLZ gültig ist. Der Rückgabewert ist ein
621
+ #Statuscode mit den unten angegebenen Werten. Falls das Argument filiale auch
622
+ #angegeben ist, wird zusätzlich noch getestet, ob eine Filiale mit dem gegebenen
623
+ #Index existiert.
624
+ #
625
+ #Mögliche Rückgabewerte sind:
626
+ #
627
+ # -55 (LUT2_INDEX_OUT_OF_RANGE) "Der Index für die Filiale ist ungültig"
628
+ # -53 (LUT2_BLZ_NOT_INITIALIZED) "Das Feld BLZ wurde nicht initialisiert"
629
+ # -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
630
+ # -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
631
+ # 1 (OK) "ok"
632
+
633
+ def bank_valid(*args)
634
+ KontoCheckRaw::bank_valid(*args)
635
+ end
636
+
637
+ #====<tt>KontoCheck::bank_valid?(blz [,filiale])</tt>
638
+ #======<tt>KontoCheckRaw::bank_valid(blz [,filiale])</tt>
639
+ #======<tt>KontoCheck::bank_valid(blz [,filiale])</tt>
640
+ #Dies ist eine convenience function zu KontoCheck::bank_valid(). Es wird getestet, ob
641
+ #die gegebene BLZ (und evl. noch der Filialindex) gültig ist. Der Rückgabewert ist
642
+ #nur true oder false.
643
+
644
+ def bank_valid?(*args)
645
+ KontoCheckRaw::bank_valid(*args)>0?true:false
646
+ end
647
+
648
+ #===<tt>KontoCheck::bank_filialen(blz)</tt>
649
+ #=====<tt>KontoCheckRaw::bank_filialen(blz)</tt>
650
+ #
651
+ #Diese Funktion liefert die Anzahl Filialen einer Bank (inklusive Hauptstelle).
652
+ #Die LUT-Datei muß dazu natürlich mit den Filialdaten generiert sein, sonst
653
+ #wird für alle Banken nur 1 zurückgegeben.
654
+
655
+ def bank_filialen(*args)
656
+ KontoCheckRaw::bank_filialen(*args).first
657
+ end
658
+
659
+ #===<tt>KontoCheck::bank_name(blz[,filiale])</tt>
660
+ #=====<tt>KontoCheckRaw::bank_name(blz[,filiale])</tt>
661
+ #
662
+ #Diese Funktion liefert den Namen einer Bank, oder nil im Fehlerfall.
663
+
664
+ def bank_name(*args)
665
+ KontoCheckRaw::bank_name(*args).first
666
+ end
667
+
668
+ #===<tt>KontoCheck::bank_name_kurz(blz [,filiale])</tt>
669
+ #=====<tt>KontoCheckRaw::bank_name_kurz(blz [,filiale])</tt>
670
+ #
671
+ #Diese Funktion liefert den Kurznamen einer Bank, oder nil im Fehlerfall.
672
+
673
+ def bank_name_kurz(*args)
674
+ KontoCheckRaw::bank_name_kurz(*args).first
675
+ end
676
+
677
+ #===<tt>KontoCheck::bank_ort(blz [,filiale])</tt>
678
+ #=====<tt>KontoCheckRaw::bank_ort(blz [,filiale])</tt>
679
+ #
680
+ #Diese Funktion liefert den Ort einer Bank. Falls der Parameter filiale nicht
681
+ #angegeben ist, wird der Sitz der Hauptstelle ausgegeben. Im Fehlerfall wird
682
+ #für den Ort nil zurückgegeben.
683
+
684
+ def bank_ort(*args)
685
+ KontoCheckRaw::bank_ort(*args).first
686
+ end
687
+
688
+ #===<tt>KontoCheck::bank_plz(blz [,filiale])</tt>
689
+ #=====<tt>KontoCheckRaw::bank_plz(blz [,filiale])</tt>
690
+ #
691
+ #Diese Funktion liefert die Postleitzahl einer Bank. Falls der Parameter
692
+ #filiale nicht angegeben ist, wird die PLZ der Hauptstelle ausgegeben. Im
693
+ #Fehlerfall wird für die PLZ nil zurückgegeben.
694
+
695
+ def bank_plz(*args)
696
+ KontoCheckRaw::bank_plz(*args).first
697
+ end
698
+
699
+ #===<tt>KontoCheck::bank_pz(blz)</tt>
700
+ #=====<tt>KontoCheckRaw::bank_pz(blz)</tt>
701
+ #
702
+ #Diese Funktion liefert die Prüfziffer einer Bank. Die Funktion unterstützt
703
+ #keine Filialen; zu jeder BLZ kann es in der LUT-Datei nur eine
704
+ #Prüfziffermethode geben.
705
+
706
+ def bank_pz(blz)
707
+ KontoCheckRaw::bank_pz(blz).first
708
+ end
709
+
710
+ #===<tt>KontoCheck::bank_bic(blz [,filiale])</tt>
711
+ #=====<tt>KontoCheckRaw::bank_bic(blz [,filiale])</tt>
712
+ #
713
+ #Diese Funktion liefert den BIC (Bank Identifier Code) einer Bank. Im
714
+ #Fehlerfall wird nil zurückgegeben.
715
+
716
+ def bank_bic(*args)
717
+ KontoCheckRaw::bank_bic(*args).first
718
+ end
719
+
720
+ #===<tt>KontoCheck::bank_aenderung(blz [,filiale])</tt>
721
+ #=====<tt>KontoCheckRaw::bank_aenderung(blz [,filiale])</tt>
722
+ #
723
+ #Diese Funktion liefert das 'Änderung' Flag einer Bank (als string). Mögliche
724
+ #Werte sind: A (Addition), M (Modified), U (Unchanged), D (Deletion).
725
+
726
+ def bank_aenderung(*args)
727
+ KontoCheckRaw::bank_aenderung(*args).first
728
+ end
729
+
730
+ #===<tt>KontoCheck::bank_loeschung(blz [,filiale])</tt>
731
+ #=====<tt>KontoCheckRaw::bank_loeschung(blz [,filiale])</tt>
732
+ #
733
+ #Diese Funktion liefert das Lösch-Flag für eine Bank zurück (als Integer;
734
+ #mögliche Werte sind 0 und 1); im Fehlerfall wird nil zurückgegeben.
735
+
736
+ def bank_loeschung(*args)
737
+ KontoCheckRaw::bank_loeschung(*args).first
738
+ end
739
+
740
+ #===<tt>KontoCheck::bank_nachfolge_blz(blz [,filiale])</tt>
741
+ #=====<tt>KontoCheckRaw::bank_nachfolge_blz(blz [,filiale])</tt>
742
+ #Diese Funktion liefert die Nachfolge-BLZ für eine Bank, die gelöscht werden
743
+ #soll (bei der das 'Löschung' Flag 1 ist).
744
+
745
+ def bank_nachfolge_blz(*args)
746
+ KontoCheckRaw::bank_nachfolge_blz(*args).first
747
+ end
748
+
749
+ #===<tt>KontoCheck::bank_pan(blz [,filiale])</tt>
750
+ #=====<tt>KontoCheckRaw::bank_pan(blz [,filiale])</tt>
751
+ #
752
+ #Diese Funktion liefert den PAN (Primary Account Number) einer Bank.
753
+
754
+ def bank_pan(*args)
755
+ KontoCheckRaw::bank_pan(*args).first
756
+ end
757
+
758
+ #===<tt>KontoCheck::bank_nr(blz [,filiale])</tt>
759
+ #=====<tt>KontoCheckRaw::bank_nr(blz [,filiale])</tt>
760
+ #
761
+ #Diese Funktion liefert die laufende Nummer einer Bank (internes Feld der BLZ-Datei). Der Wert
762
+ #wird wahrscheinlich nicht oft benötigt, ist aber der Vollständigkeit halber enthalten.
763
+
764
+ def bank_nr(*args)
765
+ KontoCheckRaw::bank_nr(*args).first
766
+ end
767
+
768
+ #===<tt>KontoCheck::bank_alles(blz [,filiale])</tt>
769
+ #=====<tt>KontoCheckRaw::bank_alles(blz [,filiale])</tt>
770
+ #
771
+ #Dies ist eine Mammutfunktion, die alle vorhandenen Informationen über eine
772
+ #Bank zurückliefert. Das Ergebnis ist ein Array mit den folgenden Komponenten:
773
+ # 0: Statuscode
774
+ # 1: Anzahl Filialen
775
+ # 2: Name
776
+ # 3: Kurzname
777
+ # 4: PLZ
778
+ # 5: Ort
779
+ # 6: PAN
780
+ # 7: BIC
781
+ # 8: Prüfziffer
782
+ # 9: Laufende Nr.
783
+ # 10: Änderungs-Flag
784
+ # 11: Löeschung-Flag
785
+ # 12: Nachfolge-BLZ
786
+ #
787
+ #Der Statuscode (Element 0) kann folgende Werte annehmen:
788
+ #
789
+ # -40 (LUT2_NOT_INITIALIZED) "die Programmbibliothek wurde noch nicht initialisiert"
790
+ # -38 (LUT2_PARTIAL_OK) "es wurden nicht alle Blocks geladen"
791
+ # -5 (INVALID_BLZ_LENGTH) "die Bankleitzahl ist nicht achtstellig"
792
+ # -4 (INVALID_BLZ) "die Bankleitzahl ist ungültig"
793
+ # 1 (OK) "ok"
794
+ #
795
+ #Anmerkung: Falls der Statuscode LUT2_PARTIAL_OK ist, wurden bei der
796
+ #Initialisierung nicht alle Blocks geladen (oder es sind nicht alle verfügbar);
797
+ #die entsprechenden Elemente haben dann den Wert nil.
798
+
799
+ def bank_alles(*args)
800
+ KontoCheckRaw::bank_alles(*args)
801
+ end
802
+
803
+ #===<tt>KontoCheck::iban2bic(iban)</tt>
804
+ #=====<tt>KontoCheckRaw::iban2bic(iban)</tt>
805
+ #
806
+ #Diese Funktion bestimmt zu einer (deutschen!) IBAN den zugehörigen BIC (Bank
807
+ #Identifier Code). Der BIC wird für eine EU-Standard-Überweisung im
808
+ #SEPA-Verfahren (Single Euro Payments Area) benötigt; für die deutschen Banken
809
+ #ist er in der BLZ-Datei enthalten. Nähere Infos gibt es z.B. unter
810
+ #http://www.bic-code.de/ .
811
+
812
+ def iban2bic(*args)
813
+ KontoCheckRaw::iban2bic(*args).first
814
+ end
815
+
816
+ #===<tt>KontoCheck::iban_check(iban)</tt>
817
+ #=====<tt>KontoCheckRaw::iban_check(iban)</tt>
818
+ #
819
+ #Diese Funktion testet einen IBAN. Dabei wird sowohl die Prüfziffer des IBAN
820
+ #getestet als auch (bei deutschen Konten) die Prüfziffer der Bankverbindung
821
+ #(aus der Kontonummer). Diese Funktion gibt nur den globalen Status zurück;
822
+ #bei der Funktion KontoCheckRaw::iban_check() kann man zusätzlich noch den
823
+ #Status der Kontenprüfung abfragen.
824
+ #
825
+ #Mögliche Rückgabewerte sind:
826
+ #
827
+ # -67 (IBAN_OK_KTO_NOT) "Die Prüfziffer der IBAN stimmt, die der Kontonummer nicht"
828
+ # -66 (KTO_OK_IBAN_NOT) "Die Prüfziffer der Kontonummer stimmt, die der IBAN nicht"
829
+ # 0 (FALSE) "falsch"
830
+ # 1 (OK) "ok"
831
+
832
+ def iban_check(*args)
833
+ KontoCheckRaw::iban_check(*args).first
834
+ end
835
+
836
+ #===<tt>KontoCheck::iban_gen(kto,blz)</tt>
837
+ #=====<tt>KontoCheckRaw::iban_gen(kto,blz)</tt>
838
+ #Diese Funktion generiert aus (deutscher) BLZ und Konto einen IBAN. Hierbei
839
+ #ist zu beachten, daß nicht alle Banken der Selbstberechnung zugestimmt
840
+ #haben. Es gibt von den Sparkassen eine Liste dieser Institute; sie ist auch
841
+ #in der LUT-Datei mit der ID 22 (1. Eigene IBAN) enthalten. Bei diesen Banken
842
+ #wird - falls der Block in der LUT-Datei enthalten ist - keine Berechnung
843
+ #durchgeführt, sondern die Status-Variable auf NO_OWN_IBAN_CALCULATION
844
+ #gesetzt.
845
+ #
846
+ #Alle Banken der Liste erzeugen eine Statusmeldung mit dem Wert
847
+ #OK_UNTERKONTO_ATTACHED, OK_UNTERKONTO_POSSIBLE oder OK_UNTERKONTO_GIVEN. Falls
848
+ #einer dieser Stauswerte zurückgegeben wird, ist somit immer Vorsicht geboten;
849
+ #der generierte IBAN sollte direkt bei dem zugehörigen Institut überprüft
850
+ #werden.
851
+ #
852
+ #Hier ein Auszug aus der Anleitung des SEPA Account Converters:
853
+ #
854
+ #Der SEPA Account Converter ist so eingestellt, dass nur Kontoverbindungen in IBAN und
855
+ #BIC umgerechnet werden, bei denen das ausgebende Kreditinstitut der Umrechnung
856
+ #zugestimmt hat. Kreditinstitute, welche einer Umrechnung nicht zugestimmt haben und
857
+ #welche zum Teil spezielle, dem SEPA Account Converter nicht bekannte Umrechnungs-
858
+ #methoden verwenden, sind in der Datei "CONFIG.INI" hinterlegt. Durch Löschen der Datei
859
+ #"CONFIG.INI" aus dem Programmverzeichnis haben Sie die Möglichkeit, eine Umrechnung
860
+ #für alle Konten durchzuführen. Bitte beachten Sie dabei, dass die so erhaltenen IBAN und
861
+ #BIC fehlerhaft sein können und deshalb mit ihren Kunden zu überprüfen sind.
862
+ #
863
+ #Weblinks:
864
+ #
865
+ # https://www.sparkasse-rhein-neckar-nord.de/pdf/content/sepa/kurzanleitung.pdf
866
+ # https://www.sparkasse-rhein-neckar-nord.de/firmenkunden/internationales_geschaeft/sepa/vorteile/index.php
867
+ # https://www.sparkasse-rhein-neckar-nord.de/firmenkunden/internationales_geschaeft/sepa/vorteile/sepa_account_converter.msi
868
+ #
869
+ #Es ist möglich, sowohl die Prüfung auf Stimmigkeit der Kontonummer als auch
870
+ #auf Zulässigkeit der Selbstberechnung zu deaktivieren. Falls die IBAN trotz
871
+ #fehlender Zustimmung der Bank berechnet werden, ist vor die BLZ ein @ zu
872
+ #setzen; falls auch bei falscher Bankverbindung ein IBAN berechnet werden
873
+ #soll, ist vor die BLZ ein + zu setzen. Um beide Prüfungen zu deaktiviern,
874
+ #kann @+ (oder +@) vor die BLZ gesetzt werden. Die so erhaltenen IBANs sind
875
+ #dann i.A. allerdings wohl nicht gültig.
876
+ #
877
+ #Rückgabewert ist der generierte IBAN oder nil, falls ein Fehler aufgetreten ist. Die genauere
878
+ #Fehlerursache läßt sich mit der Funktion KontoCheckRaw::iban_gen() feststellen.
879
+
880
+ def iban_gen(*args)
881
+ KontoCheckRaw::iban_gen(*args).first
882
+ end
883
+
884
+ #===<tt>KontoCheck::ipi_gen(zweck)</tt>
885
+ #=====<tt>KontoCheckRaw::ipi_gen(zweck)</tt>
886
+ #
887
+ #Diese Funktion generiert einen "Strukturierten Verwendungszweck" für SEPA-Überweisungen.
888
+ #Der Rückgabewert ist der Strukturierte Verwendungszweck als String oder nil, falls ein Fehler
889
+ #aufgetreten ist.
890
+ #
891
+ #Der String für den Strukturierten Verwendungszweck darf maximal 18 Byte lang sein und nur
892
+ #alphanumerische Zeichen enthalten (also auch keine Umlaute). Die Funktion KontoCheckRaw::ipi_gen()
893
+ #gibt einen Statuscode zurück, der etwas nähere Infos im Fehlerfall enthält.
894
+
895
+ def ipi_gen(zweck)
896
+ KontoCheckRaw::ipi_gen(zweck).first
897
+ end
898
+
899
+ #===<tt>KontoCheck::ipi_check(zweck)</tt>
900
+ #=====<tt>KontoCheckRaw::ipi_check(zweck)</tt>
901
+ #
902
+ #Die Funktion testet, ob ein Strukturierter Verwendungszweck gültig ist (Anzahl Zeichen, Prüfziffer). Der
903
+ #Rückgabewert ist true oder false.
904
+
905
+ def ipi_check(zweck)
906
+ KontoCheckRaw::ipi_check(zweck)>0?true:false
907
+ end
908
+
909
+ #===<tt>KontoCheck::suche()</tt>
910
+ #=====<tt>KontoCheck::search()</tt>
911
+ #=====<tt>KontoCheck::SEARCH_KEYS</tt>
912
+ #=====<tt>KontoCheck::SEARCH_KEY_MAPPINGS</tt>
913
+ #=====<tt>KontoCheckRaw::bank_suche_bic(search_bic)</tt>
914
+ #=====<tt>KontoCheckRaw::bank_suche_blz(blz1[,blz2])</tt>
915
+ #=====<tt>KontoCheckRaw::bank_suche_namen(name)</tt>
916
+ #=====<tt>KontoCheckRaw::bank_suche_namen_kurz(short_name)</tt>
917
+ #=====<tt>KontoCheckRaw::bank_suche_plz(plz1[,plz2])</tt>
918
+ #=====<tt>KontoCheckRaw::bank_suche_pz(pz1[,pz2])</tt>
919
+ #=====<tt>KontoCheckRaw::bank_suche_ort(suchort)</tt>
920
+ #
921
+ #Diese Funktion sucht alle Banken, die auf bestimmte Suchmuster passen.
922
+ #Momentan sind nur grundlegende Suchfunktionen eingebaut, und es wird auch nur
923
+ #die Suche nach einem Kriterium unterstützt; in einer späteren Version werden
924
+ #die Möglichkeiten noch erweitert werden.
925
+ #
926
+ #Eine Suche ist möglich nach den Schlüsseln BIC, Bankleitzahl, Postleitzahl,
927
+ #Prüfziffer, Ort, Name oder Kurzname. Bei den alphanumerischen Feldern (BIC,
928
+ #Ort, Name, Kurzname) ist der Suchschlüssel der Wortanfang des zu suchenden
929
+ #Feldes (ohne Unterscheidung zwischen Groß- und Kleinschreibung); bei den
930
+ #numerischen Feldern (BLZ, PLZ, Prüfziffer) ist die Suche nach einem bestimmten
931
+ #Wert oder nach einem Wertebereich möglich; dieser wird dann angegeben als
932
+ #Array mit zwei Elementen. Der Rückgabewert ist jeweils ein Array mit den
933
+ #Bankleitzahlen, oder nil falls die Suche fehlschlug. Die Ursache für eine
934
+ #fehlgeschlagene Suche läßt sich nur mit den Funktionen der KontoCheckRaw
935
+ #Bibliothek näher lokalisieren.
936
+ #
937
+ #Die Funktion KontoCheck::search() ist ein Alias für die Funktion
938
+ #KontoCheck::suche().
939
+ #
940
+ #Die möglichen Suchschlüssel sind in den Variablen KontoCheck::SEARCH_KEYS
941
+ #definiert; in der Variablen KontoCheck::SEARCH_KEY_MAPPINGS finden sich noch
942
+ #einige Aliasdefinitionen zu den Suchschlüsseln.
943
+ #
944
+ #Hier einige Beispiele möglicher Suchaufrufe:
945
+ #
946
+ # s=KontoCheck::suche( :blz => [13051172,13070172] ) BLZ-Bereich
947
+ # s=KontoCheck::suche( :blz => [13051172,13070172,333] ) überzählige Array-Elemente werden ignoriert
948
+ # s=KontoCheck::suche( :bic => 'genodef1wi' ) BIC Teilstring
949
+ # s=KontoCheck::suche( :plz => [68100,68200] ) PLZ-Bereich
950
+ # s=KontoCheck::suche( :pz => 90 ) Prüfziffer numerisch
951
+ # s=KontoCheck::suche( :pz => '90' ) Prüfziffer als String
952
+ # s=KontoCheck::suche( :pz => ['95',98] ) Prüfzifferbereich gemischt String/numerisch auch möglich
953
+ # s=KontoCheck::suche( :name => 'postbank' )
954
+ # s=KontoCheck::suche( :ort => 'lingenfeld' )
955
+
956
+ def suche(options={})
957
+ key = options.keys.first.to_sym
958
+ value = options[key]
959
+ key = SEARCH_KEY_MAPPINGS[key] if SEARCH_KEY_MAPPINGS.keys.include?(key)
960
+ raise 'search key not supported' unless SEARCH_KEYS.include?(key)
961
+ raw_results = KontoCheckRaw::send("bank_suche_#{key}", value)
962
+ raw_results[1]
963
+ end
964
+ alias_method :search, :suche
965
+
966
+ #===<tt>KontoCheck::version()</tt>
967
+ #=====<tt>KontoCheckRaw::version()</tt>
968
+ #Diese Funktion gibt den Versions-String der C-Bibliothek zurück.
969
+
970
+ def version()
971
+ KontoCheckRaw::version()
972
+ end
973
+
974
+ end
975
+
976
+ end