konto_check 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,692 @@
1
+ #line 6 "konto_check_h.lx"
2
+ /*
3
+ * ##########################################################################
4
+ * # Dies ist konto_check, ein Programm zum Testen der Pr�fziffern #
5
+ * # von deutschen Bankkonten. Es kann als eigenst�ndiges Programm #
6
+ * # (z.B. mit der beigelegten main() Routine) oder als Library zur #
7
+ * # Verwendung in anderen Programmen bzw. Programmiersprachen benutzt #
8
+ * # werden. #
9
+ * # #
10
+ * # Copyright (C) 2002-2007 Michael Plugge <m.plugge@hs-mannheim.de> #
11
+ * # #
12
+ * # Dieses Programm ist freie Software; Sie d�rfen es unter den #
13
+ * # Bedingungen der GNU Lesser General Public License, wie von der Free #
14
+ * # Software Foundation ver�ffentlicht, weiterverteilen und/oder #
15
+ * # modifizieren; entweder gem�� Version 2.1 der Lizenz oder (nach Ihrer #
16
+ * # Option) jeder sp�teren Version. #
17
+ * # #
18
+ * # Die GNU LGPL ist weniger infekti�s als die normale GPL; Code, der von #
19
+ * # Ihnen hinzugef�gt wird, unterliegt nicht der Offenlegungspflicht #
20
+ * # (wie bei der normalen GPL); au�erdem m�ssen Programme, die diese #
21
+ * # Bibliothek benutzen, nicht (L)GPL lizensiert sein, sondern k�nnen #
22
+ * # beliebig kommerziell verwertet werden. Die Offenlegung des Sourcecodes#
23
+ * # bezieht sich bei der LGPL *nur* auf ge�nderten Bibliothekscode. #
24
+ * # #
25
+ * # Dieses Programm wird in der Hoffnung weiterverbreitet, da� es #
26
+ * # n�tzlich sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die #
27
+ * # implizierte Garantie der MARKTREIFE oder der VERWENDBARKEIT F�R #
28
+ * # EINEN BESTIMMTEN ZWECK. Mehr Details finden Sie in der GNU Lesser #
29
+ * # General Public License. #
30
+ * # #
31
+ * # Sie sollten eine Kopie der GNU Lesser General Public License #
32
+ * # zusammen mit diesem Programm erhalten haben; falls nicht, #
33
+ * # schreiben Sie an die Free Software Foundation, Inc., 59 Temple #
34
+ * # Place, Suite 330, Boston, MA 02111-1307, USA. Sie k�nnen sie auch #
35
+ * # von #
36
+ * # #
37
+ * # http://www.gnu.org/licenses/lgpl.html #
38
+ * # #
39
+ * # im Internet herunterladen. #
40
+ * # #
41
+ * ##########################################################################
42
+ */
43
+
44
+ #ifndef KONTO_CHECK_H_INCLUDED
45
+ #define KONTO_CHECK_H_INCLUDED
46
+
47
+ /*
48
+ * ##########################################################################
49
+ * # Fallls das folgende Makro auf 1 gesetzt wird, werden unterschiedliche #
50
+ * # Interpretationen der Pr�fziffermethoden interpretiert wie in BAV #
51
+ * # (Bank Account Validator, http://sourceforge.net/projects/bav) #
52
+ * # Dieses Makro dient zum Test der beiden Pakete, damit bei den Tests #
53
+ * # nicht immer Unterschiede ausgegeben werden, wo nur (bekannte) #
54
+ * # unterschiedliche Interpretationen der Berechnungsmethoden existieren. #
55
+ * ##########################################################################
56
+ */
57
+ #ifndef BAV_KOMPATIBEL
58
+ #define BAV_KOMPATIBEL 0
59
+ #endif
60
+
61
+ /*
62
+ * ##########################################################################
63
+ * # Fallls das Makro DEBUG auf 1 gesetzt wird, werden zwei- und drei- #
64
+ * # stellige Methoden (Methode + evl. Untermethode) akzeptiert. #
65
+ * # Au�erdem wird die Pr�fziffer (pz) als globale Variable deklariert. #
66
+ * ##########################################################################
67
+ */
68
+ #ifndef DEBUG
69
+ #define DEBUG 1
70
+ #endif
71
+
72
+ /*
73
+ * ##########################################################################
74
+ * # falls das folgende Makro auf 1 gesetzt wird, werden f�r das PHP-Modul #
75
+ * # symbolische Konstanten definiert (analog zu den #define's aus der #
76
+ * # C Bibliothek. Der Wert false ist in PHP allerdings schon belegt und #
77
+ * # kann nicht verwendet werden; stattdessen wird NOT_OK definiert. #
78
+ * # gesamte Datei nach BLZs sortiert wird). #
79
+ * ##########################################################################
80
+ */
81
+ #define SYMBOLIC_RETVALS 1
82
+
83
+ /*
84
+ * ##########################################################################
85
+ * # falls das folgende Makro auf 1 gesetzt wird, werden Dummys f�r die #
86
+ * # alten globalen Variablen eingebunden; die alte Funktionalit�t wird #
87
+ * # jedoch aufgrund der Threadfestigkeit nicht implementiert. #
88
+ * ##########################################################################
89
+ */
90
+ #define INCLUDE_DUMMY_GLOBALS 0
91
+
92
+ /*
93
+ * ##########################################################################
94
+ * # falls das folgende Makro auf 1 gesetzt wird, werden die Zweigstellen #
95
+ * # in der LUT-Datei nach Postleitzahlen sortiert; andernfalls wird die #
96
+ * # Reihenfolge aus der Datei der Deutschen Bundesbank �bernommen (mit der #
97
+ * # Ausnahme, da� Hauptstellen vor die Zweigstellen gesetzt werden und die #
98
+ * # gesamte Datei nach BLZs sortiert wird). #
99
+ * ##########################################################################
100
+ */
101
+ #define SORT_PLZ 0
102
+
103
+ /*
104
+ * ######################################################################
105
+ * # DLL-Optionen f�r Windows #
106
+ * # Der DLL-Code wurde aus der Datei dllhelpers (beim MinGW-Compiler #
107
+ * # enthalten, http://www.mingw.org/) entnommen #
108
+ * # #
109
+ * # Falls das Makro USE_CDECL gesetzt ist, wird als Aufrufmethode #
110
+ * # CDECL genommen, ansonsten STDCALL (Default). #
111
+ * ######################################################################
112
+ */
113
+
114
+ #ifdef _WIN32
115
+ # if USE_CDECL
116
+ # if BUILD_DLL /* DLL kompilieren */
117
+ # define DLL_EXPORT __declspec (dllexport)
118
+ # define DLL_EXPORT_V __declspec (dllexport)
119
+ # elif USE_DLL /* DLL in einem anderen Programm benutzen */
120
+ # define DLL_EXPORT __declspec (dllimport)
121
+ # define DLL_EXPORT_V __declspec (dllimport)
122
+ # else /* kein DLL-Krempel erforderlich */
123
+ # define DLL_EXPORT
124
+ # define DLL_EXPORT_V
125
+ # endif
126
+ # else
127
+ # if BUILD_DLL /* DLL kompilieren */
128
+ # define DLL_EXPORT __declspec (dllexport) __stdcall
129
+ # define DLL_EXPORT_V __declspec (dllexport)
130
+ # elif USE_DLL /* DLL in einem anderen Programm benutzen */
131
+ # define DLL_EXPORT __declspec (dllimport) __stdcall
132
+ # define DLL_EXPORT_V __declspec (dllimport)
133
+ # else /* kein DLL-Krempel erforderlich */
134
+ # define DLL_EXPORT
135
+ # define DLL_EXPORT_V
136
+ # endif
137
+ # endif
138
+ # define localtime_r(timep,result) localtime(timep)
139
+ #else
140
+ # define DLL_EXPORT
141
+ # define DLL_EXPORT_V
142
+ #endif
143
+
144
+ /*
145
+ * ######################################################################
146
+ * # Defaultnamen und Suchpfad f�r die LUT-Datei #
147
+ * ######################################################################
148
+ */
149
+
150
+ #define DEFAULT_LUT_NAME "blz.lut","blz.lut2","blz.lut1"
151
+
152
+ #if _WIN32>0
153
+ #define DEFAULT_LUT_PATH ".","C:","C:\\Programme\\konto_check"
154
+ #else
155
+ #define DEFAULT_LUT_PATH ".","/usr/local/etc","/etc","/usr/local/bin","/opt/konto_check"
156
+ #endif
157
+
158
+ /* maximale L�nge f�r Default-Suchpfad und Dateiname der LUT-Datei */
159
+ #define LUT_PATH_LEN 128
160
+
161
+ /*
162
+ * ######################################################################
163
+ * # Felder f�r die LUT-Datei (ab LUT-Version 2.0) #
164
+ * ######################################################################
165
+ */
166
+
167
+ #define DEFAULT_LUT_FIELDS_NUM 5
168
+ #define DEFAULT_LUT_FIELDS lut_set_5
169
+ #define DEFAULT_LUT_VERSION 3
170
+ #define DEFAULT_SLOTS 40
171
+ #define DEFAULT_INIT_LEVEL 5
172
+ #define LAST_LUT_BLOCK 100
173
+
174
+ /* Das folgende Makro bestimmt das Verhalten, wenn zu einer LUT-Datei Blocks
175
+ * hinzugef�gt werden sollen und bereits (mindestens) ein Block mit
176
+ * demselben Typ in der Datei enthalten ist. Falls das Makro 1 ist, wird f�r
177
+ * den neuen Block der alte Slots der LUT-Datei benutzt; bei 0 wird ein
178
+ * neuer Slot allokiert.
179
+ *
180
+ * Falls das Makro 0 ist, kann man auch sp�ter noch auf alte Blocks
181
+ * zugreifen (falls das einmal notwendig sein sollte); allerdings l��t sich
182
+ * das LUT-Verzeichnis nicht vergr��ern, so da� u.U. nach mehreren Updates
183
+ * alle Slots belegt sind und daher keine neuen Blocks mehr geschrieben
184
+ * werden k�nnen.
185
+ */
186
+
187
+ #define REPLACE_LUT_DIR_ENTRIES 1
188
+
189
+ #define LUT2_BLZ 1
190
+ #define LUT2_FILIALEN 2
191
+ #define LUT2_NAME 3
192
+ #define LUT2_PLZ 4
193
+ #define LUT2_ORT 5
194
+ #define LUT2_NAME_KURZ 6
195
+ #define LUT2_PAN 7
196
+ #define LUT2_BIC 8
197
+ #define LUT2_PZ 9
198
+ #define LUT2_NR 10
199
+ #define LUT2_AENDERUNG 11
200
+ #define LUT2_LOESCHUNG 12
201
+ #define LUT2_NACHFOLGE_BLZ 13
202
+ #define LUT2_NAME_NAME_KURZ 14
203
+ #define LUT2_INFO 15
204
+
205
+ #define LUT2_2_BLZ 101
206
+ #define LUT2_2_FILIALEN 102
207
+ #define LUT2_2_NAME 103
208
+ #define LUT2_2_PLZ 104
209
+ #define LUT2_2_ORT 105
210
+ #define LUT2_2_NAME_KURZ 106
211
+ #define LUT2_2_PAN 107
212
+ #define LUT2_2_BIC 108
213
+ #define LUT2_2_PZ 109
214
+ #define LUT2_2_NR 110
215
+ #define LUT2_2_AENDERUNG 111
216
+ #define LUT2_2_LOESCHUNG 112
217
+ #define LUT2_2_NACHFOLGE_BLZ 113
218
+ #define LUT2_2_NAME_NAME_KURZ 114
219
+ #define LUT2_2_INFO 115
220
+
221
+ #ifdef KONTO_CHECK_VARS
222
+ char *lut2_feld_namen[256];
223
+ #else
224
+ extern char *lut2_feld_namen[256];
225
+ #endif
226
+
227
+ /*
228
+ * ######################################################################
229
+ * # m�gliche R�ckgabewerte von kto_check() & Co #
230
+ * ######################################################################
231
+ */
232
+
233
+ #undef FALSE
234
+ #define INVALID_SEARCH_RANGE -79
235
+ #define KEY_NOT_FOUND -78
236
+ #define BAV_FALSE -77
237
+ #define LUT2_NO_USER_BLOCK -76
238
+ #define INVALID_SET -75
239
+ #define NO_GERMAN_BIC -74
240
+ #define IPI_CHECK_INVALID_LENGTH -73
241
+ #define IPI_INVALID_CHARACTER -72
242
+ #define IPI_INVALID_LENGTH -71
243
+ #define LUT1_FILE_USED -70
244
+ #define MISSING_PARAMETER -69
245
+ #define IBAN2BIC_ONLY_GERMAN -68
246
+ #define IBAN_OK_KTO_NOT -67
247
+ #define KTO_OK_IBAN_NOT -66
248
+ #define TOO_MANY_SLOTS -65
249
+ #define INIT_FATAL_ERROR -64
250
+ #define INCREMENTAL_INIT_NEEDS_INFO -63
251
+ #define INCREMENTAL_INIT_FROM_DIFFERENT_FILE -62
252
+ #define DEBUG_ONLY_FUNCTION -61
253
+ #define LUT2_INVALID -60
254
+ #define LUT2_NOT_YET_VALID -59
255
+ #define LUT2_NO_LONGER_VALID -58
256
+ #define LUT2_GUELTIGKEIT_SWAPPED -57
257
+ #define LUT2_INVALID_GUELTIGKEIT -56
258
+ #define LUT2_INDEX_OUT_OF_RANGE -55
259
+ #define LUT2_INIT_IN_PROGRESS -54
260
+ #define LUT2_BLZ_NOT_INITIALIZED -53
261
+ #define LUT2_FILIALEN_NOT_INITIALIZED -52
262
+ #define LUT2_NAME_NOT_INITIALIZED -51
263
+ #define LUT2_PLZ_NOT_INITIALIZED -50
264
+ #define LUT2_ORT_NOT_INITIALIZED -49
265
+ #define LUT2_NAME_KURZ_NOT_INITIALIZED -48
266
+ #define LUT2_PAN_NOT_INITIALIZED -47
267
+ #define LUT2_BIC_NOT_INITIALIZED -46
268
+ #define LUT2_PZ_NOT_INITIALIZED -45
269
+ #define LUT2_NR_NOT_INITIALIZED -44
270
+ #define LUT2_AENDERUNG_NOT_INITIALIZED -43
271
+ #define LUT2_LOESCHUNG_NOT_INITIALIZED -42
272
+ #define LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED -41
273
+ #define LUT2_NOT_INITIALIZED -40
274
+ #define LUT2_FILIALEN_MISSING -39
275
+ #define LUT2_PARTIAL_OK -38
276
+ #define LUT2_Z_BUF_ERROR -37
277
+ #define LUT2_Z_MEM_ERROR -36
278
+ #define LUT2_Z_DATA_ERROR -35
279
+ #define LUT2_BLOCK_NOT_IN_FILE -34
280
+ #define LUT2_DECOMPRESS_ERROR -33
281
+ #define LUT2_COMPRESS_ERROR -32
282
+ #define LUT2_FILE_CORRUPTED -31
283
+ #define LUT2_NO_SLOT_FREE -30
284
+ #define UNDEFINED_SUBMETHOD -29
285
+ #define EXCLUDED_AT_COMPILETIME -28
286
+ #define INVALID_LUT_VERSION -27
287
+ #define INVALID_PARAMETER_STELLE1 -26
288
+ #define INVALID_PARAMETER_COUNT -25
289
+ #define INVALID_PARAMETER_PRUEFZIFFER -24
290
+ #define INVALID_PARAMETER_WICHTUNG -23
291
+ #define INVALID_PARAMETER_METHODE -22
292
+ #define LIBRARY_INIT_ERROR -21
293
+ #define LUT_CRC_ERROR -20
294
+ #define FALSE_GELOESCHT -19
295
+ #define OK_NO_CHK_GELOESCHT -18
296
+ #define OK_GELOESCHT -17
297
+ #define BLZ_GELOESCHT -16
298
+ #define INVALID_BLZ_FILE -15
299
+ #define LIBRARY_IS_NOT_THREAD_SAFE -14
300
+ #define FATAL_ERROR -13
301
+ #define INVALID_KTO_LENGTH -12
302
+ #define FILE_WRITE_ERROR -11
303
+ #define FILE_READ_ERROR -10
304
+ #define ERROR_MALLOC -9
305
+ #define NO_BLZ_FILE -8
306
+ #define INVALID_LUT_FILE -7
307
+ #define NO_LUT_FILE -6
308
+ #define INVALID_BLZ_LENGTH -5
309
+ #define INVALID_BLZ -4
310
+ #define INVALID_KTO -3
311
+ #define NOT_IMPLEMENTED -2
312
+ #define NOT_DEFINED -1
313
+ #define FALSE 0
314
+ #define OK 1
315
+ #define OK_NO_CHK 2
316
+ #define OK_TEST_BLZ_USED 3
317
+ #define LUT2_VALID 4
318
+ #define LUT2_NO_VALID_DATE 5
319
+ #define LUT1_SET_LOADED 6
320
+ #define LUT1_FILE_GENERATED 7
321
+ #line 204 "konto_check_h.lx"
322
+
323
+ #define MAX_BLZ_CNT 30000 /* maximale Anzahl BLZ's in generate_lut() */
324
+
325
+ #ifndef INT4_DEFINED
326
+ #define INT4_DEFINED
327
+ #include <limits.h>
328
+ #if INT_MAX==2147483647
329
+ typedef int INT4;
330
+ typedef unsigned int UINT4;
331
+ #elif LONG_MAX==2147483647
332
+ typedef long INT4;
333
+ typedef unsigned long UINT4;
334
+ #else /* Notausstieg, kann 4 Byte Integer nicht bestimmen */
335
+ #error "Typedef f�r 4 Byte Integer nicht definiert"
336
+ #endif
337
+ #endif
338
+
339
+ /* in den alten Versionen war reserved als 'void *reserved[5]' definiert;
340
+ * es ist allerdings geschickter, einen Teil davon als char-Array zu
341
+ * definieren. Dieses kann dann flexibler verwendet werden (auch
342
+ * byteweise). Die Gr��e der Struktur wird auf diese Weise nicht ver�ndert.
343
+ *
344
+ * Als erstes neues Element wird pz_pos (Position der Pr�fziffer) eingef�hrt.
345
+ */
346
+ typedef struct{
347
+ char *methode;
348
+ INT4 pz_methode;
349
+ INT4 pz;
350
+ signed char pz_pos;
351
+ char reserved_chr[3*sizeof(void*)-1];
352
+ void *reserved_ptr[2];
353
+ } RETVAL;
354
+
355
+
356
+ /* ######################################################################
357
+ * # Dies ist der alte Kommentar zu KTO_CHK_CTX; die Struktur ist ab #
358
+ * # Version 3.0 obsolet und wird nicht mehr verwendet. Die Deklaration #
359
+ * # ist allerdings noch in der Headerdatei enthalten, um Abw�rtskompa- #
360
+ * # tibilit�t mit dem alten Interface zu wahren; Funktionen, die die #
361
+ * # Struktur benutzen, rufen einfach die neuen (threadfesten) #
362
+ * # Funktionen auf; die ctx-Variable wird dabei einfach ignoriert. #
363
+ * # #
364
+ * # Definition der Struktur KTO_CHK_CTX. Diese Struktur enth�lt alle #
365
+ * # globalen bzw. static Variablen der alten Library und wird bei den #
366
+ * # threadfesten Varianten als Parameter �bergeben. Damit treten keine #
367
+ * # Interferenzen zwischen verschiedenen Instanzen bei einem gleich- #
368
+ * # zeitigen Aufruf der library mehr auf, wie es bei den nicht thread- #
369
+ * # festen Varianten der Fall ist (beispielsweise werden kto_check_msg,#
370
+ * # pz_str, pz_methode und pz von jeder Instanz �berschrieben; dadurch #
371
+ * # sind diese Variablen in einem Thread-Kontext unbrauchbar. #
372
+ * # Die alten (nicht threadfesten) Varianten sind so realisiert, da� #
373
+ * # eine (static) globale Struktur global_ctx definiert wird, die von #
374
+ * # den diesen Funktionen benutzt wird. Diese Vorgehensweise ist #
375
+ * # wesentlich schneller als die Alternative, lokale Variablen f�r die #
376
+ * # Problemf�lle zu benutzen; die Umsetzung zwischen nicht threadfesten#
377
+ * # und threadfesten Variablen geschieht �ber Pr�prozessor #defines #
378
+ * # in konto_check.c. #
379
+ * ######################################################################
380
+ */
381
+ typedef struct{
382
+ char *kto_check_msg,pz_str[4];
383
+ int pz_methode;
384
+ int pz;
385
+ UINT4 cnt_blz,*blz_array,*pz_array,*blz_hash_low,*blz_hash_high,*invalid;
386
+ char lut_info[1024];
387
+ UINT4 b1[256],b2[256],b3[256],b4[256],b5[256],b6[256],b7[256],b8[256];
388
+ int c2,d2,a5,p,konto[11];
389
+ } KTO_CHK_CTX;
390
+
391
+ /*
392
+ * ######################################################################
393
+ * # kto_check(): Test eines Kontos #
394
+ * # Diese Funktion stammt aus der alten Programmier- #
395
+ * # schnittstelle und ist aus Kompatibilit�tsgr�nden noch #
396
+ * # in der Library enthalten. Da alle m�glichen F�lle #
397
+ * # behandelt werden und Initialisierung und Test nicht #
398
+ * # getrennt sind, hat diese Funktion im Vergleich zu dem #
399
+ * # neuen Interface einen relativ hohen Overhead, und #
400
+ * # sollte durch die neuen Funktionen (s.u.) ersetzt #
401
+ * # werden. #
402
+ * # #
403
+ * # Parameter: x_blz: falls 2-stellig: Pr�fziffer #
404
+ * # falls 8-stellig: Bankleitzahl #
405
+ * # #
406
+ * # kto: Kontonummer (wird vor der Berechnung #
407
+ * # linksb�ndig mit Nullen auf 10 Stellen #
408
+ * # aufgef�llt) #
409
+ * # #
410
+ * # lut_name: Dateiname der Lookup-Tabelle. #
411
+ * # Falls NULL oder ein leerer String �bergeben #
412
+ * # wird, wird DEFAULT_LUT_NAME benutzt. #
413
+ * # #
414
+ * # R�ckgabewerte: s.o. #
415
+ * ######################################################################
416
+ */
417
+ DLL_EXPORT int kto_check(char *x_blz,char *kto,char *lut_name);
418
+ DLL_EXPORT int kto_check_t(char *x_blz,char *kto,char *lut_name,KTO_CHK_CTX *ctx);
419
+ DLL_EXPORT char *kto_check_str(char *x_blz,char *kto,char *lut_name);
420
+ DLL_EXPORT char *kto_check_str_t(char *x_blz,char *kto,char *lut_name,KTO_CHK_CTX *ctx);
421
+
422
+ /* ###########################################################################
423
+ * # Die Funktion kto_check_blz() ist die neue externe Schnittstelle zur #
424
+ * # �berpr�fung einer BLZ/Kontonummer Kombination. Es wird grunds�tzlich #
425
+ * # nur mit Bankleitzahlen gearbeitet; falls eine Pr�fziffermethode direkt #
426
+ * # aufgerufen werden soll, ist stattdessen die Funktion kto_check_pz() #
427
+ * # zu benutzen. #
428
+ * # #
429
+ * # Bei dem neuen Interface sind au�erdem Initialisierung und Test #
430
+ * # getrennt. Vor einem Test ist (einmal) die Funktion kto_check_init() #
431
+ * # aufzurufen; diese Funktion liest die LUT-Datei und initialisiert einige #
432
+ * # interne Variablen. Wenn diese Funktion nicht aufgerufen wurde, wird die #
433
+ * # Fehlermeldung LUT2_NOT_INITIALIZED zur�ckgegeben. #
434
+ * # #
435
+ * # Parameter: #
436
+ * # blz: Bankleitzahl (immer 8-stellig) #
437
+ * # kto: Kontonummer #
438
+ * # #
439
+ * # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
440
+ * ###########################################################################
441
+ */
442
+
443
+ DLL_EXPORT int kto_check_blz(char *blz,char *kto);
444
+ #if DEBUG>0
445
+ DLL_EXPORT int kto_check_blz_dbg(char *blz,char *kto,RETVAL *retvals);
446
+ #endif
447
+
448
+ /* ###########################################################################
449
+ * # Die Funktion kto_check_pz() ist die neue externe Schnittstelle zur #
450
+ * # �berpr�fung einer Pr�fziffer/Kontonummer Kombination. Diese Funktion #
451
+ * # dient zum Test mit direktem Aufruf einer Pr�fziffermethode. Bei dieser #
452
+ * # Funktion kann der Aufruf von kto_check_init() entfallen. Die BLZ wird #
453
+ * # bei einigen Methoden, die auf das ESER-Altsystem zur�ckgehen, ben�tigt #
454
+ * # (52, 53, B6, C0); ansonsten wird sie ignoriert. #
455
+ * # #
456
+ * # Parameter: #
457
+ * # pz: Pr�fziffer (2- oder 3-stellig) #
458
+ * # blz: Bankleitzahl (immer 8-stellig) #
459
+ * # kto: Kontonummer #
460
+ * # #
461
+ * # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
462
+ * ###########################################################################
463
+ */
464
+
465
+ DLL_EXPORT int kto_check_pz(char *pz,char *kto,char *blz);
466
+ #if DEBUG>0
467
+ DLL_EXPORT int kto_check_pz_dbg(char *pz,char *kto,char *blz,RETVAL *retvals);
468
+ #endif
469
+
470
+ /*
471
+ * ######################################################################
472
+ * # cleanup_kto(): Aufr�umarbeiten #
473
+ * # #
474
+ * # Die Funktion gibt allokierten Speicher frei und setzt die Variable #
475
+ * # cnt_blz auf 0, um anzuzeigen, da� die Library bei Bedarf neu #
476
+ * # initialisiert werden mu�. #
477
+ * # #
478
+ * # R�ckgabewerte: 0: es war nichts zu tun (library wurde nicht init.) #
479
+ * # 1: Aufr�umen fertig #
480
+ * ######################################################################
481
+ */
482
+ DLL_EXPORT int cleanup_kto(void);
483
+ DLL_EXPORT int cleanup_kto_t(KTO_CHK_CTX *ctx);
484
+
485
+ /*
486
+ * ######################################################################
487
+ * # generate_lut(): Lookup-Table generieren #
488
+ * # #
489
+ * # Die Funktion generiert die Datei blz.lut, die alle Bankleitzahlen #
490
+ * # und die zugeh�rigen Pr�fziffermethoden in komprimierter Form #
491
+ * # enth�lt. #
492
+ * # #
493
+ * # Parameter: inputname: Name der Bankleitzahlendatei der Deutschen #
494
+ * # Bundesbank (z.B. blz0303pc.txt) #
495
+ * # #
496
+ * # outputname: Name der Zieldatei (z.B. blz.lut) #
497
+ * # #
498
+ * # user_info: Info-Zeile, die zus�tzlich in die LUT-Datei #
499
+ * # geschrieben wird. Diese Zeile wird von der #
500
+ * # Funktion get_lut_info() in zur�ckgegeben, #
501
+ * # aber ansonsten nicht ausgewertet. #
502
+ * # #
503
+ * # #
504
+ * # #
505
+ * # lut_version: Format der LUT-Datei. M�gliche Werte: #
506
+ * # 1: altes Format (1.0) #
507
+ * # 2: altes Format (1.1) mit Infozeile #
508
+ * # 3: neues Format (2.0) mit Blocks #
509
+ * # #
510
+ * # R�ckgabewerte: #
511
+ * # NO_BLZ_FILE Bankleitzahlendatei nicht gefunden #
512
+ * # FILE_WRITE_ERROR kann Datei nicht schreiben (Schreibschutz?)#
513
+ * # OK Erfolg #
514
+ * ######################################################################
515
+ */
516
+ DLL_EXPORT int generate_lut(char *inputname,char *outputname,char *user_info,int lut_version);
517
+
518
+ /*
519
+ * ######################################################################
520
+ * # get_lut_info(): Infozeile der LUT-Datei holen #
521
+ * # #
522
+ * # Die Funktion holt die Infozeile(n) der LUT-Datei in einen #
523
+ * # statischen Speicherbereich und setzt die Variable info auf diesen #
524
+ * # Speicher. Diese Funktion wird erst ab Version 1.1 der LUT-Datei #
525
+ * # unterst�tzt. #
526
+ * # #
527
+ * # Parameter: #
528
+ * # info: Die Variable wird auf die Infozeile gesetzt #
529
+ * # lut_name: Name der LUT-Datei #
530
+ * # #
531
+ * # R�ckgabewerte: wie in read_lut(): #
532
+ * # ERROR_MALLOC kann keinen Speicher allokieren #
533
+ * # NO_LUT_FILE LUT-Datei nicht gefunden (Pfad falsch?) #
534
+ * # FATAL_ERROR kann die LUT-Datei nicht lesen #
535
+ * # INVALID_LUT_FILE Fehler in der LUT-Datei (Format, CRC...) #
536
+ * # OK Erfolg #
537
+ * ######################################################################
538
+ */
539
+ DLL_EXPORT int get_lut_info(char **info,char *lut_name);
540
+ DLL_EXPORT int get_lut_info_t(char **info,char *lut_name,KTO_CHK_CTX *ctx);
541
+
542
+ /*
543
+ * ######################################################################
544
+ * # get_kto_check_version(): Version und Releasedate der library holen #
545
+ * # Diese Funktion wird erst ab Version 1.1 der library unterst�tzt. #
546
+ * ######################################################################
547
+ */
548
+ DLL_EXPORT char *get_kto_check_version(void);
549
+
550
+ #if DEBUG>0
551
+ /* ###########################################################################
552
+ * # Die Funktion kto_check_test_vars() macht nichts anderes, als die beiden #
553
+ * # �bergebenen Variablen txt und i auszugeben und als String zur�ckzugeben.#
554
+ * # Sie kann f�r Debugzwecke benutzt werden, wenn Probleme mit Variablen in #
555
+ * # der DLL auftreten; ansonsten ist sie nicht allzu n�tzlich. #
556
+ * # #
557
+ * # Parameter: #
558
+ * # txt: Textvariable #
559
+ * # i: Integervariable (4 Byte) #
560
+ * # ip: Pointer auf Integerarray (4 Byte Integer-Werte) #
561
+ * ###########################################################################
562
+ */
563
+
564
+ DLL_EXPORT char *kto_check_test_vars(char *txt,UINT4 i);
565
+ DLL_EXPORT int set_verbose_debug(int mode);
566
+ #endif
567
+
568
+ /*
569
+ * ######################################################################
570
+ * # public interface der lut2-Routinen #
571
+ * # Eine n�here Beschreibung findet sich momentan nur im C-Code, sie #
572
+ * # wird aber sp�ter nachgeliefert. #
573
+ * ######################################################################
574
+ */
575
+ /* public interface von lut2 */
576
+ DLL_EXPORT int create_lutfile(char *name, char *prolog, int slots);
577
+ DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data);
578
+ DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **data);
579
+ DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data);
580
+ DLL_EXPORT int lut_dir_dump(char *lutname,char *outputname);
581
+ DLL_EXPORT int generate_lut2_p(char *inputname,char *outputname,char *user_info,char *gueltigkeit,
582
+ UINT4 felder,UINT4 filialen,int slots,int lut_version,int set);
583
+ DLL_EXPORT int generate_lut2(char *inputname,char *outputname,char *user_info,
584
+ char *gueltigkeit,UINT4 *felder,UINT4 slots,UINT4 lut_version,UINT4 set);
585
+ DLL_EXPORT int copy_lutfile(char *old_name,char *new_name,int new_slots);
586
+ DLL_EXPORT int lut_init(char *lut_name,int required,int set);
587
+ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,int incremental);
588
+ DLL_EXPORT int kto_check_init2(char *lut_name);
589
+ DLL_EXPORT int *lut2_status(void);
590
+ DLL_EXPORT int kto_check_init_p(char *lut_name,int required,int set,int incremental);
591
+ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2);
592
+ DLL_EXPORT int lut_valid(void);
593
+ DLL_EXPORT int get_lut_info2(char *lut_name,int *version_p,char **prolog_p,char **info_p,char **user_info_p);
594
+ DLL_EXPORT int get_lut_info_b(char **info,char *lutname);
595
+ DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char **info_p,char **user_info_p);
596
+ DLL_EXPORT int get_lut_id(char *lut_name,int set,char *id);
597
+ DLL_EXPORT int rebuild_blzfile(char *inputname,char *outputname,UINT4 set);
598
+ DLL_EXPORT int dump_lutfile(char *outputname,UINT4 *required);
599
+ DLL_EXPORT int dump_lutfile_p(char *outputname,UINT4 felder);
600
+
601
+ /* Universalfunktion, die Pointer auf die internen Variablen zur�ckliefert (von Haupt- und Nebenstellen) */
602
+ DLL_EXPORT int lut_multiple(char *b,int *cnt,int **p_blz,char ***p_name,char ***p_name_kurz,int **p_plz,char ***p_ort,
603
+ int **p_pan,char ***p_bic,int *p_pz,int **p_nr,char **p_aenderung,char **p_loeschung,int **p_nachfolge_blz,
604
+ int *id,int *cnt_all,int **start_idx);
605
+ DLL_EXPORT int lut_multiple_i(int b,int *cnt,int **p_blz,char ***p_name,char ***p_name_kurz,
606
+ int **p_plz,char ***p_ort,int **p_pan,char ***p_bic,int *p_pz,int **p_nr,
607
+ char **p_aenderung,char **p_loeschung,int **p_nachfolge_blz,int *id,
608
+ int *cnt_all,int **start_idx);
609
+
610
+ /* Funktionen, um einzelne Felder zu bestimmen (R�ckgabe direkt) */
611
+ DLL_EXPORT int lut_filialen(char *b,int *retval);
612
+ DLL_EXPORT int lut_filialen_i(int b,int *retval);
613
+ DLL_EXPORT char *lut_name(char *b,int zweigstelle,int *retval);
614
+ DLL_EXPORT char *lut_name_i(int b,int zweigstelle,int *retval);
615
+ DLL_EXPORT char *lut_name_kurz(char *b,int zweigstelle,int *retval);
616
+ DLL_EXPORT char *lut_name_kurz_i(int b,int zweigstelle,int *retval);
617
+ DLL_EXPORT int lut_plz(char *b,int zweigstelle,int *retval);
618
+ DLL_EXPORT int lut_plz_i(int b,int zweigstelle,int *retval);
619
+ DLL_EXPORT char *lut_ort(char *b,int zweigstelle,int *retval);
620
+ DLL_EXPORT char *lut_ort_i(int b,int zweigstelle,int *retval);
621
+ DLL_EXPORT int lut_pan(char *b,int zweigstelle,int *retval);
622
+ DLL_EXPORT int lut_pan_i(int b,int zweigstelle,int *retval);
623
+ DLL_EXPORT char *lut_bic(char *b,int zweigstelle,int *retval);
624
+ DLL_EXPORT char *lut_bic_i(int b,int zweigstelle,int *retval);
625
+ DLL_EXPORT int lut_nr(char *b,int zweigstelle,int *retval);
626
+ DLL_EXPORT int lut_nr_i(int b,int zweigstelle,int *retval);
627
+ DLL_EXPORT int lut_pz(char *b,int zweigstelle,int *retval);
628
+ DLL_EXPORT int lut_pz_i(int b,int zweigstelle,int *retval);
629
+ DLL_EXPORT int lut_aenderung(char *b,int zweigstelle,int *retval);
630
+ DLL_EXPORT int lut_aenderung_i(int b,int zweigstelle,int *retval);
631
+ DLL_EXPORT int lut_loeschung(char *b,int zweigstelle,int *retval);
632
+ DLL_EXPORT int lut_loeschung_i(int b,int zweigstelle,int *retval);
633
+ DLL_EXPORT int lut_nachfolge_blz(char *b,int zweigstelle,int *retval);
634
+ DLL_EXPORT int lut_nachfolge_blz_i(int b,int zweigstelle,int *retval);
635
+
636
+ /* Suche von BLZs */
637
+ DLL_EXPORT int lut_suche_bic(char *such_name,int *anzahl,int **start_idx,int **zweigstelle,char ***base_name,int **blz_base);
638
+ DLL_EXPORT int lut_suche_namen(char *such_name,int *anzahl,int **start_idx,int **zweigstelle,char ***base_name,int **blz_base);
639
+ DLL_EXPORT int lut_suche_namen_kurz(char *such_name,int *anzahl,int **start_idx,int **zweigstelle,char ***base_name,int **blz_base);
640
+ DLL_EXPORT int lut_suche_ort(char *such_name,int *anzahl,int **start_idx,int **zweigstelle,char ***base_name,int **blz_base);
641
+ DLL_EXPORT int lut_suche_blz(int such1,int such2,int *anzahl,int **start_idx,int **zweigstelle,int **base_name,int **blz_base);
642
+ DLL_EXPORT int lut_suche_pz(int such1,int such2,int *anzahl,int **start_idx,int **zweigstelle,int **base_name,int **blz_base);
643
+ DLL_EXPORT int lut_suche_plz(int such1,int such2,int *anzahl,int **start_idx,int **zweigstelle,int **base_name,int **blz_base);
644
+
645
+ /* Aufr�umarbeiten */
646
+ DLL_EXPORT int lut_cleanup(void);
647
+
648
+ /* IBAN-Sachen */
649
+ DLL_EXPORT int iban_check(char *iban,int *retval);
650
+ DLL_EXPORT char *iban2bic(char *iban,int *retval,char *blz,char *kto);
651
+ DLL_EXPORT char *iban_gen(char *kto,char *blz,int *retval);
652
+ DLL_EXPORT int ipi_gen(char *zweck,char *dst,char *papier);
653
+ DLL_EXPORT int ipi_check(char *zweck);
654
+
655
+ /* R�ckgabewerte in Klartext umwandeln */
656
+ DLL_EXPORT char *kto_check_retval2txt(int retval);
657
+ DLL_EXPORT char *kto_check_retval2txt_short(int retval);
658
+ DLL_EXPORT char *kto_check_retval2html(int retval);
659
+ DLL_EXPORT char *kto_check_retval2utf8(int retval);
660
+ DLL_EXPORT char *kto_check_retval2dos(int retval);
661
+
662
+ /*
663
+ * ######################################################################
664
+ * # globale Variablen #
665
+ * ######################################################################
666
+ */
667
+
668
+ #ifndef KONTO_CHECK_VARS
669
+ #if DEBUG>0
670
+ /* "aktuelles" Datum f�r die Testumgebung (um einen Datumswechsel zu simulieren) */
671
+ DLL_EXPORT_V extern UINT4 current_date;
672
+ #endif
673
+
674
+ /*
675
+ * ######################################################################
676
+ * # die folgenden globalen Variablen waren in Version 1 und 2 von #
677
+ * # konto_check definiert; ab Version 3 werden sie nicht mehr unter- #
678
+ * # st�tzt. Zur Vermeidung von Linker-Fehlermeldungen k�nnen jedoch #
679
+ * # Dummyversionen eingebunden werden (ohne Funktionalit�t). #
680
+ * ######################################################################
681
+ */
682
+
683
+ #if INCLUDE_DUMMY_GLOBALS>0
684
+ DLL_EXPORT_V extern const char *kto_check_msg; /* globaler char-ptr mit Klartext-Ergebnis des Tests */
685
+ DLL_EXPORT_V extern const char pz_str[]; /* benutzte Pr�fziffer-Methode und -Untermethode (als String) */
686
+ DLL_EXPORT_V extern int pz_methode; /* pz_methode: benutzte Pr�fziffer-Methode (numerisch) */
687
+ #if DEBUG>0
688
+ DLL_EXPORT_V extern int pz; /* Pr�fziffer (bei DEBUG als globale Variable f�r Testzwecke) */
689
+ #endif /* DEBUG */
690
+ #endif /* INCLUDE_DUMMY_GLOBALS */
691
+ #endif /* KONTO_CHECK_VARS */
692
+ #endif /* KONTO_CHECK_H_INCLUDED */