konto_check 6.08.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 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