konto_check 6.08.0 → 6.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/konto_check_raw/konto_check.c +126 -106
- data/ext/konto_check_raw/konto_check.h +17 -13
- data/ext/konto_check_raw/konto_check_raw_ruby.c +528 -2
- data/lib/konto_check.rb +216 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
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 "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
|
@@ -249,7 +248,6 @@ static int convert_encoding(char **data,UINT4 *len);
|
|
249
248
|
#define free(ptr) efree(ptr)
|
250
249
|
#endif
|
251
250
|
|
252
|
-
#line 777 "konto_check.lxx"
|
253
251
|
|
254
252
|
/* Testwert zur Markierung ung�ltiger Ziffern im BLZ-String (>8 Stellen) */
|
255
253
|
#define BLZ_FEHLER 100000000
|
@@ -385,7 +383,6 @@ static int convert_encoding(char **data,UINT4 *len);
|
|
385
383
|
*/
|
386
384
|
#define CHECK_RETVAL(fkt) do{if((retval=fkt)!=OK)goto fini;}while(0) /* es mu� noch aufger�umt werden, daher goto */
|
387
385
|
#define CHECK_RETURN(fkt) do{if((retval=fkt)!=OK)return retval;}while(0)
|
388
|
-
#line 918 "konto_check.lxx"
|
389
386
|
|
390
387
|
/* einige Makros zur Umwandlung zwischen unsigned int und char */
|
391
388
|
#define UCP (unsigned char*)
|
@@ -505,7 +502,6 @@ int pz=-777;
|
|
505
502
|
|
506
503
|
#define E_START(x)
|
507
504
|
#define E_END(x)
|
508
|
-
#line 1043 "konto_check.lxx"
|
509
505
|
|
510
506
|
/* Variable f�r die Methoden 27, 29 und 69 */
|
511
507
|
static const int m10h_digits[4][10]={
|
@@ -954,7 +950,6 @@ static int create_lutfile_int(char *name, char *prolog, int slots,FILE **lut)
|
|
954
950
|
* ###########################################################################
|
955
951
|
*/
|
956
952
|
|
957
|
-
#line 1492 "konto_check.lxx"
|
958
953
|
DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
|
959
954
|
{
|
960
955
|
char buffer[SLOT_BUFFER],*ptr;
|
@@ -992,7 +987,6 @@ DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
|
|
992
987
|
* #############################################################################
|
993
988
|
*/
|
994
989
|
|
995
|
-
#line 1530 "konto_check.lxx"
|
996
990
|
static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
|
997
991
|
{
|
998
992
|
char buffer[SLOT_BUFFER],*ptr,*cptr;
|
@@ -1128,7 +1122,6 @@ static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
|
|
1128
1122
|
* ###########################################################################
|
1129
1123
|
*/
|
1130
1124
|
|
1131
|
-
#line 1666 "konto_check.lxx"
|
1132
1125
|
DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **data)
|
1133
1126
|
{
|
1134
1127
|
int retval;
|
@@ -1151,7 +1144,6 @@ DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **da
|
|
1151
1144
|
* ###########################################################################
|
1152
1145
|
*/
|
1153
1146
|
|
1154
|
-
#line 1690 "konto_check.lxx"
|
1155
1147
|
DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
|
1156
1148
|
{
|
1157
1149
|
int retval;
|
@@ -1173,7 +1165,6 @@ DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
|
|
1173
1165
|
* ###########################################################################
|
1174
1166
|
*/
|
1175
1167
|
|
1176
|
-
#line 1713 "konto_check.lxx"
|
1177
1168
|
static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **data)
|
1178
1169
|
{
|
1179
1170
|
char buffer[SLOT_BUFFER],*ptr,*sbuffer,*dbuffer;
|
@@ -1263,7 +1254,6 @@ static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **
|
|
1263
1254
|
FREE(sbuffer);
|
1264
1255
|
RETURN(ERROR_MALLOC);
|
1265
1256
|
}
|
1266
|
-
#line 1818 "konto_check.lxx"
|
1267
1257
|
|
1268
1258
|
if(fread(sbuffer,1,compressed_len,lut)<compressed_len){
|
1269
1259
|
FREE(sbuffer);
|
@@ -2742,6 +2732,38 @@ DLL_EXPORT int lut_valid(void)
|
|
2742
2732
|
RETURN(LUT2_NO_LONGER_VALID);
|
2743
2733
|
}
|
2744
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
|
+
|
2745
2767
|
|
2746
2768
|
/* Funktion lut_info_b() +���1 */
|
2747
2769
|
/* ###########################################################################
|
@@ -2856,7 +2878,6 @@ DLL_EXPORT int lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int
|
|
2856
2878
|
* ###########################################################################
|
2857
2879
|
*/
|
2858
2880
|
|
2859
|
-
#line 3411 "konto_check.lxx"
|
2860
2881
|
DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)
|
2861
2882
|
{
|
2862
2883
|
char *ptr,*ptr1,buffer[128];
|
@@ -2944,7 +2965,6 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
|
|
2944
2965
|
|
2945
2966
|
/* Infoblocks lesen: 1. Infoblock */
|
2946
2967
|
if((ret=read_lut_block_int(in,0,LUT2_INFO,&cnt,&ptr))==OK){
|
2947
|
-
#line 3500 "konto_check.lxx"
|
2948
2968
|
*(ptr+cnt)=0;
|
2949
2969
|
if(valid1){
|
2950
2970
|
for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
|
@@ -2992,7 +3012,6 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
|
|
2992
3012
|
|
2993
3013
|
/* Infoblocks lesen: 2. Infoblock */
|
2994
3014
|
if((ret=read_lut_block_int(in,0,LUT2_2_INFO,&cnt,&ptr))==OK){
|
2995
|
-
#line 3549 "konto_check.lxx"
|
2996
3015
|
*(ptr+cnt)=0;
|
2997
3016
|
if(valid2){
|
2998
3017
|
for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
|
@@ -3211,7 +3230,6 @@ DLL_EXPORT int copy_lutfile(char *old_name,char *new_name,int new_slots)
|
|
3211
3230
|
qsort(slotdir,slot_cnt,sizeof(int),cmp_int);
|
3212
3231
|
for(last_slot=-1,i=0;i<(int)slot_cnt;i++)if((typ=slotdir[i]) && typ!=(UINT4)last_slot){
|
3213
3232
|
read_lut_block_int(lut1,0,typ,&len,&data);
|
3214
|
-
#line 3769 "konto_check.lxx"
|
3215
3233
|
write_lut_block_int(lut2,typ,len,data);
|
3216
3234
|
FREE(data);
|
3217
3235
|
last_slot=typ;
|
@@ -3441,7 +3459,6 @@ DLL_EXPORT int lut_init(char *lut_name,int required,int set)
|
|
3441
3459
|
* # Copyright (C) 2008 Michael Plugge <m.plugge@hs-mannheim.de> #
|
3442
3460
|
* ###########################################################################
|
3443
3461
|
*/
|
3444
|
-
#line 3999 "konto_check.lxx"
|
3445
3462
|
DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,int incremental)
|
3446
3463
|
{
|
3447
3464
|
char *ptr,*dptr,*data,*eptr,*prolog,*info,*user_info,*hs=NULL,*info1,*info2,*ci=NULL,name_buffer[LUT_PATH_LEN];
|
@@ -3669,7 +3686,6 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
|
|
3669
3686
|
typ1=typ;
|
3670
3687
|
if(lut2_block_status[typ]==OK)continue; /* jeden Block nur einmal einlesen */
|
3671
3688
|
retval=read_lut_block_int(lut,0,typ,&len,&data);
|
3672
|
-
#line 4228 "konto_check.lxx"
|
3673
3689
|
|
3674
3690
|
switch(retval){
|
3675
3691
|
case LUT_CRC_ERROR:
|
@@ -3757,7 +3773,6 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
|
|
3757
3773
|
if(typ==LUT2_2_NAME || typ==LUT2_2_NAME_KURZ){
|
3758
3774
|
FREE(data);
|
3759
3775
|
i=read_lut_block_int(lut,0,LUT2_2_NAME_NAME_KURZ,&len,&data);
|
3760
|
-
#line 4320 "konto_check.lxx"
|
3761
3776
|
if(i==OK){ /* was gefunden; Typ �ndern, dann weiter wie bei OK */
|
3762
3777
|
typ=LUT2_2_NAME_NAME_KURZ;
|
3763
3778
|
typ1=LUT2_NAME_NAME_KURZ;
|
@@ -4363,7 +4378,6 @@ DLL_EXPORT int lut_blocks_id(int mode,int *lut_filename,int *lut_blocks_ok,int *
|
|
4363
4378
|
* ###########################################################################
|
4364
4379
|
*/
|
4365
4380
|
|
4366
|
-
#line 4926 "konto_check.lxx"
|
4367
4381
|
DLL_EXPORT const char *current_lutfile_name(int *set,int *level,int *retval)
|
4368
4382
|
{
|
4369
4383
|
if(init_status<7 || !current_lutfile){
|
@@ -5118,7 +5132,6 @@ static int iban_init(void)
|
|
5118
5132
|
* ###########################################################################
|
5119
5133
|
*/
|
5120
5134
|
|
5121
|
-
#line 5681 "konto_check.lxx"
|
5122
5135
|
static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_version,RETVAL *retvals)
|
5123
5136
|
{
|
5124
5137
|
char tmp_buffer[16];
|
@@ -5961,9 +5974,9 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
5961
5974
|
return OK_BLZ_REPLACED;
|
5962
5975
|
|
5963
5976
|
|
5964
|
-
/* Iban-Regel 0020.
|
5977
|
+
/* Iban-Regel 0020.02 +���3 */
|
5965
5978
|
/* Deutsche Bank AG
|
5966
|
-
* Neuimplementierung nach der Regel-Version 1.
|
5979
|
+
* Neuimplementierung nach der Regel-Version 1.51 der Deutschen Bank vom 19.9.2013
|
5967
5980
|
*/
|
5968
5981
|
case 20:
|
5969
5982
|
|
@@ -8058,21 +8071,29 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
8058
8071
|
*bicp="VONEDE33XXX";
|
8059
8072
|
return OK_BLZ_REPLACED;
|
8060
8073
|
|
8061
|
-
/* Iban-Regel 0049.
|
8062
|
-
/*
|
8074
|
+
/* Iban-Regel 0049.01 +���3 */
|
8075
|
+
/* DZ Bank */
|
8063
8076
|
case 49:
|
8064
8077
|
|
8065
|
-
/*
|
8066
|
-
|
8067
|
-
|
8068
|
-
|
8069
|
-
|
8070
|
-
|
8071
|
-
|
8072
|
-
|
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
|
+
*/
|
8073
8091
|
|
8074
|
-
/*
|
8075
|
-
*
|
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.
|
8076
8097
|
* aufgef�llter Nullen) m�ssen ans Ende gestellt werden, so dass die Kontonummer dann
|
8077
8098
|
* immer mit der '9' anf�ngt.
|
8078
8099
|
*
|
@@ -8279,7 +8300,6 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
|
|
8279
8300
|
}
|
8280
8301
|
}
|
8281
8302
|
|
8282
|
-
#line 8842 "konto_check.lxx"
|
8283
8303
|
/* Funktion lut_multiple() +���2 */
|
8284
8304
|
/* ###########################################################################
|
8285
8305
|
* # lut_multiple(): Universalfunktion, um zu einer gegebenen Bankleitzahl #
|
@@ -8547,7 +8567,6 @@ DLL_EXPORT int lut_cleanup(void)
|
|
8547
8567
|
FREE(sort_pz_f);
|
8548
8568
|
FREE(sort_plz);
|
8549
8569
|
FREE(sort_iban_regel);
|
8550
|
-
#line 9104 "konto_check.lxx"
|
8551
8570
|
if(name_raw && name_data!=name_raw)
|
8552
8571
|
FREE(name_raw);
|
8553
8572
|
else
|
@@ -8624,7 +8643,6 @@ DLL_EXPORT int lut_cleanup(void)
|
|
8624
8643
|
lut_cleanup(); /* neuer Versuch, aufzur�umen */
|
8625
8644
|
RETURN(INIT_FATAL_ERROR);
|
8626
8645
|
}
|
8627
|
-
#line 9186 "konto_check.lxx"
|
8628
8646
|
init_status&=1;
|
8629
8647
|
init_in_progress=0;
|
8630
8648
|
return OK;
|
@@ -8797,8 +8815,8 @@ static void init_atoi_table(void)
|
|
8797
8815
|
int i,ziffer;
|
8798
8816
|
unsigned long l;
|
8799
8817
|
|
8800
|
-
/* �nderungen zum
|
8801
|
-
if(time(NULL)>
|
8818
|
+
/* �nderungen zum 09.12.2019 aktivieren */
|
8819
|
+
if(time(NULL)>1575846000 ||0)pz_aenderungen_aktivieren_2019_12=1;
|
8802
8820
|
|
8803
8821
|
/* ung�ltige Ziffern; Blanks und Tabs werden ebenfalls als ung�ltig
|
8804
8822
|
* angesehen(!), da die Stellenzuordnung sonst nicht mehr stimmt. Ausnahme:
|
@@ -9091,7 +9109,6 @@ static void init_atoi_table(void)
|
|
9091
9109
|
lut_block_name2[130]="2. SCL Banknamen";
|
9092
9110
|
lut_block_name2[131]="2. SCL Flags";
|
9093
9111
|
lut_blocklen_max=521;
|
9094
|
-
#line 9426 "konto_check.lxx"
|
9095
9112
|
init_status|=1;
|
9096
9113
|
}
|
9097
9114
|
|
@@ -9151,7 +9168,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
9151
9168
|
|
9152
9169
|
switch(pz_methode){
|
9153
9170
|
|
9154
|
-
#line 9489 "konto_check.lxx"
|
9155
9171
|
/* Berechnungsmethoden 00 bis 09 +���3
|
9156
9172
|
Berechnung nach der Methode 00 +���4 */
|
9157
9173
|
/*
|
@@ -10988,6 +11004,10 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
10988
11004
|
* # Stellennr.: 1 2 3 4 5 6 7 8 9 10 #
|
10989
11005
|
* # Kontonr.: x x x x x x x x x P #
|
10990
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. #
|
10991
11011
|
* ######################################################################
|
10992
11012
|
*/
|
10993
11013
|
case 44:
|
@@ -11486,7 +11506,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
11486
11506
|
* ######################################################################
|
11487
11507
|
*/
|
11488
11508
|
|
11489
|
-
#line 11500 "konto_check.lxx"
|
11490
11509
|
case 51:
|
11491
11510
|
if(*(kto+2)=='9'){ /* Ausnahme */
|
11492
11511
|
|
@@ -11748,8 +11767,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
11748
11767
|
else
|
11749
11768
|
return FALSE;
|
11750
11769
|
|
11751
|
-
#line 11714 "konto_check.lxx"
|
11752
|
-
#line 11716 "konto_check.lxx"
|
11753
11770
|
/* Berechnung nach der Methode 53 +���4 */
|
11754
11771
|
/*
|
11755
11772
|
* ######################################################################
|
@@ -12048,7 +12065,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
12048
12065
|
* # bewerten. #
|
12049
12066
|
* ######################################################################
|
12050
12067
|
*/
|
12051
|
-
#line 11985 "konto_check.lxx"
|
12052
12068
|
case 57:
|
12053
12069
|
#if DEBUG>0
|
12054
12070
|
if(retvals){
|
@@ -12694,7 +12710,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
12694
12710
|
* # Pr�fzifferberechnung) #
|
12695
12711
|
* ######################################################################
|
12696
12712
|
*/
|
12697
|
-
#line 12565 "konto_check.lxx"
|
12698
12713
|
case 66:
|
12699
12714
|
#if DEBUG>0
|
12700
12715
|
case 2066:
|
@@ -20103,7 +20118,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
|
|
20103
20118
|
return NOT_IMPLEMENTED;
|
20104
20119
|
}
|
20105
20120
|
}
|
20106
|
-
#line 18777 "konto_check.lxx"
|
20107
20121
|
|
20108
20122
|
/*
|
20109
20123
|
* ######################################################################
|
@@ -20201,7 +20215,6 @@ DLL_EXPORT int kto_check_blz(char *blz,char *kto)
|
|
20201
20215
|
#if DEBUG>0 /* es werden einige Funktionen benutzt, die nur in der Debug-Variante enthalten sind */
|
20202
20216
|
DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,const char **bic,int *regel,RETVAL *retvals)
|
20203
20217
|
{
|
20204
|
-
#line 18875 "konto_check.lxx"
|
20205
20218
|
char *blz_o,buffer[32],kto_o[16],*blz_n,*kto_n,*ptr,*dptr;
|
20206
20219
|
const char *bicp;
|
20207
20220
|
int ret,ret_regel,r,i;
|
@@ -20250,7 +20263,6 @@ DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,con
|
|
20250
20263
|
}
|
20251
20264
|
else /* BLZ und Kto gleich */
|
20252
20265
|
return ret;
|
20253
|
-
#line 18924 "konto_check.lxx"
|
20254
20266
|
}
|
20255
20267
|
|
20256
20268
|
#else /* !DEBUG */
|
@@ -20401,7 +20413,6 @@ DLL_EXPORT int kto_check_blz_dbg(char *blz,char *kto,RETVAL *retvals)
|
|
20401
20413
|
* # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
|
20402
20414
|
* ###########################################################################
|
20403
20415
|
*/
|
20404
|
-
#line 19075 "konto_check.lxx"
|
20405
20416
|
DLL_EXPORT int kto_check_pz_dbg(char *pz,char *kto,char *blz,RETVAL *retvals)
|
20406
20417
|
{
|
20407
20418
|
int untermethode,pz_methode;
|
@@ -20637,7 +20648,6 @@ DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char *
|
|
20637
20648
|
}
|
20638
20649
|
else
|
20639
20650
|
**user_info_p=0;
|
20640
|
-
#line 19296 "konto_check.lxx"
|
20641
20651
|
FREE(prolog);
|
20642
20652
|
return OK;
|
20643
20653
|
}
|
@@ -20772,20 +20782,20 @@ DLL_EXPORT const char *get_kto_check_version_x(int mode)
|
|
20772
20782
|
case 3:
|
20773
20783
|
return __DATE__ ", " __TIME__; /* Compilierdatum und -zeit */
|
20774
20784
|
case 4: /* Datum der Pr�fziffermethode */
|
20775
|
-
if(
|
20776
|
-
return "
|
20785
|
+
if(pz_aenderungen_aktivieren_2019_12)
|
20786
|
+
return "09.12.2019";
|
20777
20787
|
else
|
20778
|
-
return "
|
20788
|
+
return "09.09.2019 (Aenderungen vom 09.12.2019 enthalten aber noch nicht aktiviert)";
|
20779
20789
|
case 5:
|
20780
|
-
return "
|
20790
|
+
return "09.09.2019";
|
20781
20791
|
case 6:
|
20782
|
-
return "
|
20792
|
+
return "16. Dezember 2020"; /* Klartext-Datum der Bibliotheksversion */
|
20783
20793
|
case 7:
|
20784
20794
|
return "final"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
|
20785
20795
|
case 8:
|
20786
20796
|
return "6"; /* Hauptversionszahl */
|
20787
20797
|
case 9:
|
20788
|
-
return "
|
20798
|
+
return "13"; /* Unterversionszahl */
|
20789
20799
|
}
|
20790
20800
|
}
|
20791
20801
|
|
@@ -20931,7 +20941,6 @@ DLL_EXPORT int dump_lutfile(char *outputname,UINT4 *required)
|
|
20931
20941
|
default:
|
20932
20942
|
break;
|
20933
20943
|
}
|
20934
|
-
#line 19529 "konto_check.lxx"
|
20935
20944
|
fputc('\n',out);
|
20936
20945
|
while(--i)fputc('=',out);
|
20937
20946
|
fputc('\n',out);
|
@@ -21256,7 +21265,6 @@ DLL_EXPORT const char *iban2bic_id(char *iban,int *retval,int *blz,int *kto)
|
|
21256
21265
|
return iban2bic(iban,retval,b,k);
|
21257
21266
|
}
|
21258
21267
|
|
21259
|
-
#line 19854 "konto_check.lxx"
|
21260
21268
|
/* Funktion iban_gen(), iban_bic_gen() und iban_bic_gen1 +���1 */
|
21261
21269
|
/* ###########################################################################
|
21262
21270
|
* # Die Funktion iban_gen generiert aus Bankleitzahl und Kontonummer eine #
|
@@ -22089,7 +22097,6 @@ DLL_EXPORT int ipi_check(char *zweck)
|
|
22089
22097
|
* # Copyright (C) 2009,2011 Michael Plugge <m.plugge@hs-mannheim.de> #
|
22090
22098
|
* ###########################################################################
|
22091
22099
|
*/
|
22092
|
-
#line 20687 "konto_check.lxx"
|
22093
22100
|
|
22094
22101
|
/* Funktion volltext_zeichen() +���2 */
|
22095
22102
|
/* Diese Funktion gibt f�r Zeichen die bei der Volltextsuche g�ltig sind
|
@@ -22936,7 +22943,6 @@ static int qcmp_bic_h(const void *ap,const void *bp)
|
|
22936
22943
|
return a-b;
|
22937
22944
|
}
|
22938
22945
|
|
22939
|
-
#line 21534 "konto_check.lxx"
|
22940
22946
|
|
22941
22947
|
/* Funktion qcmp_bic() +���3 */
|
22942
22948
|
static int qcmp_bic(const void *ap,const void *bp)
|
@@ -23041,7 +23047,6 @@ static int qcmp_iban_regel(const void *ap,const void *bp)
|
|
23041
23047
|
else
|
23042
23048
|
return a-b;
|
23043
23049
|
}
|
23044
|
-
#line 21549 "konto_check.lxx"
|
23045
23050
|
|
23046
23051
|
/* Funktion init_blzf() +���2
|
23047
23052
|
* Diese Funktion initialisiert das Array mit den Bankleitzahlen f�r alle
|
@@ -23109,7 +23114,6 @@ DLL_EXPORT int konto_check_idx2blz(int idx,int *zweigstelle,int *retval)
|
|
23109
23114
|
}
|
23110
23115
|
|
23111
23116
|
/* Funktion suche_int1() +���2 */
|
23112
|
-
#line 21617 "konto_check.lxx"
|
23113
23117
|
static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
|
23114
23118
|
int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int cnt,int such_idx)
|
23115
23119
|
{
|
@@ -23160,7 +23164,6 @@ static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstell
|
|
23160
23164
|
}
|
23161
23165
|
|
23162
23166
|
/* Funktion suche_int2() +���2 */
|
23163
|
-
#line 21668 "konto_check.lxx"
|
23164
23167
|
static int suche_int2(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
|
23165
23168
|
int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int such_idx,int pz_suche)
|
23166
23169
|
{
|
@@ -23775,7 +23778,6 @@ static int cmp_suche_sort(const void *ap,const void *bp)
|
|
23775
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)
|
23776
23779
|
{
|
23777
23780
|
int i,j,last_idx,*idx_a,*cnt_o;
|
23778
|
-
#line 22284 "konto_check.lxx"
|
23779
23781
|
|
23780
23782
|
if(idx_op)*idx_op=NULL;
|
23781
23783
|
if(cnt_op)*cnt_op=NULL;
|
@@ -23857,7 +23859,6 @@ DLL_EXPORT int lut_suche_sort2(int anzahl,int *blz,int *zweigstellen,int *anzahl
|
|
23857
23859
|
return OK;
|
23858
23860
|
}
|
23859
23861
|
|
23860
|
-
#line 22367 "konto_check.lxx"
|
23861
23862
|
/* Funktion lut_suche_volltext() +���2 */
|
23862
23863
|
DLL_EXPORT int lut_suche_volltext(char *such_wort,int *anzahl,int *base_name_idx,char ***base_name,
|
23863
23864
|
int *zweigstellen_anzahl,int **start_idx,int **zweigstellen_base,int **blz_base)
|
@@ -23987,7 +23988,6 @@ DLL_EXPORT int lut_suche_blz(int such1,int such2,int *anzahl,int **start_idx,int
|
|
23987
23988
|
return suche_int1(such1,such2,anzahl,start_idx,zweigstellen_base,blz_base,&blz_f,&sort_blz,qcmp_blz,cnt,0);
|
23988
23989
|
}
|
23989
23990
|
|
23990
|
-
#line 22517 "konto_check.lxx"
|
23991
23991
|
/* Funktion lut_suche_bic() +���2 */
|
23992
23992
|
DLL_EXPORT int lut_suche_bic(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
|
23993
23993
|
char ***base_name,int **blz_base)
|
@@ -24078,7 +24078,6 @@ DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,i
|
|
24078
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);
|
24079
24079
|
}
|
24080
24080
|
|
24081
|
-
#line 22550 "konto_check.lxx"
|
24082
24081
|
|
24083
24082
|
/* Funktion lut_suche_bic_h() +���2 */
|
24084
24083
|
DLL_EXPORT int lut_suche_bic_h(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
|
@@ -24464,7 +24463,6 @@ DLL_EXPORT const char *iban_ort(char *iban,int filiale,int*retval)
|
|
24464
24463
|
{
|
24465
24464
|
return iban_fkt_s(iban,filiale,retval,lut_ort);
|
24466
24465
|
}
|
24467
|
-
#line 22639 "konto_check.lxx"
|
24468
24466
|
|
24469
24467
|
static int bic_fkt_c(char *bic1,int mode,int filiale,int *retval,char *base,int error)
|
24470
24468
|
{
|
@@ -25753,7 +25751,6 @@ DLL_EXPORT const char *pz2str(int pz,int *ret)
|
|
25753
25751
|
default: return "???";
|
25754
25752
|
}
|
25755
25753
|
}
|
25756
|
-
#line 23594 "konto_check.lxx"
|
25757
25754
|
|
25758
25755
|
/* Funktion lut_keine_iban_berechnung() +���1 */
|
25759
25756
|
/*
|
@@ -25868,7 +25865,7 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
|
|
25868
25865
|
/* Funktion pz_aenderungen_enable() +���1 */
|
25869
25866
|
/* ###########################################################################
|
25870
25867
|
* # Die Funktion pz_aenderungen_enable() dient dazu, den Status des Flags #
|
25871
|
-
* #
|
25868
|
+
* # pz_aenderungen_aktivieren_2019_12 abzufragen bzw. zu setzen. Falls die Variable #
|
25872
25869
|
* # set 1 ist, werden die �nderungen aktiviert, falls sie 0 ist, werden #
|
25873
25870
|
* # die �nderungen deaktiviert. Bei allen anderen Werten wird das aktuelle #
|
25874
25871
|
* # Flag nicht ver�ndert, sondern nur der Status zur�ckgegeben. #
|
@@ -25884,8 +25881,8 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
|
|
25884
25881
|
|
25885
25882
|
DLL_EXPORT int pz_aenderungen_enable(int set)
|
25886
25883
|
{
|
25887
|
-
if(set==0 || set==1)
|
25888
|
-
return
|
25884
|
+
if(set==0 || set==1)pz_aenderungen_aktivieren_2019_12=set;
|
25885
|
+
return pz_aenderungen_aktivieren_2019_12;
|
25889
25886
|
}
|
25890
25887
|
|
25891
25888
|
#if DEBUG>0
|
@@ -25917,7 +25914,6 @@ DLL_EXPORT char *kto_check_test_vars(char *txt,UINT4 i)
|
|
25917
25914
|
#endif
|
25918
25915
|
|
25919
25916
|
|
25920
|
-
#line 23758 "konto_check.lxx"
|
25921
25917
|
/* Funktionen *_id() +���1 */
|
25922
25918
|
/* ###########################################################################
|
25923
25919
|
* # Die folgenden Funktionen sind die id-Varianten von Funktionen, die #
|
@@ -26241,38 +26237,62 @@ static int scl_idx(const char *bic,int *retval)
|
|
26241
26237
|
strcpy(such_bic,bic);
|
26242
26238
|
for(i=0;i<11 && such_bic[i];i++)such_bic[i]=toupper(such_bic[i]);
|
26243
26239
|
|
26244
|
-
|
26245
|
-
|
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);
|
26246
26277
|
if(idx>=0){
|
26247
26278
|
if(retval)*retval=OK;
|
26248
26279
|
return idx;
|
26249
26280
|
}
|
26281
|
+
else if(such_bic[8]==0){
|
26282
|
+
if(retval)*retval=SCL_BIC_NOT_FOUND;
|
26283
|
+
return -1;
|
26284
|
+
}
|
26250
26285
|
else{
|
26251
|
-
|
26252
|
-
|
26253
|
-
|
26254
|
-
|
26255
|
-
if(
|
26256
|
-
|
26257
|
-
return idx;
|
26258
|
-
}
|
26259
|
-
else{
|
26260
|
-
if(retval)*retval=SCL_BIC_NOT_FOUND;
|
26261
|
-
return -1;
|
26262
|
-
}
|
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;
|
26263
26292
|
}
|
26264
26293
|
else{
|
26265
|
-
|
26266
|
-
|
26267
|
-
idx=bic_binsearch(0,scl_cnt,such_bic);
|
26268
|
-
if(idx>=0){
|
26269
|
-
if(retval)*retval=OK_SCL_WILDCARD_BIC_USED;
|
26270
|
-
return idx;
|
26271
|
-
}
|
26272
|
-
else{
|
26273
|
-
if(retval)*retval=SCL_BIC_NOT_FOUND;
|
26274
|
-
return -1;
|
26275
|
-
}
|
26294
|
+
if(retval)*retval=SCL_BIC_NOT_FOUND;
|
26295
|
+
return -1;
|
26276
26296
|
}
|
26277
26297
|
}
|
26278
26298
|
}
|
@@ -26381,7 +26401,7 @@ DLL_EXPORT int lut_write_scl_blocks(char *inputfile,char *lutfile)
|
|
26381
26401
|
if(!(lut=fopen(lutfile,"rb+")))RETURN(FILE_WRITE_ERROR);
|
26382
26402
|
|
26383
26403
|
/* zun�chst mal testen ob es auch eine LUT2 Datei ist */
|
26384
|
-
if(!(ptr=fgets(buffer,
|
26404
|
+
if(!(ptr=fgets(buffer,512,lut)))RETURN(FILE_READ_ERROR);
|
26385
26405
|
while(*ptr && *ptr!='\n')ptr++;
|
26386
26406
|
*--ptr=0;
|
26387
26407
|
if(!strcmp(buffer,"BLZ Lookup Table/Format 1."))RETURN(LUT1_FILE_USED); /* alte LUT-Datei */
|
@@ -26426,7 +26446,6 @@ DLL_EXPORT int lut_write_scl_blocks(char *inputfile,char *lutfile)
|
|
26426
26446
|
RETURN(OK);
|
26427
26447
|
}
|
26428
26448
|
|
26429
|
-
#line 24267 "konto_check.lxx"
|
26430
26449
|
/* Funktion lut_scl_init() +���3 */
|
26431
26450
|
/* ###########################################################################
|
26432
26451
|
* # Die Funktion lut_scl_init() liest die SCL-Blocks aus einer LUT-Datei #
|
@@ -26960,6 +26979,7 @@ XI lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)EXC
|
|
26960
26979
|
XI lut_info_b(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)EXCLUDED
|
26961
26980
|
XI lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int *valid2)EXCLUDED
|
26962
26981
|
XI lut_valid(void)EXCLUDED
|
26982
|
+
XI lut_valid_date(char *lut_name,int *v11,int *v12,int *v21,int *v22)EXCLUDED
|
26963
26983
|
XI lut_multiple(char *b,int *cnt,int **p_blz,char ***p_name,char ***p_name_kurz,int **p_plz,char ***p_ort,
|
26964
26984
|
int **p_pan,char ***p_bic,int *p_pz,int **p_nr,char **p_aenderung,char **p_loeschung,int **p_nachfolge_blz,
|
26965
26985
|
int *id,int *cnt_all,int **start_idx)EXCLUDED
|