konto_check 0.0.1

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,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 */