konto_check 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +25 -0
- data/LICENSE +21 -0
- data/README.textile +55 -0
- data/Rakefile +72 -0
- data/VERSION.yml +5 -0
- data/ext/konto_check/extconf.rb +32 -0
- data/ext/konto_check/konto_check.c +16261 -0
- data/ext/konto_check/konto_check.h +692 -0
- data/ext/konto_check/konto_check_ruby.c +129 -0
- data/konto_check.gemspec +58 -0
- data/test/helper.rb +10 -0
- data/test/test_konto_check.rb +7 -0
- metadata +87 -0
@@ -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 */
|