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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e67c089cb69098527f09a67d389e77a22f85125f1fce9420a33996c97eae5338
4
- data.tar.gz: 63e38e1fccc8b3cc79073298d57b4e89eb992896c10634b8cb8529ff36d192a7
3
+ metadata.gz: aa869ca84203c2f9c627a8ed8c9c2fd6da6d8a1c8cb6450ad8954fffb9ca89b3
4
+ data.tar.gz: b35b73763d3f4234753263a757151a6e0de9332b6305c4bad39fe7cb18e9a1ba
5
5
  SHA512:
6
- metadata.gz: c4834fb2d2ae0d8f47d1af2b146d5a35d2a8e69c97931df11ad3431117d93bb22e973f3f07806af450c65e69469dd2ac6056828135f7cba432522de2f47ae73e
7
- data.tar.gz: 7d3d13c5041d1651a9c898630fbd9b51892afb5ec5bcf653b35eb53565bcf34321cfcf77b852c9567d31858eac285ebae850cd9147caa744d106c91e1486c034
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-2019 Michael Plugge <m.plugge@hs-mannheim.de> #
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.08 (final)"
51
+ #define VERSION "6.13 (final)"
53
52
  #define VERSION_MAJOR 6
54
- #define VERSION_MINOR 08
53
+ #define VERSION_MINOR 13
55
54
  #endif
56
- #define VERSION_DATE "2019-03-19"
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 2018 zu aktivieren */
108
- static int pz_aenderungen_aktivieren_2018_12;
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.01 +���3 */
5977
+ /* Iban-Regel 0020.02 +���3 */
5965
5978
  /* Deutsche Bank AG
5966
- * Neuimplementierung nach der Regel-Version 1.5 der Deutschen Bank vom 30.8.2013
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.00 +���3 */
8062
- /* WGZ Bank */
8074
+ /* Iban-Regel 0049.01 +���3 */
8075
+ /* DZ Bank */
8063
8076
  case 49:
8064
8077
 
8065
- /* Sonderkonten */
8066
- if(k1==0)switch(k2){
8067
- case 36: strcpy(kto,"0002310113"); RETURN_OK_KTO_REPLACED;
8068
- case 936: strcpy(kto,"0002310113"); RETURN_OK_KTO_REPLACED;
8069
- case 999: strcpy(kto,"0001310113"); RETURN_OK_KTO_REPLACED;
8070
- case 6060: strcpy(kto,"0000160602"); RETURN_OK_KTO_REPLACED;
8071
- default: break;
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
- /* F�r Kontonummern mit einer '9' an der 5. Stelle muss die Kontonummer, auf deren Ba-
8075
- * sis die IBAN ermittelt wird, abweichend berechnet werden. Die ersten 4 Stellen (inkl.
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 03.12.2018 aktivieren */
8801
- if(time(NULL)>1543791600 ||0)pz_aenderungen_aktivieren_2018_12=1;
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(pz_aenderungen_aktivieren_2018_12)
20776
- return "03.12.2018";
20785
+ if(pz_aenderungen_aktivieren_2019_12)
20786
+ return "09.12.2019";
20777
20787
  else
20778
- return "03.12.2018 (Aenderungen vom 03.12.2018 enthalten aber noch nicht aktiviert)";
20788
+ return "09.09.2019 (Aenderungen vom 09.12.2019 enthalten aber noch nicht aktiviert)";
20779
20789
  case 5:
20780
- return "04.03.2019";
20790
+ return "09.09.2019";
20781
20791
  case 6:
20782
- return "4. M�rz 2019"; /* Klartext-Datum der Bibliotheksversion */
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 "08"; /* Unterversionszahl */
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
- * # pz_aenderungen_aktivieren_2018_12 abzufragen bzw. zu setzen. Falls die Variable #
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)pz_aenderungen_aktivieren_2018_12=set;
25888
- return pz_aenderungen_aktivieren_2018_12;
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
- /* zun�chst den BIC suchen wie angegeben */
26245
- idx=bic_binsearch(0,scl_cnt,such_bic);
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
- if(such_bic[8]==0){ /* Such-BIC 8-stellig angegeben; BIC mit XXX extension testen */
26252
- such_bic[8]=such_bic[9]=such_bic[10]='X';
26253
- such_bic[11]=0;
26254
- idx=bic_binsearch(0,scl_cnt,such_bic);
26255
- if(idx>=0){
26256
- if(retval)*retval=OK_SCL_EXTENSION_BIC_USED;
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
- /* Wildcard-BIC suchen */
26266
- such_bic[8]=0;
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,SLOT_BUFFER,lut)))RETURN(FILE_READ_ERROR);
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