konto_check 6.02.0 → 6.13.0
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.
- checksums.yaml +5 -5
- data/ext/konto_check_raw/konto_check.c +927 -400
- data/ext/konto_check_raw/konto_check.h +52 -12
- data/ext/konto_check_raw/konto_check_raw_ruby.c +545 -3
- data/ext/konto_check_raw/retvals.h +40 -0
- data/lib/konto_check.rb +216 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: aa869ca84203c2f9c627a8ed8c9c2fd6da6d8a1c8cb6450ad8954fffb9ca89b3
|
4
|
+
data.tar.gz: b35b73763d3f4234753263a757151a6e0de9332b6305c4bad39fe7cb18e9a1ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3dcf2deacd64ad3dd65632079d387e32658bb844042b568650b7a333d6cf1f7c20bba4a459bf03750337621a0259988ac9679539a16b4b97c0b56585db3e7448
|
7
|
+
data.tar.gz: b5e6a983283ec282981a28cb4d5c0c453353c5965d0c2053fe3d2af006e034e792601978e7fb02f058b553f77a2109f330fd901c8603fe87c5c002890c5d15e6
|
@@ -13,7 +13,7 @@
|
|
13
13
|
* # wurden aus der aktuellen BLZ-Datei der Deutschen Bundesbank #
|
14
14
|
* # �bernommen. #
|
15
15
|
* # #
|
16
|
-
* # Copyright (C) 2002-
|
16
|
+
* # Copyright (C) 2002-2020 Michael Plugge <m.plugge@hs-mannheim.de> #
|
17
17
|
* # #
|
18
18
|
* # Dieses Programm ist freie Software; Sie d�rfen es unter den #
|
19
19
|
* # Bedingungen der GNU Lesser General Public License, wie von der Free #
|
@@ -45,15 +45,14 @@
|
|
45
45
|
* # im Internet herunterladen. #
|
46
46
|
* ##########################################################################
|
47
47
|
*/
|
48
|
-
#line 332 "ruby/ext/konto_check_raw/konto_check.lxx"
|
49
48
|
|
50
49
|
/* Definitionen und Includes */
|
51
50
|
#ifndef VERSION
|
52
|
-
#define VERSION "6.
|
51
|
+
#define VERSION "6.13 (final)"
|
53
52
|
#define VERSION_MAJOR 6
|
54
|
-
#define VERSION_MINOR
|
53
|
+
#define VERSION_MINOR 13
|
55
54
|
#endif
|
56
|
-
#define VERSION_DATE "
|
55
|
+
#define VERSION_DATE "2020-12-16"
|
57
56
|
|
58
57
|
#ifndef INCLUDE_KONTO_CHECK_DE
|
59
58
|
#define INCLUDE_KONTO_CHECK_DE 1
|
@@ -104,8 +103,8 @@ static lzo_align_t __LZO_MMODEL wrkmem[LZO1X_1_MEM_COMPRESS];
|
|
104
103
|
#define KONTO_CHECK_VARS
|
105
104
|
#include "konto_check.h"
|
106
105
|
|
107
|
-
/* Flag, um die �nderungen zum Dezember
|
108
|
-
static int
|
106
|
+
/* Flag, um die �nderungen zum Dezember 2019 zu aktivieren */
|
107
|
+
static int pz_aenderungen_aktivieren_2019_12;
|
109
108
|
|
110
109
|
/* falls die Variable verbose_debug gesetzt wird, werden bei einigen
|
111
110
|
* Funktionen mittels perror() zus�tzliche Debuginfos ausgegeben. Die
|
@@ -206,6 +205,13 @@ static int name_raw_len,name_kurz_raw_len,name_name_kurz_raw_len,ort_raw_len;
|
|
206
205
|
static char **sortc_buf;
|
207
206
|
static int *sorti_buf;
|
208
207
|
|
208
|
+
/* Variablen f�r das SCL-Verzeichnis */
|
209
|
+
static char *scl_info_block,*scl_bic_block,*scl_name_block,*scl_flags_block,
|
210
|
+
**scl_bic_array,**scl_name_array,**scl_flags_array,
|
211
|
+
scl_gueltigkeit[16],scl_gueltigkeit_iso[16];
|
212
|
+
static int scl_cnt;
|
213
|
+
long scl_ts;
|
214
|
+
|
209
215
|
/* Funktionspointer auf die aktuelle Kodierung */
|
210
216
|
DLL_EXPORT const char *(*retval_enc)(int)=NULL;
|
211
217
|
|
@@ -242,7 +248,6 @@ static int convert_encoding(char **data,UINT4 *len);
|
|
242
248
|
#define free(ptr) efree(ptr)
|
243
249
|
#endif
|
244
250
|
|
245
|
-
#line 770 "ruby/ext/konto_check_raw/konto_check.lxx"
|
246
251
|
|
247
252
|
/* Testwert zur Markierung ung�ltiger Ziffern im BLZ-String (>8 Stellen) */
|
248
253
|
#define BLZ_FEHLER 100000000
|
@@ -378,7 +383,6 @@ static int convert_encoding(char **data,UINT4 *len);
|
|
378
383
|
*/
|
379
384
|
#define CHECK_RETVAL(fkt) do{if((retval=fkt)!=OK)goto fini;}while(0) /* es mu� noch aufger�umt werden, daher goto */
|
380
385
|
#define CHECK_RETURN(fkt) do{if((retval=fkt)!=OK)return retval;}while(0)
|
381
|
-
#line 911 "ruby/ext/konto_check_raw/konto_check.lxx"
|
382
386
|
|
383
387
|
/* einige Makros zur Umwandlung zwischen unsigned int und char */
|
384
388
|
#define UCP (unsigned char*)
|
@@ -435,24 +439,24 @@ DLL_EXPORT_V int
|
|
435
439
|
lut_set_1[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,0},
|
436
440
|
lut_set_2[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,LUT2_BIC,0},
|
437
441
|
lut_set_3[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,0},
|
438
|
-
lut_set_4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
439
|
-
lut_set_5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
440
|
-
lut_set_6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
441
|
-
lut_set_7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
442
|
-
lut_set_8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
443
|
-
lut_set_9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
444
|
-
lut_set_iban[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_BLZ,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_IBAN_REGEL,
|
442
|
+
lut_set_4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
|
443
|
+
lut_set_5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
|
444
|
+
lut_set_6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,0},
|
445
|
+
lut_set_7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,0},
|
446
|
+
lut_set_8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,0},
|
447
|
+
lut_set_9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC, LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,LUT2_NR,0},
|
448
|
+
lut_set_iban[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_BLZ,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_IBAN_REGEL,0}, /* notwendige Felder f�r IBAN-Bestimmung */
|
445
449
|
|
446
450
|
lut_set_o0[]={LUT2_BLZ,LUT2_PZ,0},
|
447
451
|
lut_set_o1[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,0},
|
448
452
|
lut_set_o2[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_KURZ,LUT2_BIC,0},
|
449
453
|
lut_set_o3[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,0},
|
450
|
-
lut_set_o4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
451
|
-
lut_set_o5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
452
|
-
lut_set_o6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
453
|
-
lut_set_o7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
454
|
-
lut_set_o8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
455
|
-
lut_set_o9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,
|
454
|
+
lut_set_o4[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
|
455
|
+
lut_set_o5[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,0},
|
456
|
+
lut_set_o6[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,0},
|
457
|
+
lut_set_o7[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,0},
|
458
|
+
lut_set_o8[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC,LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,0},
|
459
|
+
lut_set_o9[]={LUT2_BLZ,LUT2_PZ,LUT2_AENDERUNG,LUT2_NAME_NAME_KURZ,LUT2_PLZ,LUT2_ORT,LUT2_IBAN_REGEL,LUT2_BIC, LUT2_NACHFOLGE_BLZ,LUT2_LOESCHUNG,LUT2_PAN,LUT2_NR,0};
|
456
460
|
|
457
461
|
#define COMPRESSION_DEFAULT COMPRESSION_ZLIB
|
458
462
|
|
@@ -498,7 +502,6 @@ int pz=-777;
|
|
498
502
|
|
499
503
|
#define E_START(x)
|
500
504
|
#define E_END(x)
|
501
|
-
#line 1036 "ruby/ext/konto_check_raw/konto_check.lxx"
|
502
505
|
|
503
506
|
/* Variable f�r die Methoden 27, 29 und 69 */
|
504
507
|
static const int m10h_digits[4][10]={
|
@@ -579,7 +582,7 @@ static unsigned char ee[500],*eeh,*eep,eec[]={
|
|
579
582
|
0xb3,0xa2,0xf4,0x0f,0x7e,0xb5,0x0a,0xdd,0x54,0xfb,0x74,0x56,0xf5,
|
580
583
|
0x16,0x5a,0x53,0x14,0x3d,0xd8,0xbd,0x00,0x8b,0x59,0x95,0x67,0x00
|
581
584
|
};
|
582
|
-
#define EE
|
585
|
+
#define EE 29
|
583
586
|
|
584
587
|
/* Arrays f�r die Felder der LUT-Datei u.a. */
|
585
588
|
static char *lut_prolog,*lut_sys_info,*lut_user_info;
|
@@ -947,7 +950,6 @@ static int create_lutfile_int(char *name, char *prolog, int slots,FILE **lut)
|
|
947
950
|
* ###########################################################################
|
948
951
|
*/
|
949
952
|
|
950
|
-
#line 1485 "ruby/ext/konto_check_raw/konto_check.lxx"
|
951
953
|
DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
|
952
954
|
{
|
953
955
|
char buffer[SLOT_BUFFER],*ptr;
|
@@ -985,7 +987,6 @@ DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
|
|
985
987
|
* #############################################################################
|
986
988
|
*/
|
987
989
|
|
988
|
-
#line 1523 "ruby/ext/konto_check_raw/konto_check.lxx"
|
989
990
|
static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
|
990
991
|
{
|
991
992
|
char buffer[SLOT_BUFFER],*ptr,*cptr;
|
@@ -1121,7 +1122,6 @@ static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
|
|
1121
1122
|
* ###########################################################################
|
1122
1123
|
*/
|
1123
1124
|
|
1124
|
-
#line 1659 "ruby/ext/konto_check_raw/konto_check.lxx"
|
1125
1125
|
DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **data)
|
1126
1126
|
{
|
1127
1127
|
int retval;
|
@@ -1144,7 +1144,6 @@ DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **da
|
|
1144
1144
|
* ###########################################################################
|
1145
1145
|
*/
|
1146
1146
|
|
1147
|
-
#line 1683 "ruby/ext/konto_check_raw/konto_check.lxx"
|
1148
1147
|
DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
|
1149
1148
|
{
|
1150
1149
|
int retval;
|
@@ -1166,7 +1165,6 @@ DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
|
|
1166
1165
|
* ###########################################################################
|
1167
1166
|
*/
|
1168
1167
|
|
1169
|
-
#line 1706 "ruby/ext/konto_check_raw/konto_check.lxx"
|
1170
1168
|
static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **data)
|
1171
1169
|
{
|
1172
1170
|
char buffer[SLOT_BUFFER],*ptr,*sbuffer,*dbuffer;
|
@@ -1256,7 +1254,6 @@ static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **
|
|
1256
1254
|
FREE(sbuffer);
|
1257
1255
|
RETURN(ERROR_MALLOC);
|
1258
1256
|
}
|
1259
|
-
#line 1811 "ruby/ext/konto_check_raw/konto_check.lxx"
|
1260
1257
|
|
1261
1258
|
if(fread(sbuffer,1,compressed_len,lut)<compressed_len){
|
1262
1259
|
FREE(sbuffer);
|
@@ -2735,6 +2732,38 @@ DLL_EXPORT int lut_valid(void)
|
|
2735
2732
|
RETURN(LUT2_NO_LONGER_VALID);
|
2736
2733
|
}
|
2737
2734
|
|
2735
|
+
DLL_EXPORT int lut_valid_date(char *lut_name,int *v11,int *v12,int *v21,int *v22)
|
2736
|
+
{
|
2737
|
+
char *ptr,*info1,*info2;
|
2738
|
+
int retval,v1,v2;
|
2739
|
+
|
2740
|
+
*v11=*v12=*v21=*v22=0;
|
2741
|
+
if((retval=lut_info(lut_name,&info1,&info2,&v1,&v2))!=OK)return retval;
|
2742
|
+
if(info1){
|
2743
|
+
for(ptr=info1;*ptr && *ptr!='\n' && !isdigit(*ptr);ptr++);
|
2744
|
+
if(*ptr && *ptr!='\n'){
|
2745
|
+
*v11=strtoul(ptr,NULL,10); /* Anfangsdatum der G�ltigkeit */
|
2746
|
+
if(*ptr && *ptr!='\n'){
|
2747
|
+
while(*ptr && *ptr!='\n' && *ptr++!='-'); /* Endedatum suchen */
|
2748
|
+
if(*ptr)*v12=strtoul(ptr,NULL,10); /* Endedatum der G�ltigkeit */
|
2749
|
+
}
|
2750
|
+
}
|
2751
|
+
free(info1);
|
2752
|
+
}
|
2753
|
+
if(info2){
|
2754
|
+
for(ptr=info2;*ptr && *ptr!='\n' && !isdigit(*ptr);ptr++);
|
2755
|
+
if(*ptr && *ptr!='\n'){
|
2756
|
+
*v21=strtoul(ptr,NULL,10); /* Anfangsdatum der G�ltigkeit */
|
2757
|
+
if(*ptr && *ptr!='\n'){
|
2758
|
+
while(*ptr && *ptr!='\n' && *ptr++!='-'); /* Endedatum suchen */
|
2759
|
+
if(*ptr)*v22=strtoul(ptr,NULL,10); /* Endedatum der G�ltigkeit */
|
2760
|
+
}
|
2761
|
+
}
|
2762
|
+
free(info2);
|
2763
|
+
}
|
2764
|
+
return OK;
|
2765
|
+
}
|
2766
|
+
|
2738
2767
|
|
2739
2768
|
/* Funktion lut_info_b() +���1 */
|
2740
2769
|
/* ###########################################################################
|
@@ -2849,7 +2878,6 @@ DLL_EXPORT int lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int
|
|
2849
2878
|
* ###########################################################################
|
2850
2879
|
*/
|
2851
2880
|
|
2852
|
-
#line 3404 "ruby/ext/konto_check_raw/konto_check.lxx"
|
2853
2881
|
DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)
|
2854
2882
|
{
|
2855
2883
|
char *ptr,*ptr1,buffer[128];
|
@@ -2937,7 +2965,6 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
|
|
2937
2965
|
|
2938
2966
|
/* Infoblocks lesen: 1. Infoblock */
|
2939
2967
|
if((ret=read_lut_block_int(in,0,LUT2_INFO,&cnt,&ptr))==OK){
|
2940
|
-
#line 3493 "ruby/ext/konto_check_raw/konto_check.lxx"
|
2941
2968
|
*(ptr+cnt)=0;
|
2942
2969
|
if(valid1){
|
2943
2970
|
for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
|
@@ -2985,7 +3012,6 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
|
|
2985
3012
|
|
2986
3013
|
/* Infoblocks lesen: 2. Infoblock */
|
2987
3014
|
if((ret=read_lut_block_int(in,0,LUT2_2_INFO,&cnt,&ptr))==OK){
|
2988
|
-
#line 3542 "ruby/ext/konto_check_raw/konto_check.lxx"
|
2989
3015
|
*(ptr+cnt)=0;
|
2990
3016
|
if(valid2){
|
2991
3017
|
for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
|
@@ -3204,7 +3230,6 @@ DLL_EXPORT int copy_lutfile(char *old_name,char *new_name,int new_slots)
|
|
3204
3230
|
qsort(slotdir,slot_cnt,sizeof(int),cmp_int);
|
3205
3231
|
for(last_slot=-1,i=0;i<(int)slot_cnt;i++)if((typ=slotdir[i]) && typ!=(UINT4)last_slot){
|
3206
3232
|
read_lut_block_int(lut1,0,typ,&len,&data);
|
3207
|
-
#line 3762 "ruby/ext/konto_check_raw/konto_check.lxx"
|
3208
3233
|
write_lut_block_int(lut2,typ,len,data);
|
3209
3234
|
FREE(data);
|
3210
3235
|
last_slot=typ;
|
@@ -3434,7 +3459,6 @@ DLL_EXPORT int lut_init(char *lut_name,int required,int set)
|
|
3434
3459
|
* # Copyright (C) 2008 Michael Plugge <m.plugge@hs-mannheim.de> #
|
3435
3460
|
* ###########################################################################
|
3436
3461
|
*/
|
3437
|
-
#line 3992 "ruby/ext/konto_check_raw/konto_check.lxx"
|
3438
3462
|
DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,int incremental)
|
3439
3463
|
{
|
3440
3464
|
char *ptr,*dptr,*data,*eptr,*prolog,*info,*user_info,*hs=NULL,*info1,*info2,*ci=NULL,name_buffer[LUT_PATH_LEN];
|
@@ -3662,7 +3686,6 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
|
|
3662
3686
|
typ1=typ;
|
3663
3687
|
if(lut2_block_status[typ]==OK)continue; /* jeden Block nur einmal einlesen */
|
3664
3688
|
retval=read_lut_block_int(lut,0,typ,&len,&data);
|
3665
|
-
#line 4221 "ruby/ext/konto_check_raw/konto_check.lxx"
|
3666
3689
|
|
3667
3690
|
switch(retval){
|
3668
3691
|
case LUT_CRC_ERROR:
|
@@ -3750,7 +3773,6 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
|
|
3750
3773
|
if(typ==LUT2_2_NAME || typ==LUT2_2_NAME_KURZ){
|
3751
3774
|
FREE(data);
|
3752
3775
|
i=read_lut_block_int(lut,0,LUT2_2_NAME_NAME_KURZ,&len,&data);
|
3753
|
-
#line 4313 "ruby/ext/konto_check_raw/konto_check.lxx"
|
3754
3776
|
if(i==OK){ /* was gefunden; Typ �ndern, dann weiter wie bei OK */
|
3755
3777
|
typ=LUT2_2_NAME_NAME_KURZ;
|
3756
3778
|
typ1=LUT2_NAME_NAME_KURZ;
|
@@ -3773,10 +3795,20 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
|
|
3773
3795
|
* LUT2_OWN_IBAN nicht geladen werden konnte, wird der Block in
|
3774
3796
|
* der Funktion lut_blocks() als nicht geladen angegeben; bei
|
3775
3797
|
* lut_init() wird dagegen OK zur�ckgegeben.
|
3798
|
+
*
|
3799
|
+
* Die SCL-Blocks sind ebenfalls nicht immer in der LUT-Datei vorhanden.
|
3800
|
+
* und sollen daher keine Warnung erzeugen.
|
3776
3801
|
*/
|
3777
|
-
|
3778
|
-
|
3779
|
-
|
3802
|
+
switch(typ){
|
3803
|
+
case LUT2_OWN_IBAN:
|
3804
|
+
case LUT2_2_OWN_IBAN:
|
3805
|
+
case LUT2_FILIALEN:
|
3806
|
+
case LUT2_2_FILIALEN:
|
3807
|
+
break;
|
3808
|
+
default:
|
3809
|
+
alles_ok=0;
|
3810
|
+
lut_blocks_missing++;
|
3811
|
+
break;
|
3780
3812
|
}
|
3781
3813
|
lut2_block_len[typ]=lut2_block_len[typ1]=0;
|
3782
3814
|
lut2_block_data[typ]=lut2_block_data[typ1]=NULL;
|
@@ -4346,7 +4378,6 @@ DLL_EXPORT int lut_blocks_id(int mode,int *lut_filename,int *lut_blocks_ok,int *
|
|
4346
4378
|
* ###########################################################################
|
4347
4379
|
*/
|
4348
4380
|
|
4349
|
-
#line 4909 "ruby/ext/konto_check_raw/konto_check.lxx"
|
4350
4381
|
DLL_EXPORT const char *current_lutfile_name(int *set,int *level,int *retval)
|
4351
4382
|
{
|
4352
4383
|
if(init_status<7 || !current_lutfile){
|
@@ -4754,6 +4785,7 @@ DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
|
|
4754
4785
|
if(retval)*retval=ret;
|
4755
4786
|
return NULL;
|
4756
4787
|
}
|
4788
|
+
memcpy(kto2,"0000000000",10); /* f�r valgrind (kto2 ist nur ein Dummy) */
|
4757
4789
|
bic=lut_bic_int(b,zweigstelle,retval); /* BIC aus der LUT-Datei holen */
|
4758
4790
|
regel=lut_iban_regel(b,0,&ret);
|
4759
4791
|
if(retval && ret==OK){ /* Test nur notwendig, falls retval nicht NULL */
|
@@ -4761,7 +4793,6 @@ DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
|
|
4761
4793
|
*retval=OK_HYPO_REQUIRES_KTO; /* Sonderfall ehemalige Hypobank */
|
4762
4794
|
else{
|
4763
4795
|
strcpy(blz2,b);
|
4764
|
-
strcpy(kto2,"13"); /* nur Dummy f�r Funktionsaufruf */
|
4765
4796
|
iban_regel_cvt(blz2,kto2,&bic_neu,regel,NULL); /* R�ckgabewert egal, nur bic_neu interessiert */
|
4766
4797
|
if(bic && bic_neu && strcasecmp(bic,bic_neu))*retval=OK_INVALID_FOR_IBAN; /* BIC wurde durch eine Regel ge�ndert */
|
4767
4798
|
}
|
@@ -5101,7 +5132,6 @@ static int iban_init(void)
|
|
5101
5132
|
* ###########################################################################
|
5102
5133
|
*/
|
5103
5134
|
|
5104
|
-
#line 5664 "ruby/ext/konto_check_raw/konto_check.lxx"
|
5105
5135
|
static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_version,RETVAL *retvals)
|
5106
5136
|
{
|
5107
5137
|
char tmp_buffer[16];
|
@@ -5944,9 +5974,9 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
5944
5974
|
return OK_BLZ_REPLACED;
|
5945
5975
|
|
5946
5976
|
|
5947
|
-
/* Iban-Regel 0020.
|
5977
|
+
/* Iban-Regel 0020.02 +���3 */
|
5948
5978
|
/* Deutsche Bank AG
|
5949
|
-
* Neuimplementierung nach der Regel-Version 1.
|
5979
|
+
* Neuimplementierung nach der Regel-Version 1.51 der Deutschen Bank vom 19.9.2013
|
5950
5980
|
*/
|
5951
5981
|
case 20:
|
5952
5982
|
|
@@ -6167,178 +6197,8 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
6167
6197
|
/* Iban-Regel 0030.00 +���3 */
|
6168
6198
|
/* Pommersche Volksbank eG */
|
6169
6199
|
case 30:
|
6170
|
-
|
6171
|
-
|
6172
|
-
* fehlerhafter Pr�fziffer umzuwandeln sind. Der Einfachheit halber
|
6173
|
-
* werden die Kontonummern in zwei Teile aufgeteilt (die beiden
|
6174
|
-
* ersten Stellen und die restlichen 8); diese passen dann bequem
|
6175
|
-
* in zwei 32Bit-Integer und k�nnen �ber zwei geschachtelte
|
6176
|
-
* switch() Anweisungen verarbeitet werden.
|
6177
|
-
*/
|
6178
|
-
switch(k1){
|
6179
|
-
case 0:
|
6180
|
-
switch(k2){
|
6181
|
-
case 1718190: return OK_IBAN_WITHOUT_KC_TEST;
|
6182
|
-
case 22000225: return OK_IBAN_WITHOUT_KC_TEST;
|
6183
|
-
case 49902271: return OK_IBAN_WITHOUT_KC_TEST;
|
6184
|
-
case 49902280: return OK_IBAN_WITHOUT_KC_TEST;
|
6185
|
-
default: break;
|
6186
|
-
}
|
6187
|
-
break;
|
6188
|
-
|
6189
|
-
case 1:
|
6190
|
-
switch(k2){
|
6191
|
-
case 1680029: return OK_IBAN_WITHOUT_KC_TEST;
|
6192
|
-
case 4200028: return OK_IBAN_WITHOUT_KC_TEST;
|
6193
|
-
case 6200025: return OK_IBAN_WITHOUT_KC_TEST;
|
6194
|
-
case 8000171: return OK_IBAN_WITHOUT_KC_TEST;
|
6195
|
-
case 8000279: return OK_IBAN_WITHOUT_KC_TEST;
|
6196
|
-
case 8001364: return OK_IBAN_WITHOUT_KC_TEST;
|
6197
|
-
case 8001801: return OK_IBAN_WITHOUT_KC_TEST;
|
6198
|
-
case 8002514: return OK_IBAN_WITHOUT_KC_TEST;
|
6199
|
-
default: break;
|
6200
|
-
}
|
6201
|
-
break;
|
6202
|
-
|
6203
|
-
case 3:
|
6204
|
-
if(k2==8542) return OK_IBAN_WITHOUT_KC_TEST;
|
6205
|
-
break;
|
6206
|
-
|
6207
|
-
case 91:
|
6208
|
-
switch(k2){
|
6209
|
-
case 30099995: return OK_IBAN_WITHOUT_KC_TEST;
|
6210
|
-
case 30500002: return OK_IBAN_WITHOUT_KC_TEST;
|
6211
|
-
case 31100008: return OK_IBAN_WITHOUT_KC_TEST;
|
6212
|
-
case 31600000: return OK_IBAN_WITHOUT_KC_TEST;
|
6213
|
-
case 31610006: return OK_IBAN_WITHOUT_KC_TEST;
|
6214
|
-
case 32200006: return OK_IBAN_WITHOUT_KC_TEST;
|
6215
|
-
case 32400005: return OK_IBAN_WITHOUT_KC_TEST;
|
6216
|
-
case 32600004: return OK_IBAN_WITHOUT_KC_TEST;
|
6217
|
-
case 32700017: return OK_IBAN_WITHOUT_KC_TEST;
|
6218
|
-
case 32700025: return OK_IBAN_WITHOUT_KC_TEST;
|
6219
|
-
case 32700033: return OK_IBAN_WITHOUT_KC_TEST;
|
6220
|
-
case 32700041: return OK_IBAN_WITHOUT_KC_TEST;
|
6221
|
-
case 33200700: return OK_IBAN_WITHOUT_KC_TEST;
|
6222
|
-
case 33200735: return OK_IBAN_WITHOUT_KC_TEST;
|
6223
|
-
case 33200743: return OK_IBAN_WITHOUT_KC_TEST;
|
6224
|
-
case 33200751: return OK_IBAN_WITHOUT_KC_TEST;
|
6225
|
-
case 33200786: return OK_IBAN_WITHOUT_KC_TEST;
|
6226
|
-
case 33200808: return OK_IBAN_WITHOUT_KC_TEST;
|
6227
|
-
case 33200816: return OK_IBAN_WITHOUT_KC_TEST;
|
6228
|
-
case 33200824: return OK_IBAN_WITHOUT_KC_TEST;
|
6229
|
-
case 33200832: return OK_IBAN_WITHOUT_KC_TEST;
|
6230
|
-
case 36700003: return OK_IBAN_WITHOUT_KC_TEST;
|
6231
|
-
case 77300010: return OK_IBAN_WITHOUT_KC_TEST;
|
6232
|
-
case 77300060: return OK_IBAN_WITHOUT_KC_TEST;
|
6233
|
-
case 98100002: return OK_IBAN_WITHOUT_KC_TEST;
|
6234
|
-
case 98200007: return OK_IBAN_WITHOUT_KC_TEST;
|
6235
|
-
case 98200104: return OK_IBAN_WITHOUT_KC_TEST;
|
6236
|
-
case 98300001: return OK_IBAN_WITHOUT_KC_TEST;
|
6237
|
-
default: break;
|
6238
|
-
}
|
6239
|
-
break;
|
6240
|
-
|
6241
|
-
case 93:
|
6242
|
-
switch(k2){
|
6243
|
-
case 31300141: return OK_IBAN_WITHOUT_KC_TEST;
|
6244
|
-
case 31300150: return OK_IBAN_WITHOUT_KC_TEST;
|
6245
|
-
case 31401010: return OK_IBAN_WITHOUT_KC_TEST;
|
6246
|
-
case 31401061: return OK_IBAN_WITHOUT_KC_TEST;
|
6247
|
-
case 49010000: return OK_IBAN_WITHOUT_KC_TEST;
|
6248
|
-
case 49100000: return OK_IBAN_WITHOUT_KC_TEST;
|
6249
|
-
case 60500001: return OK_IBAN_WITHOUT_KC_TEST;
|
6250
|
-
case 64902007: return OK_IBAN_WITHOUT_KC_TEST;
|
6251
|
-
case 66101001: return OK_IBAN_WITHOUT_KC_TEST;
|
6252
|
-
case 66104000: return OK_IBAN_WITHOUT_KC_TEST;
|
6253
|
-
case 70620030: return OK_IBAN_WITHOUT_KC_TEST;
|
6254
|
-
case 70620080: return OK_IBAN_WITHOUT_KC_TEST;
|
6255
|
-
case 71900010: return OK_IBAN_WITHOUT_KC_TEST;
|
6256
|
-
case 73600005: return OK_IBAN_WITHOUT_KC_TEST;
|
6257
|
-
default: break;
|
6258
|
-
}
|
6259
|
-
break;
|
6260
|
-
|
6261
|
-
case 94:
|
6262
|
-
if(k2==2900021)return OK_IBAN_WITHOUT_KC_TEST;
|
6263
|
-
break;
|
6264
|
-
|
6265
|
-
case 96:
|
6266
|
-
switch(k2){
|
6267
|
-
case 5110000: return OK_IBAN_WITHOUT_KC_TEST;
|
6268
|
-
case 14001000: return OK_IBAN_WITHOUT_KC_TEST;
|
6269
|
-
case 15000016: return OK_IBAN_WITHOUT_KC_TEST;
|
6270
|
-
case 15010003: return OK_IBAN_WITHOUT_KC_TEST;
|
6271
|
-
case 18500036: return OK_IBAN_WITHOUT_KC_TEST;
|
6272
|
-
case 31020000: return OK_IBAN_WITHOUT_KC_TEST;
|
6273
|
-
case 32600051: return OK_IBAN_WITHOUT_KC_TEST;
|
6274
|
-
case 32600060: return OK_IBAN_WITHOUT_KC_TEST;
|
6275
|
-
case 35000012: return OK_IBAN_WITHOUT_KC_TEST;
|
6276
|
-
case 35000020: return OK_IBAN_WITHOUT_KC_TEST;
|
6277
|
-
case 35701002: return OK_IBAN_WITHOUT_KC_TEST;
|
6278
|
-
case 36010003: return OK_IBAN_WITHOUT_KC_TEST;
|
6279
|
-
case 36013002: return OK_IBAN_WITHOUT_KC_TEST;
|
6280
|
-
case 36016001: return OK_IBAN_WITHOUT_KC_TEST;
|
6281
|
-
case 36018004: return OK_IBAN_WITHOUT_KC_TEST;
|
6282
|
-
case 36019000: return OK_IBAN_WITHOUT_KC_TEST;
|
6283
|
-
case 36022001: return OK_IBAN_WITHOUT_KC_TEST;
|
6284
|
-
case 36024004: return OK_IBAN_WITHOUT_KC_TEST;
|
6285
|
-
case 36025000: return OK_IBAN_WITHOUT_KC_TEST;
|
6286
|
-
case 36027003: return OK_IBAN_WITHOUT_KC_TEST;
|
6287
|
-
case 36028000: return OK_IBAN_WITHOUT_KC_TEST;
|
6288
|
-
case 36045001: return OK_IBAN_WITHOUT_KC_TEST;
|
6289
|
-
case 36048000: return OK_IBAN_WITHOUT_KC_TEST;
|
6290
|
-
case 36051001: return OK_IBAN_WITHOUT_KC_TEST;
|
6291
|
-
case 36053004: return OK_IBAN_WITHOUT_KC_TEST;
|
6292
|
-
case 36120003: return OK_IBAN_WITHOUT_KC_TEST;
|
6293
|
-
case 36140004: return OK_IBAN_WITHOUT_KC_TEST;
|
6294
|
-
case 36150000: return OK_IBAN_WITHOUT_KC_TEST;
|
6295
|
-
case 36320002: return OK_IBAN_WITHOUT_KC_TEST;
|
6296
|
-
case 36700000: return OK_IBAN_WITHOUT_KC_TEST;
|
6297
|
-
case 38120000: return OK_IBAN_WITHOUT_KC_TEST;
|
6298
|
-
case 39401100: return OK_IBAN_WITHOUT_KC_TEST;
|
6299
|
-
case 39801001: return OK_IBAN_WITHOUT_KC_TEST;
|
6300
|
-
case 70010004: return OK_IBAN_WITHOUT_KC_TEST;
|
6301
|
-
case 80610000: return OK_IBAN_WITHOUT_KC_TEST;
|
6302
|
-
default: break;
|
6303
|
-
}
|
6304
|
-
break;
|
6305
|
-
|
6306
|
-
case 97:
|
6307
|
-
switch(k2){
|
6308
|
-
case 5010002: return OK_IBAN_WITHOUT_KC_TEST;
|
6309
|
-
case 5403004: return OK_IBAN_WITHOUT_KC_TEST;
|
6310
|
-
case 5404000: return OK_IBAN_WITHOUT_KC_TEST;
|
6311
|
-
case 5509996: return OK_IBAN_WITHOUT_KC_TEST;
|
6312
|
-
case 7901001: return OK_IBAN_WITHOUT_KC_TEST;
|
6313
|
-
case 36010000: return OK_IBAN_WITHOUT_KC_TEST;
|
6314
|
-
case 80100050: return OK_IBAN_WITHOUT_KC_TEST;
|
6315
|
-
case 91000030: return OK_IBAN_WITHOUT_KC_TEST;
|
6316
|
-
default: break;
|
6317
|
-
}
|
6318
|
-
break;
|
6319
|
-
|
6320
|
-
case 99:
|
6321
|
-
switch(k2){
|
6322
|
-
case 90001003: return OK_IBAN_WITHOUT_KC_TEST;
|
6323
|
-
case 90001100: return OK_IBAN_WITHOUT_KC_TEST;
|
6324
|
-
case 90002000: return OK_IBAN_WITHOUT_KC_TEST;
|
6325
|
-
case 90004002: return OK_IBAN_WITHOUT_KC_TEST;
|
6326
|
-
case 91020001: return OK_IBAN_WITHOUT_KC_TEST;
|
6327
|
-
case 91040002: return OK_IBAN_WITHOUT_KC_TEST;
|
6328
|
-
case 91060003: return OK_IBAN_WITHOUT_KC_TEST;
|
6329
|
-
case 99999993: return OK_IBAN_WITHOUT_KC_TEST;
|
6330
|
-
case 99999994: return OK_IBAN_WITHOUT_KC_TEST;
|
6331
|
-
case 99999995: return OK_IBAN_WITHOUT_KC_TEST;
|
6332
|
-
case 99999996: return OK_IBAN_WITHOUT_KC_TEST;
|
6333
|
-
case 99999997: return OK_IBAN_WITHOUT_KC_TEST;
|
6334
|
-
case 99999998: return OK_IBAN_WITHOUT_KC_TEST;
|
6335
|
-
case 99999999: return OK_IBAN_WITHOUT_KC_TEST;
|
6336
|
-
default: break;
|
6337
|
-
}
|
6338
|
-
break;
|
6339
|
-
}
|
6340
|
-
RETURN_OK;
|
6341
|
-
|
6200
|
+
/* ab September 2018 entf�llt die Regel 30, bleibt jedoch frei */
|
6201
|
+
return OK;
|
6342
6202
|
|
6343
6203
|
/* Iban-Regeln 0031.01 ... 0035.01 +���3 */
|
6344
6204
|
/* UniCredit Bank AG:
|
@@ -8211,21 +8071,29 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
8211
8071
|
*bicp="VONEDE33XXX";
|
8212
8072
|
return OK_BLZ_REPLACED;
|
8213
8073
|
|
8214
|
-
/* Iban-Regel 0049.
|
8215
|
-
/*
|
8074
|
+
/* Iban-Regel 0049.01 +���3 */
|
8075
|
+
/* DZ Bank */
|
8216
8076
|
case 49:
|
8217
8077
|
|
8218
|
-
/*
|
8219
|
-
|
8220
|
-
|
8221
|
-
|
8222
|
-
|
8223
|
-
|
8224
|
-
|
8225
|
-
|
8078
|
+
/* Bei der Ermittlung von IBAN und BIC aus Kontonummer und BLZ sind in Abwei-
|
8079
|
+
* chung zu der Standard IBAN-Regel folgende Besonderheiten zu beachten:
|
8080
|
+
*
|
8081
|
+
* 1. F�r die Bankleitzahlen 300 600 10, 400 600 00 und 570 600 00 der DZ BANK ist die
|
8082
|
+
* IBAN-Ermittlung f�r Kontonummern mit der 1.-2. Stelle ungleich '92-99' (standardm��ig
|
8083
|
+
* links mit Nullen auf 10 Stellen aufgef�llt) mit der Standard-IBAN-Regel m�glich.
|
8084
|
+
*
|
8085
|
+
* 2. Kontonummern mit einer '92-99' an der 1.-2. Stelle haben keine Pr�fziffer, die daher
|
8086
|
+
* nicht gepr�ft werden darf. Auch f�r diese Konten kann die IBAN nach der Standard-
|
8087
|
+
* IBAN-Regel ermittelt werden.
|
8088
|
+
*
|
8089
|
+
* [etwas vereinfacht ausgedr�ckt, k�nnen Konten einfach nach der Standard-Regel konvertiert werden :-) ]
|
8090
|
+
*/
|
8226
8091
|
|
8227
|
-
/*
|
8228
|
-
*
|
8092
|
+
/* (der folgende Teil wurde nicht gel�scht, da er auch aus realen Kontodaten stammt;
|
8093
|
+
* die ehemaligen Sonderkonten tauchen nicht mehr auf und wurden entfernt)
|
8094
|
+
*
|
8095
|
+
* F�r Kontonummern mit einer '9' an der 5. Stelle muss die Kontonummer, auf deren Basis
|
8096
|
+
* die IBAN ermittelt wird, abweichend berechnet werden. Die ersten 4 Stellen (inkl.
|
8229
8097
|
* aufgef�llter Nullen) m�ssen ans Ende gestellt werden, so dass die Kontonummer dann
|
8230
8098
|
* immer mit der '9' anf�ngt.
|
8231
8099
|
*
|
@@ -8409,135 +8277,10 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
8409
8277
|
}
|
8410
8278
|
RETURN_OK;
|
8411
8279
|
|
8412
|
-
/* Iban-Regel 0056.
|
8413
|
-
/* Iban-Regel 0056.01 (ab September 2017) +���3 */
|
8414
|
-
/* Iban-Regel 0056.01 (ab Dezember 2017) BLZ 51410111 ung�ltig +���3 */
|
8415
|
-
|
8416
|
-
|
8280
|
+
/* Iban-Regel 0056.03 +���3 */
|
8417
8281
|
/* SEB AG */
|
8418
8282
|
case 56:
|
8419
|
-
|
8420
|
-
|
8421
|
-
/* Spendenkonten: nur mit festgelegten IBANs -> Konto und evl. BLZ/BIC anpassen */
|
8422
|
-
if(k1==0)switch(k2){
|
8423
|
-
case 36: strcpy(kto,"1010240003"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8424
|
-
case 50: strcpy(kto,"1328506100"); if(b!=48010111){strcpy(blz,"48010111"); *bicp="ESSEDE5F480"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8425
|
-
case 99: strcpy(kto,"1826063000"); if(b!=43010111){strcpy(blz,"43010111"); *bicp="ESSEDE5F430"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8426
|
-
case 110: strcpy(kto,"1015597802"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8427
|
-
case 240: strcpy(kto,"1010240000"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8428
|
-
case 333: strcpy(kto,"1011296100"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8429
|
-
case 555: strcpy(kto,"1600220800"); if(b!=10010111){strcpy(blz,"10010111"); *bicp="ESSEDE5F100"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8430
|
-
case 556: strcpy(kto,"1000556100"); if(b!=39010111){strcpy(blz,"39010111"); *bicp="ESSEDE5F390"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8431
|
-
case 606: strcpy(kto,"1967153801"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8432
|
-
case 700: strcpy(kto,"1070088000"); if(b!=26510111){strcpy(blz,"26510111"); *bicp="ESSEDE5F265"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8433
|
-
case 777: strcpy(kto,"1006015200"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8434
|
-
case 999: strcpy(kto,"1010240001"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8435
|
-
case 1234: strcpy(kto,"1369152400"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8436
|
-
case 1313: strcpy(kto,"1017500000"); if(b!=57010111){strcpy(blz,"57010111"); *bicp="ESSEDE5F570"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8437
|
-
case 1888: strcpy(kto,"1241113000"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8438
|
-
case 1953: strcpy(kto,"1026500901"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8439
|
-
case 1998: strcpy(kto,"1547620500"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8440
|
-
case 2007: strcpy(kto,"1026500907"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8441
|
-
case 4004: strcpy(kto,"1635100100"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8442
|
-
case 4444: strcpy(kto,"1304610900"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8443
|
-
case 5000: strcpy(kto,"1395676000"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8444
|
-
case 5510: strcpy(kto,"1611754300"); if(b!=29010111){strcpy(blz,"29010111"); *bicp="ESSEDE5F290"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8445
|
-
case 6060: strcpy(kto,"1000400200"); if(b!=50010111){strcpy(blz,"50010111"); *bicp="ESSEDE5FXXX"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8446
|
-
case 6800: strcpy(kto,"1296401301"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8447
|
-
case 55555: strcpy(kto,"1027758200"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8448
|
-
case 60000: strcpy(kto,"1005007001"); if(b!=50010111){strcpy(blz,"50010111"); *bicp="ESSEDE5FXXX"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8449
|
-
case 66666: strcpy(kto,"1299807801"); if(b!=20010111){strcpy(blz,"20010111"); *bicp="ESSEDE5F200"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8450
|
-
case 102030: strcpy(kto,"1837501600"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8451
|
-
case 121212: strcpy(kto,"1249461502"); if(b!=70010111){strcpy(blz,"70010111"); *bicp="ESSEDE5F700"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8452
|
-
case 130500: strcpy(kto,"1413482100"); if(b!=30010111){strcpy(blz,"30010111"); *bicp="ESSEDE5F300"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8453
|
-
case 202020: strcpy(kto,"1213431002"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8454
|
-
case 414141: strcpy(kto,"1010555101"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8455
|
-
case 666666: strcpy(kto,"1798758900"); if(b!=20010111){strcpy(blz,"20010111"); *bicp="ESSEDE5F200"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8456
|
-
case 5000000: strcpy(kto,"1403124100"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
|
8457
|
-
}
|
8458
|
-
else if(k1==5 && k2==500500){
|
8459
|
-
strcpy(kto,"1045720000");
|
8460
|
-
if(b!=60010111){
|
8461
|
-
strcpy(blz,"60010111");
|
8462
|
-
*bicp="ESSEDE5F600";
|
8463
|
-
return OK_BLZ_KTO_REPLACED;
|
8464
|
-
}
|
8465
|
-
else
|
8466
|
-
return OK_KTO_REPLACED;
|
8467
|
-
}
|
8468
|
-
}
|
8469
|
-
|
8470
|
-
/* f�r die folgenden BLZs sind nur zehnstelllige Kontonummern erlaubt: */
|
8471
|
-
if(pz_aenderungen_aktivieren_2017_12 && b==51410111)return INVALID_BLZ; /* die BLZ wird ab Dezember 2017 ung�ltig */
|
8472
|
-
switch(b){
|
8473
|
-
case 10010111:
|
8474
|
-
case 13010111:
|
8475
|
-
case 16010111:
|
8476
|
-
case 20010111:
|
8477
|
-
case 21010111:
|
8478
|
-
case 21210111:
|
8479
|
-
case 23010111:
|
8480
|
-
case 25010111:
|
8481
|
-
case 25410111:
|
8482
|
-
case 25910111:
|
8483
|
-
case 26010111:
|
8484
|
-
case 26510111:
|
8485
|
-
case 27010111:
|
8486
|
-
case 28010111:
|
8487
|
-
case 29010111:
|
8488
|
-
case 29210111:
|
8489
|
-
case 30010111:
|
8490
|
-
case 31010111:
|
8491
|
-
case 33010111:
|
8492
|
-
case 35010111:
|
8493
|
-
case 35211012:
|
8494
|
-
case 36010111:
|
8495
|
-
case 36210111:
|
8496
|
-
case 37010111:
|
8497
|
-
case 38010111:
|
8498
|
-
case 39010111:
|
8499
|
-
case 40010111:
|
8500
|
-
case 41010111:
|
8501
|
-
case 42010111:
|
8502
|
-
case 42610112:
|
8503
|
-
case 43010111:
|
8504
|
-
case 44010111:
|
8505
|
-
case 46010111:
|
8506
|
-
case 48010111:
|
8507
|
-
case 50010111:
|
8508
|
-
case 50510111:
|
8509
|
-
case 51010111:
|
8510
|
-
case 51310111:
|
8511
|
-
case 51410111: /* wird ab Dezember 2017 ung�ltig */
|
8512
|
-
case 52010111:
|
8513
|
-
case 54210111:
|
8514
|
-
case 55010111:
|
8515
|
-
case 57010111:
|
8516
|
-
case 58510111:
|
8517
|
-
case 59010111:
|
8518
|
-
case 60010111:
|
8519
|
-
case 63010111:
|
8520
|
-
case 65310111:
|
8521
|
-
case 66010111:
|
8522
|
-
case 66610111:
|
8523
|
-
case 67010111:
|
8524
|
-
case 67210111:
|
8525
|
-
case 68010111:
|
8526
|
-
case 68310111:
|
8527
|
-
case 69010111:
|
8528
|
-
case 70010111:
|
8529
|
-
case 72010111:
|
8530
|
-
case 75010111:
|
8531
|
-
case 76010111:
|
8532
|
-
case 79010111:
|
8533
|
-
case 79510111:
|
8534
|
-
case 81010111:
|
8535
|
-
case 82010111:
|
8536
|
-
case 86010111:
|
8537
|
-
if(k1<10)return INVALID_KTO;
|
8538
|
-
default:
|
8539
|
-
break;
|
8540
|
-
}
|
8283
|
+
/* ab Dezember 2018 entf�llt die Regel 56, bleibt jedoch frei */
|
8541
8284
|
RETURN_OK;
|
8542
8285
|
|
8543
8286
|
/* Iban-Regel 0057.00 +���3 */
|
@@ -8557,7 +8300,6 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
8557
8300
|
}
|
8558
8301
|
}
|
8559
8302
|
|
8560
|
-
#line 9120 "ruby/ext/konto_check_raw/konto_check.lxx"
|
8561
8303
|
/* Funktion lut_multiple() +���2 */
|
8562
8304
|
/* ###########################################################################
|
8563
8305
|
* # lut_multiple(): Universalfunktion, um zu einer gegebenen Bankleitzahl #
|
@@ -8825,7 +8567,6 @@ DLL_EXPORT int lut_cleanup(void)
|
|
8825
8567
|
FREE(sort_pz_f);
|
8826
8568
|
FREE(sort_plz);
|
8827
8569
|
FREE(sort_iban_regel);
|
8828
|
-
#line 9382 "ruby/ext/konto_check_raw/konto_check.lxx"
|
8829
8570
|
if(name_raw && name_data!=name_raw)
|
8830
8571
|
FREE(name_raw);
|
8831
8572
|
else
|
@@ -8885,6 +8626,14 @@ DLL_EXPORT int lut_cleanup(void)
|
|
8885
8626
|
free(handle_ptr);
|
8886
8627
|
}
|
8887
8628
|
|
8629
|
+
FREE(scl_info_block);
|
8630
|
+
FREE(scl_bic_array);
|
8631
|
+
FREE(scl_bic_block);
|
8632
|
+
FREE(scl_name_array);
|
8633
|
+
FREE(scl_name_block);
|
8634
|
+
FREE(scl_flags_array);
|
8635
|
+
FREE(scl_flags_block);
|
8636
|
+
|
8888
8637
|
if(init_status&8){
|
8889
8638
|
|
8890
8639
|
/* bei init_status&8 ist wohl eine Initialisierung dazwischengekommen (sollte
|
@@ -8894,7 +8643,6 @@ DLL_EXPORT int lut_cleanup(void)
|
|
8894
8643
|
lut_cleanup(); /* neuer Versuch, aufzur�umen */
|
8895
8644
|
RETURN(INIT_FATAL_ERROR);
|
8896
8645
|
}
|
8897
|
-
#line 9456 "ruby/ext/konto_check_raw/konto_check.lxx"
|
8898
8646
|
init_status&=1;
|
8899
8647
|
init_in_progress=0;
|
8900
8648
|
return OK;
|
@@ -9067,8 +8815,8 @@ static void init_atoi_table(void)
|
|
9067
8815
|
int i,ziffer;
|
9068
8816
|
unsigned long l;
|
9069
8817
|
|
9070
|
-
/* �nderungen zum
|
9071
|
-
if(time(NULL)>
|
8818
|
+
/* �nderungen zum 09.12.2019 aktivieren */
|
8819
|
+
if(time(NULL)>1575846000 ||0)pz_aenderungen_aktivieren_2019_12=1;
|
9072
8820
|
|
9073
8821
|
/* ung�ltige Ziffern; Blanks und Tabs werden ebenfalls als ung�ltig
|
9074
8822
|
* angesehen(!), da die Stellenzuordnung sonst nicht mehr stimmt. Ausnahme:
|
@@ -9194,6 +8942,14 @@ static void init_atoi_table(void)
|
|
9194
8942
|
lut2_feld_namen[LUT2_2_IBAN_REGEL_SORT]="LUT2_2_IBAN_REGEL_SORT";
|
9195
8943
|
lut2_feld_namen[LUT2_BIC_H_SORT]="LUT2_BIC_H_SORT";
|
9196
8944
|
lut2_feld_namen[LUT2_2_BIC_H_SORT]="LUT2_2_BIC_H_SORT";
|
8945
|
+
lut2_feld_namen[LUT2_SCL_INFO]="LUT2_SCL_INFO";
|
8946
|
+
lut2_feld_namen[LUT2_2_SCL_INFO]="LUT2_2_SCL_INFO";
|
8947
|
+
lut2_feld_namen[LUT2_SCL_BIC]="LUT2_SCL_BIC";
|
8948
|
+
lut2_feld_namen[LUT2_2_SCL_BIC]="LUT2_2_SCL_BIC";
|
8949
|
+
lut2_feld_namen[LUT2_SCL_NAME]="LUT2_SCL_NAME";
|
8950
|
+
lut2_feld_namen[LUT2_2_SCL_NAME]="LUT2_2_SCL_NAME";
|
8951
|
+
lut2_feld_namen[LUT2_SCL_FLAGS]="LUT2_SCL_FLAGS";
|
8952
|
+
lut2_feld_namen[LUT2_2_SCL_FLAGS]="LUT2_2_SCL_FLAGS";
|
9197
8953
|
|
9198
8954
|
lut_block_idx[1]=0;
|
9199
8955
|
lut_block_idx[2]=0;
|
@@ -9222,6 +8978,10 @@ static void init_atoi_table(void)
|
|
9222
8978
|
lut_block_idx[25]=0;
|
9223
8979
|
lut_block_idx[26]=0;
|
9224
8980
|
lut_block_idx[27]=0;
|
8981
|
+
lut_block_idx[28]=-1;
|
8982
|
+
lut_block_idx[29]=-1;
|
8983
|
+
lut_block_idx[30]=-1;
|
8984
|
+
lut_block_idx[31]=-1;
|
9225
8985
|
|
9226
8986
|
lut_block_name1[1]="BLZ";
|
9227
8987
|
lut_block_name1[2]="FILIALEN";
|
@@ -9250,6 +9010,10 @@ static void init_atoi_table(void)
|
|
9250
9010
|
lut_block_name1[25]="IBAN_REGEL";
|
9251
9011
|
lut_block_name1[26]="IBAN_REGEL_SORT";
|
9252
9012
|
lut_block_name1[27]="BIC_H_SORT";
|
9013
|
+
lut_block_name1[28]="SCL_INFO";
|
9014
|
+
lut_block_name1[29]="SCL_BIC";
|
9015
|
+
lut_block_name1[30]="SCL_NAME";
|
9016
|
+
lut_block_name1[31]="SCL_FLAGS";
|
9253
9017
|
lut_block_name1[101]="BLZ (2)";
|
9254
9018
|
lut_block_name1[102]="FILIALEN (2)";
|
9255
9019
|
lut_block_name1[103]="NAME (2)";
|
@@ -9277,6 +9041,10 @@ static void init_atoi_table(void)
|
|
9277
9041
|
lut_block_name1[125]="IBAN_REGEL (2)";
|
9278
9042
|
lut_block_name1[126]="IBAN_REGEL_SORT (2)";
|
9279
9043
|
lut_block_name1[127]="BIC_H_SORT (2)";
|
9044
|
+
lut_block_name1[128]="SCL_INFO (2)";
|
9045
|
+
lut_block_name1[129]="SCL_BIC (2)";
|
9046
|
+
lut_block_name1[130]="SCL_NAME (2)";
|
9047
|
+
lut_block_name1[131]="SCL_FLAGS (2)";
|
9280
9048
|
|
9281
9049
|
lut_block_name2[1]="1. BLZ";
|
9282
9050
|
lut_block_name2[2]="1. Anzahl Fil.";
|
@@ -9305,6 +9073,10 @@ static void init_atoi_table(void)
|
|
9305
9073
|
lut_block_name2[25]="1. IBAN Regel";
|
9306
9074
|
lut_block_name2[26]="1. IBAN Regel idx";
|
9307
9075
|
lut_block_name2[27]="1. BIC Hauptst.idx";
|
9076
|
+
lut_block_name2[28]="1. SCL Infoblock";
|
9077
|
+
lut_block_name2[29]="1. SCL BIC";
|
9078
|
+
lut_block_name2[30]="1. SCL Banknamen";
|
9079
|
+
lut_block_name2[31]="1. SCL Flags";
|
9308
9080
|
lut_block_name2[101]="2. BLZ";
|
9309
9081
|
lut_block_name2[102]="2. Anzahl Fil.";
|
9310
9082
|
lut_block_name2[103]="2. Name";
|
@@ -9332,8 +9104,11 @@ static void init_atoi_table(void)
|
|
9332
9104
|
lut_block_name2[125]="2. IBAN Regel";
|
9333
9105
|
lut_block_name2[126]="2. IBAN Regel idx";
|
9334
9106
|
lut_block_name2[127]="2. BIC Hauptst.idx";
|
9335
|
-
|
9336
|
-
|
9107
|
+
lut_block_name2[128]="2. SCL Infoblock";
|
9108
|
+
lut_block_name2[129]="2. SCL BIC";
|
9109
|
+
lut_block_name2[130]="2. SCL Banknamen";
|
9110
|
+
lut_block_name2[131]="2. SCL Flags";
|
9111
|
+
lut_blocklen_max=521;
|
9337
9112
|
init_status|=1;
|
9338
9113
|
}
|
9339
9114
|
|
@@ -9393,7 +9168,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
9393
9168
|
|
9394
9169
|
switch(pz_methode){
|
9395
9170
|
|
9396
|
-
#line 9759 "ruby/ext/konto_check_raw/konto_check.lxx"
|
9397
9171
|
/* Berechnungsmethoden 00 bis 09 +���3
|
9398
9172
|
Berechnung nach der Methode 00 +���4 */
|
9399
9173
|
/*
|
@@ -11230,6 +11004,10 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
11230
11004
|
* # Stellennr.: 1 2 3 4 5 6 7 8 9 10 #
|
11231
11005
|
* # Kontonr.: x x x x x x x x x P #
|
11232
11006
|
* # Gewichtung: 0 0 0 0 A 5 8 4 2 (A = 10) #
|
11007
|
+
* # #
|
11008
|
+
* # Es gibt noch einen Sonderfall, der in der IBAN-Regel 49 angegeben #
|
11009
|
+
* # ist: Konten mit 9 an der ersten oder 5. Stelle enthalten keine #
|
11010
|
+
* # Pr�fziffer. sondern sind ohne Pr�fung als richtig anzusehen. #
|
11233
11011
|
* ######################################################################
|
11234
11012
|
*/
|
11235
11013
|
case 44:
|
@@ -11728,7 +11506,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
11728
11506
|
* ######################################################################
|
11729
11507
|
*/
|
11730
11508
|
|
11731
|
-
#line 11770 "ruby/ext/konto_check_raw/konto_check.lxx"
|
11732
11509
|
case 51:
|
11733
11510
|
if(*(kto+2)=='9'){ /* Ausnahme */
|
11734
11511
|
|
@@ -11990,8 +11767,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
11990
11767
|
else
|
11991
11768
|
return FALSE;
|
11992
11769
|
|
11993
|
-
#line 11984 "ruby/ext/konto_check_raw/konto_check.lxx"
|
11994
|
-
#line 11986 "ruby/ext/konto_check_raw/konto_check.lxx"
|
11995
11770
|
/* Berechnung nach der Methode 53 +���4 */
|
11996
11771
|
/*
|
11997
11772
|
* ######################################################################
|
@@ -12290,7 +12065,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
12290
12065
|
* # bewerten. #
|
12291
12066
|
* ######################################################################
|
12292
12067
|
*/
|
12293
|
-
#line 12255 "ruby/ext/konto_check_raw/konto_check.lxx"
|
12294
12068
|
case 57:
|
12295
12069
|
#if DEBUG>0
|
12296
12070
|
if(retvals){
|
@@ -12936,7 +12710,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
12936
12710
|
* # Pr�fzifferberechnung) #
|
12937
12711
|
* ######################################################################
|
12938
12712
|
*/
|
12939
|
-
#line 12835 "ruby/ext/konto_check_raw/konto_check.lxx"
|
12940
12713
|
case 66:
|
12941
12714
|
#if DEBUG>0
|
12942
12715
|
case 2066:
|
@@ -18007,7 +17780,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
18007
17780
|
if(pz==10)break;
|
18008
17781
|
}
|
18009
17782
|
pz=i;
|
18010
|
-
INVALID_PZ10;
|
18011
17783
|
if(*(kto_alt+5)-'0'==pz)return ok;
|
18012
17784
|
#if DEBUG>0
|
18013
17785
|
if(untermethode)return FALSE;
|
@@ -20257,7 +20029,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
20257
20029
|
* # Die 10. Stelle der Kontonummer ist die Pr�fziffer. #
|
20258
20030
|
* # #
|
20259
20031
|
* # Variante 1: #
|
20260
|
-
* # Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7, 8, 9, 2
|
20032
|
+
* # Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7, 8, 9, 2 #
|
20261
20033
|
* # Die Berechnung erfolgt nach der Methode 02. #
|
20262
20034
|
* # #
|
20263
20035
|
* # F�hrt die Berechnung nach Variante 1 zu einem #
|
@@ -20297,7 +20069,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
20297
20069
|
|
20298
20070
|
MOD_11_352; /* pz%=11 */
|
20299
20071
|
if(pz)pz=11-pz;
|
20300
|
-
INVALID_PZ10;
|
20301
20072
|
CHECK_PZX10;
|
20302
20073
|
|
20303
20074
|
/* Variante 2: Berechnung nach der Methode 00 */
|
@@ -20347,7 +20118,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
20347
20118
|
return NOT_IMPLEMENTED;
|
20348
20119
|
}
|
20349
20120
|
}
|
20350
|
-
#line 19049 "ruby/ext/konto_check_raw/konto_check.lxx"
|
20351
20121
|
|
20352
20122
|
/*
|
20353
20123
|
* ######################################################################
|
@@ -20445,7 +20215,6 @@ DLL_EXPORT int kto_check_blz(char *blz,char *kto)
|
|
20445
20215
|
#if DEBUG>0 /* es werden einige Funktionen benutzt, die nur in der Debug-Variante enthalten sind */
|
20446
20216
|
DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,const char **bic,int *regel,RETVAL *retvals)
|
20447
20217
|
{
|
20448
|
-
#line 19147 "ruby/ext/konto_check_raw/konto_check.lxx"
|
20449
20218
|
char *blz_o,buffer[32],kto_o[16],*blz_n,*kto_n,*ptr,*dptr;
|
20450
20219
|
const char *bicp;
|
20451
20220
|
int ret,ret_regel,r,i;
|
@@ -20494,7 +20263,6 @@ DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,con
|
|
20494
20263
|
}
|
20495
20264
|
else /* BLZ und Kto gleich */
|
20496
20265
|
return ret;
|
20497
|
-
#line 19196 "ruby/ext/konto_check_raw/konto_check.lxx"
|
20498
20266
|
}
|
20499
20267
|
|
20500
20268
|
#else /* !DEBUG */
|
@@ -20645,7 +20413,6 @@ DLL_EXPORT int kto_check_blz_dbg(char *blz,char *kto,RETVAL *retvals)
|
|
20645
20413
|
* # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
|
20646
20414
|
* ###########################################################################
|
20647
20415
|
*/
|
20648
|
-
#line 19347 "ruby/ext/konto_check_raw/konto_check.lxx"
|
20649
20416
|
DLL_EXPORT int kto_check_pz_dbg(char *pz,char *kto,char *blz,RETVAL *retvals)
|
20650
20417
|
{
|
20651
20418
|
int untermethode,pz_methode;
|
@@ -20881,7 +20648,6 @@ DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char *
|
|
20881
20648
|
}
|
20882
20649
|
else
|
20883
20650
|
**user_info_p=0;
|
20884
|
-
#line 19568 "ruby/ext/konto_check_raw/konto_check.lxx"
|
20885
20651
|
FREE(prolog);
|
20886
20652
|
return OK;
|
20887
20653
|
}
|
@@ -21016,20 +20782,20 @@ DLL_EXPORT const char *get_kto_check_version_x(int mode)
|
|
21016
20782
|
case 3:
|
21017
20783
|
return __DATE__ ", " __TIME__; /* Compilierdatum und -zeit */
|
21018
20784
|
case 4: /* Datum der Pr�fziffermethode */
|
21019
|
-
if(
|
21020
|
-
return "
|
20785
|
+
if(pz_aenderungen_aktivieren_2019_12)
|
20786
|
+
return "09.12.2019";
|
21021
20787
|
else
|
21022
|
-
return "
|
20788
|
+
return "09.09.2019 (Aenderungen vom 09.12.2019 enthalten aber noch nicht aktiviert)";
|
21023
20789
|
case 5:
|
21024
|
-
return "
|
20790
|
+
return "09.09.2019";
|
21025
20791
|
case 6:
|
21026
|
-
return "
|
20792
|
+
return "16. Dezember 2020"; /* Klartext-Datum der Bibliotheksversion */
|
21027
20793
|
case 7:
|
21028
20794
|
return "final"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
|
21029
20795
|
case 8:
|
21030
20796
|
return "6"; /* Hauptversionszahl */
|
21031
20797
|
case 9:
|
21032
|
-
return "
|
20798
|
+
return "13"; /* Unterversionszahl */
|
21033
20799
|
}
|
21034
20800
|
}
|
21035
20801
|
|
@@ -21175,7 +20941,6 @@ DLL_EXPORT int dump_lutfile(char *outputname,UINT4 *required)
|
|
21175
20941
|
default:
|
21176
20942
|
break;
|
21177
20943
|
}
|
21178
|
-
#line 19801 "ruby/ext/konto_check_raw/konto_check.lxx"
|
21179
20944
|
fputc('\n',out);
|
21180
20945
|
while(--i)fputc('=',out);
|
21181
20946
|
fputc('\n',out);
|
@@ -21500,7 +21265,6 @@ DLL_EXPORT const char *iban2bic_id(char *iban,int *retval,int *blz,int *kto)
|
|
21500
21265
|
return iban2bic(iban,retval,b,k);
|
21501
21266
|
}
|
21502
21267
|
|
21503
|
-
#line 20126 "ruby/ext/konto_check_raw/konto_check.lxx"
|
21504
21268
|
/* Funktion iban_gen(), iban_bic_gen() und iban_bic_gen1 +���1 */
|
21505
21269
|
/* ###########################################################################
|
21506
21270
|
* # Die Funktion iban_gen generiert aus Bankleitzahl und Kontonummer eine #
|
@@ -22333,7 +22097,6 @@ DLL_EXPORT int ipi_check(char *zweck)
|
|
22333
22097
|
* # Copyright (C) 2009,2011 Michael Plugge <m.plugge@hs-mannheim.de> #
|
22334
22098
|
* ###########################################################################
|
22335
22099
|
*/
|
22336
|
-
#line 20959 "ruby/ext/konto_check_raw/konto_check.lxx"
|
22337
22100
|
|
22338
22101
|
/* Funktion volltext_zeichen() +���2 */
|
22339
22102
|
/* Diese Funktion gibt f�r Zeichen die bei der Volltextsuche g�ltig sind
|
@@ -23180,7 +22943,6 @@ static int qcmp_bic_h(const void *ap,const void *bp)
|
|
23180
22943
|
return a-b;
|
23181
22944
|
}
|
23182
22945
|
|
23183
|
-
#line 21806 "ruby/ext/konto_check_raw/konto_check.lxx"
|
23184
22946
|
|
23185
22947
|
/* Funktion qcmp_bic() +���3 */
|
23186
22948
|
static int qcmp_bic(const void *ap,const void *bp)
|
@@ -23285,7 +23047,6 @@ static int qcmp_iban_regel(const void *ap,const void *bp)
|
|
23285
23047
|
else
|
23286
23048
|
return a-b;
|
23287
23049
|
}
|
23288
|
-
#line 21821 "ruby/ext/konto_check_raw/konto_check.lxx"
|
23289
23050
|
|
23290
23051
|
/* Funktion init_blzf() +���2
|
23291
23052
|
* Diese Funktion initialisiert das Array mit den Bankleitzahlen f�r alle
|
@@ -23353,7 +23114,6 @@ DLL_EXPORT int konto_check_idx2blz(int idx,int *zweigstelle,int *retval)
|
|
23353
23114
|
}
|
23354
23115
|
|
23355
23116
|
/* Funktion suche_int1() +���2 */
|
23356
|
-
#line 21889 "ruby/ext/konto_check_raw/konto_check.lxx"
|
23357
23117
|
static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
|
23358
23118
|
int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int cnt,int such_idx)
|
23359
23119
|
{
|
@@ -23404,7 +23164,6 @@ static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstell
|
|
23404
23164
|
}
|
23405
23165
|
|
23406
23166
|
/* Funktion suche_int2() +���2 */
|
23407
|
-
#line 21940 "ruby/ext/konto_check_raw/konto_check.lxx"
|
23408
23167
|
static int suche_int2(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
|
23409
23168
|
int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int such_idx,int pz_suche)
|
23410
23169
|
{
|
@@ -24019,7 +23778,6 @@ static int cmp_suche_sort(const void *ap,const void *bp)
|
|
24019
23778
|
DLL_EXPORT int lut_suche_sort1(int anzahl,int *blz_base,int *zweigstellen_base,int *idx,int *anzahl_o,int **idx_op,int **cnt_op,int uniq)
|
24020
23779
|
{
|
24021
23780
|
int i,j,last_idx,*idx_a,*cnt_o;
|
24022
|
-
#line 22556 "ruby/ext/konto_check_raw/konto_check.lxx"
|
24023
23781
|
|
24024
23782
|
if(idx_op)*idx_op=NULL;
|
24025
23783
|
if(cnt_op)*cnt_op=NULL;
|
@@ -24101,7 +23859,6 @@ DLL_EXPORT int lut_suche_sort2(int anzahl,int *blz,int *zweigstellen,int *anzahl
|
|
24101
23859
|
return OK;
|
24102
23860
|
}
|
24103
23861
|
|
24104
|
-
#line 22639 "ruby/ext/konto_check_raw/konto_check.lxx"
|
24105
23862
|
/* Funktion lut_suche_volltext() +���2 */
|
24106
23863
|
DLL_EXPORT int lut_suche_volltext(char *such_wort,int *anzahl,int *base_name_idx,char ***base_name,
|
24107
23864
|
int *zweigstellen_anzahl,int **start_idx,int **zweigstellen_base,int **blz_base)
|
@@ -24231,7 +23988,6 @@ DLL_EXPORT int lut_suche_blz(int such1,int such2,int *anzahl,int **start_idx,int
|
|
24231
23988
|
return suche_int1(such1,such2,anzahl,start_idx,zweigstellen_base,blz_base,&blz_f,&sort_blz,qcmp_blz,cnt,0);
|
24232
23989
|
}
|
24233
23990
|
|
24234
|
-
#line 22789 "ruby/ext/konto_check_raw/konto_check.lxx"
|
24235
23991
|
/* Funktion lut_suche_bic() +���2 */
|
24236
23992
|
DLL_EXPORT int lut_suche_bic(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
|
24237
23993
|
char ***base_name,int **blz_base)
|
@@ -24322,7 +24078,6 @@ DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,i
|
|
24322
24078
|
return suche_int2(such1*100,such2*100+99,anzahl,start_idx,zweigstellen_base,blz_base,&iban_regel,&sort_iban_regel,qcmp_iban_regel,LUT2_IBAN_REGEL_SORT,0);
|
24323
24079
|
}
|
24324
24080
|
|
24325
|
-
#line 22822 "ruby/ext/konto_check_raw/konto_check.lxx"
|
24326
24081
|
|
24327
24082
|
/* Funktion lut_suche_bic_h() +���2 */
|
24328
24083
|
DLL_EXPORT int lut_suche_bic_h(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
|
@@ -24708,7 +24463,6 @@ DLL_EXPORT const char *iban_ort(char *iban,int filiale,int*retval)
|
|
24708
24463
|
{
|
24709
24464
|
return iban_fkt_s(iban,filiale,retval,lut_ort);
|
24710
24465
|
}
|
24711
|
-
#line 22911 "ruby/ext/konto_check_raw/konto_check.lxx"
|
24712
24466
|
|
24713
24467
|
static int bic_fkt_c(char *bic1,int mode,int filiale,int *retval,char *base,int error)
|
24714
24468
|
{
|
@@ -25997,7 +25751,6 @@ DLL_EXPORT const char *pz2str(int pz,int *ret)
|
|
25997
25751
|
default: return "???";
|
25998
25752
|
}
|
25999
25753
|
}
|
26000
|
-
#line 23866 "ruby/ext/konto_check_raw/konto_check.lxx"
|
26001
25754
|
|
26002
25755
|
/* Funktion lut_keine_iban_berechnung() +���1 */
|
26003
25756
|
/*
|
@@ -26112,7 +25865,7 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
|
|
26112
25865
|
/* Funktion pz_aenderungen_enable() +���1 */
|
26113
25866
|
/* ###########################################################################
|
26114
25867
|
* # Die Funktion pz_aenderungen_enable() dient dazu, den Status des Flags #
|
26115
|
-
* #
|
25868
|
+
* # pz_aenderungen_aktivieren_2019_12 abzufragen bzw. zu setzen. Falls die Variable #
|
26116
25869
|
* # set 1 ist, werden die �nderungen aktiviert, falls sie 0 ist, werden #
|
26117
25870
|
* # die �nderungen deaktiviert. Bei allen anderen Werten wird das aktuelle #
|
26118
25871
|
* # Flag nicht ver�ndert, sondern nur der Status zur�ckgegeben. #
|
@@ -26128,8 +25881,8 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
|
|
26128
25881
|
|
26129
25882
|
DLL_EXPORT int pz_aenderungen_enable(int set)
|
26130
25883
|
{
|
26131
|
-
if(set==0 || set==1)
|
26132
|
-
return
|
25884
|
+
if(set==0 || set==1)pz_aenderungen_aktivieren_2019_12=set;
|
25885
|
+
return pz_aenderungen_aktivieren_2019_12;
|
26133
25886
|
}
|
26134
25887
|
|
26135
25888
|
#if DEBUG>0
|
@@ -26161,7 +25914,6 @@ DLL_EXPORT char *kto_check_test_vars(char *txt,UINT4 i)
|
|
26161
25914
|
#endif
|
26162
25915
|
|
26163
25916
|
|
26164
|
-
#line 24030 "ruby/ext/konto_check_raw/konto_check.lxx"
|
26165
25917
|
/* Funktionen *_id() +���1 */
|
26166
25918
|
/* ###########################################################################
|
26167
25919
|
* # Die folgenden Funktionen sind die id-Varianten von Funktionen, die #
|
@@ -26418,6 +26170,764 @@ DLL_EXPORT int kc_id_free(int handle)
|
|
26418
26170
|
return INVALID_HANDLE;
|
26419
26171
|
}
|
26420
26172
|
|
26173
|
+
/* Funktionen f�r den Zugriff auf das SCL-Verzeichnis +���1 */
|
26174
|
+
/* Hilfsfunktion f�r die SCL-Routinen +���2 */
|
26175
|
+
/* Funktion cmp_bic() +���3 */
|
26176
|
+
/* ###########################################################################
|
26177
|
+
* # cmp_bic() ist die Vergleichsfunktion f�r bic_binsearch() und #
|
26178
|
+
* # lut_write_scl_blocks() (zum Sortieren der BICs). #
|
26179
|
+
* # #
|
26180
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26181
|
+
* ###########################################################################
|
26182
|
+
*/
|
26183
|
+
static int cmp_bic(const void *ap,const void *bp)
|
26184
|
+
{
|
26185
|
+
int a,b,r;
|
26186
|
+
|
26187
|
+
a=*((int *)ap);
|
26188
|
+
b=*((int *)bp);
|
26189
|
+
if((r=strcmp(scl_bic_array[a],scl_bic_array[b])))
|
26190
|
+
return r;
|
26191
|
+
else
|
26192
|
+
return a-b;
|
26193
|
+
}
|
26194
|
+
|
26195
|
+
/* Funktion bic_binsearch() +���3 */
|
26196
|
+
/* ###########################################################################
|
26197
|
+
* # Die Funktion bic_binsearch() implementiert eine bin�re Suche im #
|
26198
|
+
* # BIC-Array (rekursiv) #
|
26199
|
+
* # #
|
26200
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26201
|
+
* ###########################################################################
|
26202
|
+
*/
|
26203
|
+
static int bic_binsearch(int links,int rechts,char *bic)
|
26204
|
+
{
|
26205
|
+
int cmp,mitte;
|
26206
|
+
|
26207
|
+
if(links>rechts)return -1; /* nicht gefunden */
|
26208
|
+
mitte=(rechts+links)/2;
|
26209
|
+
if(!(cmp=strcmp(scl_bic_array[mitte],bic)))return mitte; /* Element gefunden */
|
26210
|
+
if(cmp>0)
|
26211
|
+
return bic_binsearch(links,mitte-1,bic);
|
26212
|
+
else
|
26213
|
+
return bic_binsearch(mitte+1,rechts,bic);
|
26214
|
+
}
|
26215
|
+
|
26216
|
+
/* Funktion scl_idx() +���3 */
|
26217
|
+
/* ###########################################################################
|
26218
|
+
* # Die Funktion scl_idx sucht den Index zu einem BIC innerhalb der SCL- #
|
26219
|
+
* # Arrays. Der BIC wird zun�chst so gesucht wie er angegeben ist. #
|
26220
|
+
* # Falls diese Suche erfolglos ist, wird getestet, ob im BIC-Verzeichnis #
|
26221
|
+
* # ein BIC mit �bereinstimmung in den ersten 8 Stellen und XXX in den drei #
|
26222
|
+
* # letzten Stellen existiert (Extension BIC); falls dieser auch nicht #
|
26223
|
+
* # existiert, wird als Letztes ein 8-stelliger BIC gesucht (Wildcard-BIC). #
|
26224
|
+
* # #
|
26225
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26226
|
+
* ###########################################################################
|
26227
|
+
*/
|
26228
|
+
static int scl_idx(const char *bic,int *retval)
|
26229
|
+
{
|
26230
|
+
char such_bic[12];
|
26231
|
+
int i,idx;
|
26232
|
+
|
26233
|
+
if(!scl_cnt || !scl_bic_array){
|
26234
|
+
if(retval)*retval=NO_SCL_BLOCKS_LOADED;
|
26235
|
+
return -1;
|
26236
|
+
}
|
26237
|
+
strcpy(such_bic,bic);
|
26238
|
+
for(i=0;i<11 && such_bic[i];i++)such_bic[i]=toupper(such_bic[i]);
|
26239
|
+
|
26240
|
+
/*
|
26241
|
+
* Auszug aus dem SCL Directory Notice (Seite 13):
|
26242
|
+
*
|
26243
|
+
* The SCL Directory contains 11-character and 8-character BICs. The following convention
|
26244
|
+
* applies.
|
26245
|
+
*
|
26246
|
+
* - An 8-character BIC is a wild card and represents the reachability of any 11-character
|
26247
|
+
* BIC with the same first eight characters, as well as the reachability of the 8-character
|
26248
|
+
* BIC itself.
|
26249
|
+
*
|
26250
|
+
* - An 11-character BIC with the branch code extension "XXX" represents itself as well
|
26251
|
+
* as the reachability of the corresponding 8-character BIC. But it is not a wild card.
|
26252
|
+
*
|
26253
|
+
* - All other 11-character BICs represent the reachability of the respective individual
|
26254
|
+
* 11-character BIC only.
|
26255
|
+
*
|
26256
|
+
* https://www.bundesbank.de/resource/blob/626738/8f82d10dd08993a1941e8441cf5a9fd4/mL/scl-directory-notice-ab-nov2018-data.pdf
|
26257
|
+
*
|
26258
|
+
* Punkt 2 hat eine h�here Priorit�t als Punkt 1, denn eine 8-stellige BIC ist mit selbiger
|
26259
|
+
* um 'XXX' erweiterten BIC identisch.
|
26260
|
+
*
|
26261
|
+
*/
|
26262
|
+
|
26263
|
+
if(such_bic[8]==0){ /* Such-BIC 8-stellig angegeben; BIC zuerst mit XXX extension suchen */
|
26264
|
+
such_bic[8]=such_bic[9]=such_bic[10]='X';
|
26265
|
+
such_bic[11]=0;
|
26266
|
+
idx=bic_binsearch(0,scl_cnt-1,such_bic);
|
26267
|
+
if(idx>=0){
|
26268
|
+
if(retval)*retval=OK_SCL_EXTENSION_BIC_USED;
|
26269
|
+
return idx;
|
26270
|
+
}
|
26271
|
+
else
|
26272
|
+
such_bic[8]=0; /* wieder zur�cksetzen */
|
26273
|
+
}
|
26274
|
+
|
26275
|
+
/* nun den BIC suchen wie angegeben */
|
26276
|
+
idx=bic_binsearch(0,scl_cnt-1,such_bic);
|
26277
|
+
if(idx>=0){
|
26278
|
+
if(retval)*retval=OK;
|
26279
|
+
return idx;
|
26280
|
+
}
|
26281
|
+
else if(such_bic[8]==0){
|
26282
|
+
if(retval)*retval=SCL_BIC_NOT_FOUND;
|
26283
|
+
return -1;
|
26284
|
+
}
|
26285
|
+
else{
|
26286
|
+
/* Wildcard-BIC suchen, nur noch bei 11-stelligen BICs */
|
26287
|
+
such_bic[8]=0;
|
26288
|
+
idx=bic_binsearch(0,scl_cnt-1,such_bic);
|
26289
|
+
if(idx>=0){
|
26290
|
+
if(retval)*retval=OK_SCL_WILDCARD_BIC_USED;
|
26291
|
+
return idx;
|
26292
|
+
}
|
26293
|
+
else{
|
26294
|
+
if(retval)*retval=SCL_BIC_NOT_FOUND;
|
26295
|
+
return -1;
|
26296
|
+
}
|
26297
|
+
}
|
26298
|
+
}
|
26299
|
+
|
26300
|
+
/* Externe Schnittstelle f�r die SCL-Routinen +���2 */
|
26301
|
+
/* Funktion lut_write_scl_blocks() +���3 */
|
26302
|
+
/* ###########################################################################
|
26303
|
+
* # Die Funktion lut_write_scl_blocks() liest ein SCL-Verzeichnis ein und #
|
26304
|
+
* # schreibt die Daten in die angegebene LUT-Datei. #
|
26305
|
+
* # #
|
26306
|
+
* # Beschreibung und weitere Infos: #
|
26307
|
+
* # https://www.bundesbank.de/Redaktion/DE/Standardartikel/Aufgaben/Unbarer_Zahlungsverkehr/emz_scl_directory_fuer_den_sepa_clearer.html #
|
26308
|
+
* # #
|
26309
|
+
* # direkter Download-Link: #
|
26310
|
+
* # https://www.bundesbank.de/Redaktion/DE/Downloads/Aufgaben/Unbarer_Zahlungsverkehr/SEPA/verzeichnis_der_erreichbaren_zahlungsdienstleister.csv?__blob=publicationFile
|
26311
|
+
* # #
|
26312
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26313
|
+
* ###########################################################################
|
26314
|
+
*/
|
26315
|
+
DLL_EXPORT int lut_write_scl_blocks(char *inputfile,char *lutfile)
|
26316
|
+
{
|
26317
|
+
char c,*ptr,buffer[512],*scl_name_block_s,*scl_bic_block_s,*scl_flags_block_s,*ptr1,*ptr2,*ptr3;
|
26318
|
+
char scl_gueltigkeit[16],scl_gueltigkeit_iso[16];
|
26319
|
+
int cnt,i,rv,j,*iptr,jahr,monat,tag;
|
26320
|
+
FILE *in,*lut;
|
26321
|
+
struct stat stat_buffer;
|
26322
|
+
struct tm z;
|
26323
|
+
time_t ts;
|
26324
|
+
|
26325
|
+
if(!(in=fopen(inputfile,"r")))RETURN(FILE_READ_ERROR);
|
26326
|
+
fgets(buffer,512,in);
|
26327
|
+
if(strncmp(buffer,"Gueltig ab / valid from ",24))return SCL_INPUT_FORMAT_ERROR;
|
26328
|
+
for(ptr=buffer;!isdigit(*ptr);ptr++);
|
26329
|
+
strncpy(scl_gueltigkeit,ptr,16);
|
26330
|
+
scl_gueltigkeit[10]=0;
|
26331
|
+
jahr=atoi(scl_gueltigkeit+6);
|
26332
|
+
monat=(scl_gueltigkeit[3]-'0')*10+scl_gueltigkeit[4]-'0';
|
26333
|
+
tag=(scl_gueltigkeit[0]-'0')*10+scl_gueltigkeit[1]-'0';
|
26334
|
+
z.tm_sec=z.tm_min=0;
|
26335
|
+
z.tm_hour=6; /* Die SCL-Datei wird um 6 Uhr morgens ver�ffentlicht */
|
26336
|
+
z.tm_mday=tag;
|
26337
|
+
z.tm_mon=monat;
|
26338
|
+
z.tm_year=jahr-1900;
|
26339
|
+
ts=mktime(&z);
|
26340
|
+
snprintf(scl_gueltigkeit_iso,16,"%4d-%02d-%02d",jahr,monat,tag);
|
26341
|
+
fgets(buffer,512,in);
|
26342
|
+
if(strncmp(buffer,"BIC;Name;Service SCT;Service SDD;Service COR1;Service B2B;Service SCC",69))RETURN(SCL_INPUT_FORMAT_ERROR);
|
26343
|
+
|
26344
|
+
stat(inputfile,&stat_buffer);
|
26345
|
+
cnt=stat_buffer.st_size/163+100; /* etwas gro�z�gig die Anzahl rechnen */
|
26346
|
+
|
26347
|
+
scl_bic_array=(char **)calloc(sizeof(char*),cnt);
|
26348
|
+
scl_name_array=(char **)calloc(sizeof(char*),cnt);
|
26349
|
+
scl_flags_array=(char **)calloc(sizeof(char*),cnt);
|
26350
|
+
|
26351
|
+
scl_bic_block=ptr1=(char *)calloc(12,cnt);
|
26352
|
+
scl_name_block=ptr2=(char *)calloc(150,cnt);
|
26353
|
+
scl_flags_block=ptr3=(char *)calloc(6,cnt);
|
26354
|
+
|
26355
|
+
/* SCL-Datei einlesen */
|
26356
|
+
for(cnt=0;fgets(buffer,512,in);){
|
26357
|
+
scl_bic_array[cnt]=ptr1;
|
26358
|
+
scl_name_array[cnt]=ptr2;
|
26359
|
+
scl_flags_array[cnt]=ptr3;
|
26360
|
+
cnt++;
|
26361
|
+
for(ptr=buffer;*ptr!=';' && !isspace(*ptr);*ptr1++=*ptr++);
|
26362
|
+
c=*ptr;
|
26363
|
+
*ptr1++=0; /* bei Leerzeichen am Ende dieses l�schen */
|
26364
|
+
*ptr++=0;
|
26365
|
+
|
26366
|
+
if(c==' ')while(*ptr++!=';' && *ptr!='\n'); /* Fehler in der Datei abfangen (fehlendes Trennzeichen) */
|
26367
|
+
while((*ptr2++=*ptr++)!=';'); /* ptr steht zu Beginn der Schleife auf dem Namen */
|
26368
|
+
ptr2-=2;
|
26369
|
+
while(isspace(*ptr2))ptr2--;
|
26370
|
+
*++ptr2=0;
|
26371
|
+
ptr2++;
|
26372
|
+
|
26373
|
+
/* ptr steht nun auf den Flags */
|
26374
|
+
*ptr3++=*ptr;
|
26375
|
+
*ptr3++=*(ptr+2);
|
26376
|
+
*ptr3++=*(ptr+4);
|
26377
|
+
*ptr3++=*(ptr+6);
|
26378
|
+
*ptr3++=*(ptr+8);
|
26379
|
+
*ptr3++=0;
|
26380
|
+
}
|
26381
|
+
fclose(in);
|
26382
|
+
|
26383
|
+
/* Sortierarray aufbauen */
|
26384
|
+
iptr=(int* )calloc(sizeof(int),cnt);
|
26385
|
+
for(i=0;i<cnt;i++)iptr[i]=i;
|
26386
|
+
|
26387
|
+
/* vor dem Abspeichern der Blocks nach BICs sortieren */
|
26388
|
+
qsort(iptr,cnt,sizeof(int),cmp_bic);
|
26389
|
+
|
26390
|
+
ptr1=scl_bic_block_s=(char *)calloc(1,ptr1-scl_bic_block+16);
|
26391
|
+
ptr2=scl_name_block_s=(char *)calloc(1,ptr2-scl_name_block+16);
|
26392
|
+
ptr3=scl_flags_block_s=(char *)calloc(1,ptr3-scl_flags_block+16);
|
26393
|
+
for(i=0;i<cnt;i++){
|
26394
|
+
j=iptr[i];
|
26395
|
+
for(ptr=scl_bic_array[j];(*ptr1++=*ptr++););
|
26396
|
+
for(ptr=scl_name_array[j];(*ptr2++=*ptr++););
|
26397
|
+
for(ptr=scl_flags_array[j];(*ptr3++=*ptr++););
|
26398
|
+
}
|
26399
|
+
free(iptr);
|
26400
|
+
|
26401
|
+
if(!(lut=fopen(lutfile,"rb+")))RETURN(FILE_WRITE_ERROR);
|
26402
|
+
|
26403
|
+
/* zun�chst mal testen ob es auch eine LUT2 Datei ist */
|
26404
|
+
if(!(ptr=fgets(buffer,512,lut)))RETURN(FILE_READ_ERROR);
|
26405
|
+
while(*ptr && *ptr!='\n')ptr++;
|
26406
|
+
*--ptr=0;
|
26407
|
+
if(!strcmp(buffer,"BLZ Lookup Table/Format 1."))RETURN(LUT1_FILE_USED); /* alte LUT-Datei */
|
26408
|
+
if(strcmp(buffer,"BLZ Lookup Table/Format 2."))RETURN(INVALID_LUT_FILE); /* keine LUT-Datei */
|
26409
|
+
|
26410
|
+
/* nun die Blocks schreiben */
|
26411
|
+
rewind(lut);
|
26412
|
+
sprintf(buffer,"cnt: %d, TS: %ld, Gueltigkeit: %s %s",cnt,(long)ts,scl_gueltigkeit,scl_gueltigkeit_iso);
|
26413
|
+
if((rv=write_lut_block_int(lut,LUT2_SCL_INFO,strlen(buffer)+1,buffer))!=OK){
|
26414
|
+
fclose(lut);
|
26415
|
+
FREE(scl_bic_block_s);
|
26416
|
+
FREE(scl_name_block_s);
|
26417
|
+
FREE(scl_flags_block_s);
|
26418
|
+
RETURN(rv);
|
26419
|
+
}
|
26420
|
+
if((rv=write_lut_block_int(lut,LUT2_SCL_BIC,(UINT4)(ptr1-scl_bic_block_s+1),scl_bic_block_s))!=OK){
|
26421
|
+
fclose(lut);
|
26422
|
+
FREE(scl_bic_block_s);
|
26423
|
+
FREE(scl_name_block_s);
|
26424
|
+
FREE(scl_flags_block_s);
|
26425
|
+
RETURN(rv);
|
26426
|
+
}
|
26427
|
+
if((rv=write_lut_block_int(lut,LUT2_SCL_NAME,(UINT4)(ptr2-scl_name_block_s+1),scl_name_block_s))!=OK){
|
26428
|
+
fclose(lut);
|
26429
|
+
FREE(scl_bic_block_s);
|
26430
|
+
FREE(scl_name_block_s);
|
26431
|
+
FREE(scl_flags_block_s);
|
26432
|
+
RETURN(rv);
|
26433
|
+
}
|
26434
|
+
if((rv=write_lut_block_int(lut,LUT2_SCL_FLAGS,(UINT4)(ptr3-scl_flags_block_s+1),scl_flags_block_s))!=OK){
|
26435
|
+
fclose(lut);
|
26436
|
+
FREE(scl_bic_block_s);
|
26437
|
+
FREE(scl_name_block_s);
|
26438
|
+
FREE(scl_flags_block_s);
|
26439
|
+
RETURN(rv);
|
26440
|
+
}
|
26441
|
+
|
26442
|
+
fclose(lut);
|
26443
|
+
FREE(scl_bic_block_s);
|
26444
|
+
FREE(scl_name_block_s);
|
26445
|
+
FREE(scl_flags_block_s);
|
26446
|
+
RETURN(OK);
|
26447
|
+
}
|
26448
|
+
|
26449
|
+
/* Funktion lut_scl_init() +���3 */
|
26450
|
+
/* ###########################################################################
|
26451
|
+
* # Die Funktion lut_scl_init() liest die SCL-Blocks aus einer LUT-Datei #
|
26452
|
+
* # und initialisiert die zugeh�rigen internen Datenstrukturen. #
|
26453
|
+
* # #
|
26454
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26455
|
+
* ###########################################################################
|
26456
|
+
*/
|
26457
|
+
DLL_EXPORT int lut_scl_init(char *lut_name)
|
26458
|
+
{
|
26459
|
+
char *ptr,*end;
|
26460
|
+
int i,cnt,rv;
|
26461
|
+
static UINT4 block_size_0,block_size_1,block_size_2,block_size_3;
|
26462
|
+
FILE *lut;
|
26463
|
+
|
26464
|
+
if(scl_bic_array && scl_name_array && scl_flags_array)return OK; /* schon initialisiert */
|
26465
|
+
|
26466
|
+
if(!(lut=fopen(lut_name,"rb")))RETURN(FILE_READ_ERROR);
|
26467
|
+
if((rv=read_lut_block_int(lut,0,LUT2_SCL_INFO,&block_size_0,&scl_info_block))<0){
|
26468
|
+
fclose(lut);
|
26469
|
+
if(rv==LUT2_BLOCK_NOT_IN_FILE)
|
26470
|
+
RETURN(NO_SCL_BLOCKS);
|
26471
|
+
else
|
26472
|
+
return rv;
|
26473
|
+
}
|
26474
|
+
if((rv=read_lut_block_int(lut,0,LUT2_SCL_BIC,&block_size_1,&scl_bic_block))<0){
|
26475
|
+
fclose(lut);
|
26476
|
+
if(rv==LUT2_BLOCK_NOT_IN_FILE)
|
26477
|
+
RETURN(NO_SCL_BLOCKS);
|
26478
|
+
else
|
26479
|
+
return rv;
|
26480
|
+
}
|
26481
|
+
if((rv=read_lut_block_int(lut,0,LUT2_SCL_NAME,&block_size_2,&scl_name_block))<0){
|
26482
|
+
fclose(lut);
|
26483
|
+
if(rv==LUT2_BLOCK_NOT_IN_FILE)
|
26484
|
+
RETURN(NO_SCL_BLOCKS);
|
26485
|
+
else
|
26486
|
+
return rv;
|
26487
|
+
}
|
26488
|
+
if((rv=read_lut_block_int(lut,0,LUT2_SCL_FLAGS,&block_size_3,&scl_flags_block))<0){
|
26489
|
+
fclose(lut);
|
26490
|
+
if(rv==LUT2_BLOCK_NOT_IN_FILE)
|
26491
|
+
RETURN(NO_SCL_BLOCKS);
|
26492
|
+
else
|
26493
|
+
return rv;
|
26494
|
+
}
|
26495
|
+
fclose(lut);
|
26496
|
+
if((i=sscanf(scl_info_block,"cnt: %d, TS: %ld, Gueltigkeit: %15s %15s",
|
26497
|
+
&cnt,&scl_ts,(char *)&scl_gueltigkeit,(char *)&scl_gueltigkeit_iso))!=4)RETURN(INVALID_SCL_INFO_BLOCK);
|
26498
|
+
|
26499
|
+
scl_bic_array=(char **)calloc(sizeof(char*),cnt);
|
26500
|
+
scl_name_array=(char **)calloc(sizeof(char*),cnt);
|
26501
|
+
scl_flags_array=(char **)calloc(sizeof(char*),cnt);
|
26502
|
+
|
26503
|
+
for(i=0,ptr=scl_bic_block,end=scl_bic_block+block_size_1;i<cnt && ptr<end;i++){
|
26504
|
+
scl_bic_array[i]=ptr;
|
26505
|
+
while(*ptr++ && ptr<end);
|
26506
|
+
}
|
26507
|
+
|
26508
|
+
for(i=0,ptr=scl_name_block,end=scl_name_block+block_size_2;i<cnt && ptr<end;){
|
26509
|
+
scl_name_array[i++]=ptr;
|
26510
|
+
while(*ptr++ && ptr<end);
|
26511
|
+
}
|
26512
|
+
|
26513
|
+
for(i=0,ptr=scl_flags_block,end=scl_flags_block+block_size_3;i<cnt && ptr<end;){
|
26514
|
+
scl_flags_array[i++]=ptr;
|
26515
|
+
while(*ptr++ && ptr<end);
|
26516
|
+
}
|
26517
|
+
scl_cnt=cnt;
|
26518
|
+
RETURN(OK);
|
26519
|
+
}
|
26520
|
+
|
26521
|
+
/* Funktion lut_scl_info() +���3 */
|
26522
|
+
/* ###########################################################################
|
26523
|
+
* # Die Funktion lut_scl_info() gibt Infos �ber die Anzahl der Eintr�ge im #
|
26524
|
+
* # SCL-Verzeichnis sowie das Datum, ab wann die Datei g�ltig ist. #
|
26525
|
+
* # #
|
26526
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26527
|
+
* ###########################################################################
|
26528
|
+
*/
|
26529
|
+
DLL_EXPORT int lut_scl_info(char *lutfile,int *cnt,const char **gueltigkeit,const char **gueltigkeit_iso)
|
26530
|
+
{
|
26531
|
+
int s_cnt,i,rv;
|
26532
|
+
UINT4 block_size;
|
26533
|
+
FILE *lut;
|
26534
|
+
|
26535
|
+
/* falls noch nicht geschehen, den SCL-Infoblock holen */
|
26536
|
+
if(!scl_cnt){
|
26537
|
+
if(!(lut=fopen(lutfile,"rb")))RETURN(FILE_READ_ERROR);
|
26538
|
+
if((rv=read_lut_block_int(lut,0,LUT2_SCL_INFO,&block_size,&scl_info_block))<0){
|
26539
|
+
fclose(lut);
|
26540
|
+
if(rv==LUT2_BLOCK_NOT_IN_FILE)
|
26541
|
+
RETURN(NO_SCL_BLOCKS);
|
26542
|
+
else
|
26543
|
+
return rv;
|
26544
|
+
}
|
26545
|
+
if((i=sscanf(scl_info_block,"cnt: %d, TS: %ld, Gueltigkeit: %15s %15s",
|
26546
|
+
&s_cnt,&scl_ts,(char *)&scl_gueltigkeit,(char *)&scl_gueltigkeit_iso))!=4)RETURN(INVALID_SCL_INFO_BLOCK);
|
26547
|
+
}
|
26548
|
+
else
|
26549
|
+
s_cnt=scl_cnt;
|
26550
|
+
|
26551
|
+
if(s_cnt)*cnt=s_cnt;
|
26552
|
+
if(gueltigkeit)*gueltigkeit=scl_gueltigkeit;
|
26553
|
+
if(gueltigkeit_iso)*gueltigkeit_iso=scl_gueltigkeit_iso;
|
26554
|
+
return OK;
|
26555
|
+
}
|
26556
|
+
|
26557
|
+
/* Funktion lut_scl_multi() +���3 */
|
26558
|
+
/* ###########################################################################
|
26559
|
+
* # Die Funktion lut_scl_multi() gibt alle Eintr�ge des SCL-Verzeichnisses #
|
26560
|
+
* # zu einem gegebenen BIC zur�ck. #
|
26561
|
+
* # #
|
26562
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26563
|
+
* ###########################################################################
|
26564
|
+
*/
|
26565
|
+
DLL_EXPORT int lut_scl_multi(char *bic,const char **scl_flags,const char **used_bic,const char **scl_name)
|
26566
|
+
{
|
26567
|
+
int i,rv;
|
26568
|
+
|
26569
|
+
i=scl_idx(bic,&rv);
|
26570
|
+
if(rv<0)return rv;
|
26571
|
+
if(scl_flags)*scl_flags=scl_flags_array[i];
|
26572
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26573
|
+
if(scl_name)*scl_name=scl_name_array[i];
|
26574
|
+
return rv;
|
26575
|
+
}
|
26576
|
+
|
26577
|
+
/* Funktion lut_scl_sct() +���3 */
|
26578
|
+
/* ###########################################################################
|
26579
|
+
* # Die Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL- #
|
26580
|
+
* # Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
|
26581
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26582
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26583
|
+
* # #
|
26584
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26585
|
+
* ###########################################################################
|
26586
|
+
*/
|
26587
|
+
DLL_EXPORT int lut_scl_sct(char *bic,int *retval)
|
26588
|
+
{
|
26589
|
+
char *flags;
|
26590
|
+
int i,rv;
|
26591
|
+
|
26592
|
+
i=scl_idx(bic,&rv);
|
26593
|
+
if(rv<0){
|
26594
|
+
if(retval)*retval=rv;
|
26595
|
+
return -1;
|
26596
|
+
}
|
26597
|
+
else
|
26598
|
+
if(retval)*retval=OK;
|
26599
|
+
flags=scl_flags_array[i];
|
26600
|
+
return flags[0]-'0';
|
26601
|
+
}
|
26602
|
+
|
26603
|
+
/* Funktion lut_scl_sdd() +���3 */
|
26604
|
+
/* ###########################################################################
|
26605
|
+
* # Die Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basis- #
|
26606
|
+
* # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
|
26607
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26608
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26609
|
+
* # #
|
26610
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26611
|
+
* ###########################################################################
|
26612
|
+
*/
|
26613
|
+
DLL_EXPORT int lut_scl_sdd(char *bic,int *retval)
|
26614
|
+
{
|
26615
|
+
char *flags;
|
26616
|
+
int i,rv;
|
26617
|
+
|
26618
|
+
i=scl_idx(bic,&rv);
|
26619
|
+
if(rv<0){
|
26620
|
+
if(retval)*retval=rv;
|
26621
|
+
return -1;
|
26622
|
+
}
|
26623
|
+
else
|
26624
|
+
if(retval)*retval=OK;
|
26625
|
+
flags=scl_flags_array[i];
|
26626
|
+
return flags[1]-'0';
|
26627
|
+
}
|
26628
|
+
|
26629
|
+
/* Funktion lut_scl_cor1() +���3 */
|
26630
|
+
/* ###########################################################################
|
26631
|
+
* # Die Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basis-#
|
26632
|
+
* # lastschrift mit verk�rzter Vorlagefrist) des SCL-Verzeichnisses und #
|
26633
|
+
* # gibt das Flag (0 bzw. 1) zur�ck. #
|
26634
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26635
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26636
|
+
* # #
|
26637
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26638
|
+
* ###########################################################################
|
26639
|
+
*/
|
26640
|
+
DLL_EXPORT int lut_scl_cor1(char *bic,int *retval)
|
26641
|
+
{
|
26642
|
+
char *flags;
|
26643
|
+
int i,rv;
|
26644
|
+
|
26645
|
+
i=scl_idx(bic,&rv);
|
26646
|
+
if(rv<0){
|
26647
|
+
if(retval)*retval=rv;
|
26648
|
+
return -1;
|
26649
|
+
}
|
26650
|
+
else
|
26651
|
+
if(retval)*retval=OK;
|
26652
|
+
flags=scl_flags_array[i];
|
26653
|
+
return flags[2]-'0';
|
26654
|
+
}
|
26655
|
+
|
26656
|
+
/* Funktion lut_scl_b2b() +���3 */
|
26657
|
+
/* ###########################################################################
|
26658
|
+
* # Die Funktion bestimmt das Flag BCB (SEPA B2B Direct Debit (Sepa-Firmen- #
|
26659
|
+
* # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
|
26660
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26661
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26662
|
+
* # #
|
26663
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26664
|
+
* ###########################################################################
|
26665
|
+
*/
|
26666
|
+
DLL_EXPORT int lut_scl_b2b(char *bic,int *retval)
|
26667
|
+
{
|
26668
|
+
char *flags;
|
26669
|
+
int i,rv;
|
26670
|
+
|
26671
|
+
i=scl_idx(bic,&rv);
|
26672
|
+
if(rv<0){
|
26673
|
+
if(retval)*retval=rv;
|
26674
|
+
return -1;
|
26675
|
+
}
|
26676
|
+
else
|
26677
|
+
if(retval)*retval=OK;
|
26678
|
+
flags=scl_flags_array[i];
|
26679
|
+
return flags[3]-'0';
|
26680
|
+
}
|
26681
|
+
|
26682
|
+
/* Funktion lut_scl_scc() +���3 */
|
26683
|
+
/* ###########################################################################
|
26684
|
+
* # Die Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karten- #
|
26685
|
+
* # einz�ge) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
|
26686
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26687
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26688
|
+
* # #
|
26689
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26690
|
+
* ###########################################################################
|
26691
|
+
*/
|
26692
|
+
DLL_EXPORT int lut_scl_scc(char *bic,int *retval)
|
26693
|
+
{
|
26694
|
+
char *flags;
|
26695
|
+
int i,rv;
|
26696
|
+
|
26697
|
+
i=scl_idx(bic,&rv);
|
26698
|
+
if(rv<0){
|
26699
|
+
if(retval)*retval=rv;
|
26700
|
+
return -1;
|
26701
|
+
}
|
26702
|
+
else
|
26703
|
+
if(retval)*retval=OK;
|
26704
|
+
flags=scl_flags_array[i];
|
26705
|
+
return flags[4]-'0';
|
26706
|
+
}
|
26707
|
+
|
26708
|
+
/* Funktion lut_scl_multi_blz() +���3 */
|
26709
|
+
/* ###########################################################################
|
26710
|
+
* # Die Funktion lut_scl_multi_blz() gibt alle Eintr�ge des SCL- #
|
26711
|
+
* # Verzeichnisses zu einer gegebenen BLZ zur�ck. Da die BLZ zun�chst in #
|
26712
|
+
* # einen BIC umgewandelt werden mu�, m�ssen auch die Blocks BLZ und BIC #
|
26713
|
+
* # der LUT-Datei initialisiert sein, sonst wird ein Fehler zur�ckgegeben. #
|
26714
|
+
* # #
|
26715
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26716
|
+
* ###########################################################################
|
26717
|
+
*/
|
26718
|
+
DLL_EXPORT int lut_scl_multi_blz(char *blz,const char **scl_flags,const char **used_bic,const char **scl_name)
|
26719
|
+
{
|
26720
|
+
const char *bic;
|
26721
|
+
int i,rv;
|
26722
|
+
|
26723
|
+
bic=lut_bic(blz,0,&rv);
|
26724
|
+
if(rv<0)return rv;
|
26725
|
+
i=scl_idx(bic,&rv);
|
26726
|
+
if(rv<0)return rv;
|
26727
|
+
if(scl_flags)*scl_flags=scl_flags_array[i];
|
26728
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26729
|
+
if(scl_name)*scl_name=scl_name_array[i];
|
26730
|
+
return rv;
|
26731
|
+
}
|
26732
|
+
|
26733
|
+
/* Funktion lut_scl_sct_blz() +���3 */
|
26734
|
+
/* ###########################################################################
|
26735
|
+
* # Die Funktion bestimmt das Flag SCT (SEPA Credit Transfer) des SCL- #
|
26736
|
+
* # Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
|
26737
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26738
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26739
|
+
* # #
|
26740
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26741
|
+
* ###########################################################################
|
26742
|
+
*/
|
26743
|
+
DLL_EXPORT int lut_scl_sct_blz(char *blz,int *retval,const char **used_bic)
|
26744
|
+
{
|
26745
|
+
char *flags;
|
26746
|
+
const char *bic;
|
26747
|
+
int i,rv;
|
26748
|
+
|
26749
|
+
bic=lut_bic(blz,0,&rv);
|
26750
|
+
if(rv<0){
|
26751
|
+
if(retval)*retval=rv;
|
26752
|
+
return -1;
|
26753
|
+
}
|
26754
|
+
else
|
26755
|
+
if(retval)*retval=OK;
|
26756
|
+
i=scl_idx(bic,&rv);
|
26757
|
+
if(rv<0){
|
26758
|
+
if(retval)*retval=rv;
|
26759
|
+
return -1;
|
26760
|
+
}
|
26761
|
+
else
|
26762
|
+
if(retval)*retval=OK;
|
26763
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26764
|
+
flags=scl_flags_array[i];
|
26765
|
+
return flags[0]-'0';
|
26766
|
+
}
|
26767
|
+
|
26768
|
+
/* Funktion lut_scl_sdd_blz() +���3 */
|
26769
|
+
/* ###########################################################################
|
26770
|
+
* # Die Funktion bestimmt das Flag SDD (SEPA CORE Direct Debit (SEPA-Basis- #
|
26771
|
+
* # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
|
26772
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26773
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26774
|
+
* # #
|
26775
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26776
|
+
* ###########################################################################
|
26777
|
+
*/
|
26778
|
+
DLL_EXPORT int lut_scl_sdd_blz(char *blz,int *retval,const char **used_bic)
|
26779
|
+
{
|
26780
|
+
char *flags;
|
26781
|
+
const char *bic;
|
26782
|
+
int i,rv;
|
26783
|
+
|
26784
|
+
bic=lut_bic(blz,0,&rv);
|
26785
|
+
if(rv<0){
|
26786
|
+
if(retval)*retval=rv;
|
26787
|
+
return -1;
|
26788
|
+
}
|
26789
|
+
else
|
26790
|
+
if(retval)*retval=OK;
|
26791
|
+
i=scl_idx(bic,&rv);
|
26792
|
+
if(rv<0){
|
26793
|
+
if(retval)*retval=rv;
|
26794
|
+
return -1;
|
26795
|
+
}
|
26796
|
+
else
|
26797
|
+
if(retval)*retval=OK;
|
26798
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26799
|
+
flags=scl_flags_array[i];
|
26800
|
+
return flags[1]-'0';
|
26801
|
+
}
|
26802
|
+
|
26803
|
+
/* Funktion lut_scl_cor1_blz() +���3 */
|
26804
|
+
/* ###########################################################################
|
26805
|
+
* # Die Funktion bestimmt das Flag COR1 (SEPA COR1 Direct Debit (SEPA-Basis-#
|
26806
|
+
* # lastschrift mit verk�rzter Vorlagefrist) des SCL-Verzeichnisses und #
|
26807
|
+
* # gibt das Flag (0 bzw. 1) zur�ck. #
|
26808
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26809
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26810
|
+
* # #
|
26811
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26812
|
+
* ###########################################################################
|
26813
|
+
*/
|
26814
|
+
DLL_EXPORT int lut_scl_cor1_blz(char *blz,int *retval,const char **used_bic)
|
26815
|
+
{
|
26816
|
+
char *flags;
|
26817
|
+
const char *bic;
|
26818
|
+
int i,rv;
|
26819
|
+
|
26820
|
+
bic=lut_bic(blz,0,&rv);
|
26821
|
+
if(rv<0){
|
26822
|
+
if(retval)*retval=rv;
|
26823
|
+
return -1;
|
26824
|
+
}
|
26825
|
+
else
|
26826
|
+
if(retval)*retval=OK;
|
26827
|
+
i=scl_idx(bic,&rv);
|
26828
|
+
if(rv<0){
|
26829
|
+
if(retval)*retval=rv;
|
26830
|
+
return -1;
|
26831
|
+
}
|
26832
|
+
else
|
26833
|
+
if(retval)*retval=OK;
|
26834
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26835
|
+
flags=scl_flags_array[i];
|
26836
|
+
return flags[2]-'0';
|
26837
|
+
}
|
26838
|
+
|
26839
|
+
/* Funktion lut_scl_b2b_blz() +���3 */
|
26840
|
+
/* ###########################################################################
|
26841
|
+
* # Die Funktion bestimmt das Flag BCB (SEPA B2B Direct Debit (Sepa-Firmen- #
|
26842
|
+
* # lastschrift) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck.#
|
26843
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26844
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26845
|
+
* # #
|
26846
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26847
|
+
* ###########################################################################
|
26848
|
+
*/
|
26849
|
+
DLL_EXPORT int lut_scl_b2b_blz(char *blz,int *retval,const char **used_bic)
|
26850
|
+
{
|
26851
|
+
char *flags;
|
26852
|
+
const char *bic;
|
26853
|
+
int i,rv;
|
26854
|
+
|
26855
|
+
bic=lut_bic(blz,0,&rv);
|
26856
|
+
if(rv<0){
|
26857
|
+
if(retval)*retval=rv;
|
26858
|
+
return -1;
|
26859
|
+
}
|
26860
|
+
else
|
26861
|
+
if(retval)*retval=OK;
|
26862
|
+
i=scl_idx(bic,&rv);
|
26863
|
+
if(rv<0){
|
26864
|
+
if(retval)*retval=rv;
|
26865
|
+
return -1;
|
26866
|
+
}
|
26867
|
+
else
|
26868
|
+
if(retval)*retval=OK;
|
26869
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26870
|
+
flags=scl_flags_array[i];
|
26871
|
+
return flags[3]-'0';
|
26872
|
+
}
|
26873
|
+
|
26874
|
+
/* Funktion lut_scl_scc_blz() +���3 */
|
26875
|
+
/* ###########################################################################
|
26876
|
+
* # Die Funktion bestimmt das Flag SCC (SEPA Card Clearing, SCC Karten- #
|
26877
|
+
* # einz�ge) des SCL-Verzeichnisses und gibt das Flag (0 bzw. 1) zur�ck. #
|
26878
|
+
* # Im Fehlerfall wird -1 zur�ckgegeben und die Variable retval auf den #
|
26879
|
+
* # entsprechende Fehlercode (<0) gesetzt. #
|
26880
|
+
* # #
|
26881
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26882
|
+
* ###########################################################################
|
26883
|
+
*/
|
26884
|
+
DLL_EXPORT int lut_scl_scc_blz(char *blz,int *retval,const char **used_bic)
|
26885
|
+
{
|
26886
|
+
char *flags;
|
26887
|
+
const char *bic;
|
26888
|
+
int i,rv;
|
26889
|
+
|
26890
|
+
bic=lut_bic(blz,0,&rv);
|
26891
|
+
if(rv<0){
|
26892
|
+
if(retval)*retval=rv;
|
26893
|
+
return -1;
|
26894
|
+
}
|
26895
|
+
else
|
26896
|
+
if(retval)*retval=OK;
|
26897
|
+
i=scl_idx(bic,&rv);
|
26898
|
+
if(rv<0){
|
26899
|
+
if(retval)*retval=rv;
|
26900
|
+
return -1;
|
26901
|
+
}
|
26902
|
+
else
|
26903
|
+
if(retval)*retval=OK;
|
26904
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26905
|
+
flags=scl_flags_array[i];
|
26906
|
+
return flags[4]-'0';
|
26907
|
+
}
|
26908
|
+
|
26909
|
+
/* Funktion lut_scl_multi_blz_i() +���3 */
|
26910
|
+
/* ###########################################################################
|
26911
|
+
* # Diese Funktion entspricht der Funktion lut_scl_multi_blz(), nur wird #
|
26912
|
+
* # die BLZ als Integer-Wert statt als String �bergeben. #
|
26913
|
+
* # #
|
26914
|
+
* # Copyright (C) 2018 Michael Plugge <m.plugge@hs-mannheim.de> #
|
26915
|
+
* ###########################################################################
|
26916
|
+
*/
|
26917
|
+
DLL_EXPORT int lut_scl_multi_blz_i(int blz,const char **scl_flags,const char **used_bic,const char **scl_name)
|
26918
|
+
{
|
26919
|
+
const char *bic;
|
26920
|
+
int i,rv;
|
26921
|
+
|
26922
|
+
bic=lut_bic_i(blz,0,&rv);
|
26923
|
+
if(rv<0)return rv;
|
26924
|
+
i=scl_idx(bic,&rv);
|
26925
|
+
if(rv<0)return rv;
|
26926
|
+
if(scl_flags)*scl_flags=scl_flags_array[i];
|
26927
|
+
if(used_bic)*used_bic=scl_bic_array[i];
|
26928
|
+
if(scl_name)*scl_name=scl_name_array[i];
|
26929
|
+
return rv;
|
26930
|
+
}
|
26421
26931
|
|
26422
26932
|
#else /* !INCLUDE_KONTO_CHECK_DE */
|
26423
26933
|
/* Leerdefinitionen f�r !INCLUDE_KONTO_CHECK_DE +���1 */
|
@@ -26469,6 +26979,7 @@ XI lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)EXC
|
|
26469
26979
|
XI lut_info_b(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)EXCLUDED
|
26470
26980
|
XI lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int *valid2)EXCLUDED
|
26471
26981
|
XI lut_valid(void)EXCLUDED
|
26982
|
+
XI lut_valid_date(char *lut_name,int *v11,int *v12,int *v21,int *v22)EXCLUDED
|
26472
26983
|
XI lut_multiple(char *b,int *cnt,int **p_blz,char ***p_name,char ***p_name_kurz,int **p_plz,char ***p_ort,
|
26473
26984
|
int **p_pan,char ***p_bic,int *p_pz,int **p_nr,char **p_aenderung,char **p_loeschung,int **p_nachfolge_blz,
|
26474
26985
|
int *id,int *cnt_all,int **start_idx)EXCLUDED
|
@@ -26603,4 +27114,20 @@ XI lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int set)EXCLUDED
|
|
26603
27114
|
XI pz_aenderungen_enable(int set)EXCLUDED
|
26604
27115
|
XC kc_id2ptr(int handle,int *retval)EXCLUDED_S
|
26605
27116
|
XI kc_id_free(int handle)EXCLUDED
|
27117
|
+
XI lut_scl_init(char *lut_name)EXCLUDED
|
27118
|
+
XI lut_scl_info(char *lutfile,int *cnt,const char **gueltigkeit,const char **gueltigkeit_iso)EXCLUDED_V
|
27119
|
+
XI lut_write_scl_blocks(char *inputfile,char *lutfile)EXCLUDED
|
27120
|
+
XI lut_scl_multi(char *bic,const char **used_bic,const char **scl_name,const char **scl_flags)EXCLUDED
|
27121
|
+
XI lut_scl_multi_blz(char *blz,const char **used_bic,const char **scl_name,const char **scl_flags)EXCLUDED
|
27122
|
+
XI lut_scl_multi_blz_i(int blz,const char **used_bic,const char **scl_name,const char **scl_flags)EXCLUDED
|
27123
|
+
XI lut_scl_sct(char *bic)EXCLUDED
|
27124
|
+
XI lut_scl_sdd(char *bic)EXCLUDED
|
27125
|
+
XI lut_scl_cor1(char *bic)EXCLUDED
|
27126
|
+
XI lut_scl_b2b(char *bic)EXCLUDED
|
27127
|
+
XI lut_scl_scc(char *bic)EXCLUDED
|
27128
|
+
XI lut_scl_sct_blz(char *blz)EXCLUDED
|
27129
|
+
XI lut_scl_sdd_blz(char *blz)EXCLUDED
|
27130
|
+
XI lut_scl_cor1_blz(char *blz)EXCLUDED
|
27131
|
+
XI lut_scl_b2b_blz(char *blz)EXCLUDED
|
27132
|
+
XI lut_scl_scc_blz(char *blz)EXCLUDED
|
26606
27133
|
#endif
|