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