konto_check 5.5.0 → 5.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,7 +13,7 @@
13
13
  * # wurden aus der aktuellen BLZ-Datei der Deutschen Bundesbank #
14
14
  * # �bernommen. #
15
15
  * # #
16
- * # Copyright (C) 2002-2014 Michael Plugge <m.plugge@hs-mannheim.de> #
16
+ * # Copyright (C) 2002-2015 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,12 +45,15 @@
45
45
  * # im Internet herunterladen. #
46
46
  * ##########################################################################
47
47
  */
48
+ #line 332 "ruby/ext/konto_check_raw/konto_check.lxx"
48
49
 
49
50
  /* Definitionen und Includes */
50
51
  #ifndef VERSION
51
- #define VERSION "5.5 (final)"
52
+ #define VERSION "5.8 (final)"
53
+ #define VERSION_MAJOR 5
54
+ #define VERSION_MINOR 8
52
55
  #endif
53
- #define VERSION_DATE "2014-09-01"
56
+ #define VERSION_DATE "2015-08-22"
54
57
 
55
58
  #ifndef INCLUDE_KONTO_CHECK_DE
56
59
  #define INCLUDE_KONTO_CHECK_DE 1
@@ -101,8 +104,8 @@ static lzo_align_t __LZO_MMODEL wrkmem[LZO1X_1_MEM_COMPRESS];
101
104
  #define KONTO_CHECK_VARS
102
105
  #include "konto_check.h"
103
106
 
104
- /* Flag, um die �nderungen zum 9.6.2014 zu aktivieren */
105
- static int pz_aenderungen_aktivieren;
107
+ /* Flag, um die �nderungen zum September 2015 zu aktivieren */
108
+ static int pz_aenderungen_aktivieren_2015_09;
106
109
 
107
110
  /* falls die Variable verbose_debug gesetzt wird, werden bei einigen
108
111
  * Funktionen mittels perror() zus�tzliche Debuginfos ausgegeben. Die
@@ -239,6 +242,7 @@ static int convert_encoding(char **data,UINT4 *len);
239
242
  #define free(ptr) efree(ptr)
240
243
  #endif
241
244
 
245
+ #line 770 "ruby/ext/konto_check_raw/konto_check.lxx"
242
246
 
243
247
  /* Testwert zur Markierung ung�ltiger Ziffern im BLZ-String (>8 Stellen) */
244
248
  #define BLZ_FEHLER 100000000
@@ -374,6 +378,7 @@ static int convert_encoding(char **data,UINT4 *len);
374
378
  */
375
379
  #define CHECK_RETVAL(fkt) do{if((retval=fkt)!=OK)goto fini;}while(0) /* es mu� noch aufger�umt werden, daher goto */
376
380
  #define CHECK_RETURN(fkt) do{if((retval=fkt)!=OK)return retval;}while(0)
381
+ #line 911 "ruby/ext/konto_check_raw/konto_check.lxx"
377
382
 
378
383
  /* einige Makros zur Umwandlung zwischen unsigned int und char */
379
384
  #define UCP (unsigned char*)
@@ -493,6 +498,7 @@ int pz=-777;
493
498
 
494
499
  #define E_START(x)
495
500
  #define E_END(x)
501
+ #line 1036 "ruby/ext/konto_check_raw/konto_check.lxx"
496
502
 
497
503
  /* Variable f�r die Methoden 27, 29 und 69 */
498
504
  static const int m10h_digits[4][10]={
@@ -530,7 +536,6 @@ static char *default_buffer,*default_ptr,*default_key[DEFAULT_CNT],*default_val[
530
536
  static int default_cnt,default_bufsize,default_val_size[DEFAULT_CNT];
531
537
 
532
538
  static int kto_check_clear_default(void);
533
- static int kto_check_blz_x(char *blz,char *kto,int *uk_cnt);
534
539
 
535
540
  #if DEBUG>0
536
541
  /* "aktuelles" Datum f�r die Testumgebung (um einen Datumswechsel zu simulieren) */
@@ -942,6 +947,7 @@ static int create_lutfile_int(char *name, char *prolog, int slots,FILE **lut)
942
947
  * ###########################################################################
943
948
  */
944
949
 
950
+ #line 1485 "ruby/ext/konto_check_raw/konto_check.lxx"
945
951
  DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
946
952
  {
947
953
  char buffer[SLOT_BUFFER],*ptr;
@@ -979,6 +985,7 @@ DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
979
985
  * #############################################################################
980
986
  */
981
987
 
988
+ #line 1523 "ruby/ext/konto_check_raw/konto_check.lxx"
982
989
  static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
983
990
  {
984
991
  char buffer[SLOT_BUFFER],*ptr,*cptr;
@@ -1114,6 +1121,7 @@ static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
1114
1121
  * ###########################################################################
1115
1122
  */
1116
1123
 
1124
+ #line 1659 "ruby/ext/konto_check_raw/konto_check.lxx"
1117
1125
  DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **data)
1118
1126
  {
1119
1127
  int retval;
@@ -1136,6 +1144,7 @@ DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **da
1136
1144
  * ###########################################################################
1137
1145
  */
1138
1146
 
1147
+ #line 1683 "ruby/ext/konto_check_raw/konto_check.lxx"
1139
1148
  DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
1140
1149
  {
1141
1150
  int retval;
@@ -1157,6 +1166,7 @@ DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
1157
1166
  * ###########################################################################
1158
1167
  */
1159
1168
 
1169
+ #line 1706 "ruby/ext/konto_check_raw/konto_check.lxx"
1160
1170
  static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **data)
1161
1171
  {
1162
1172
  char buffer[SLOT_BUFFER],*ptr,*sbuffer,*dbuffer;
@@ -1246,6 +1256,7 @@ static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **
1246
1256
  FREE(sbuffer);
1247
1257
  RETURN(ERROR_MALLOC);
1248
1258
  }
1259
+ #line 1811 "ruby/ext/konto_check_raw/konto_check.lxx"
1249
1260
 
1250
1261
  if(fread(sbuffer,1,compressed_len,lut)<compressed_len){
1251
1262
  FREE(sbuffer);
@@ -2838,6 +2849,7 @@ DLL_EXPORT int lut_info_id(char *lut_name,int *info1,int *info2,int *valid1,int
2838
2849
  * ###########################################################################
2839
2850
  */
2840
2851
 
2852
+ #line 3404 "ruby/ext/konto_check_raw/konto_check.lxx"
2841
2853
  DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)
2842
2854
  {
2843
2855
  char *ptr,*ptr1,buffer[128];
@@ -2925,6 +2937,7 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
2925
2937
 
2926
2938
  /* Infoblocks lesen: 1. Infoblock */
2927
2939
  if((ret=read_lut_block_int(in,0,LUT2_INFO,&cnt,&ptr))==OK){
2940
+ #line 3493 "ruby/ext/konto_check_raw/konto_check.lxx"
2928
2941
  *(ptr+cnt)=0;
2929
2942
  if(valid1){
2930
2943
  for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
@@ -2972,6 +2985,7 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
2972
2985
 
2973
2986
  /* Infoblocks lesen: 2. Infoblock */
2974
2987
  if((ret=read_lut_block_int(in,0,LUT2_2_INFO,&cnt,&ptr))==OK){
2988
+ #line 3542 "ruby/ext/konto_check_raw/konto_check.lxx"
2975
2989
  *(ptr+cnt)=0;
2976
2990
  if(valid2){
2977
2991
  for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
@@ -3190,6 +3204,7 @@ DLL_EXPORT int copy_lutfile(char *old_name,char *new_name,int new_slots)
3190
3204
  qsort(slotdir,slot_cnt,sizeof(int),cmp_int);
3191
3205
  for(last_slot=-1,i=0;i<(int)slot_cnt;i++)if((typ=slotdir[i]) && typ!=(UINT4)last_slot){
3192
3206
  read_lut_block_int(lut1,0,typ,&len,&data);
3207
+ #line 3762 "ruby/ext/konto_check_raw/konto_check.lxx"
3193
3208
  write_lut_block_int(lut2,typ,len,data);
3194
3209
  FREE(data);
3195
3210
  last_slot=typ;
@@ -3419,6 +3434,7 @@ DLL_EXPORT int lut_init(char *lut_name,int required,int set)
3419
3434
  * # Copyright (C) 2008 Michael Plugge <m.plugge@hs-mannheim.de> #
3420
3435
  * ###########################################################################
3421
3436
  */
3437
+ #line 3992 "ruby/ext/konto_check_raw/konto_check.lxx"
3422
3438
  DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,int incremental)
3423
3439
  {
3424
3440
  char *ptr,*dptr,*data,*eptr,*prolog,*info,*user_info,*hs=NULL,*info1,*info2,*ci=NULL,name_buffer[LUT_PATH_LEN];
@@ -3646,6 +3662,7 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3646
3662
  typ1=typ;
3647
3663
  if(lut2_block_status[typ]==OK)continue; /* jeden Block nur einmal einlesen */
3648
3664
  retval=read_lut_block_int(lut,0,typ,&len,&data);
3665
+ #line 4221 "ruby/ext/konto_check_raw/konto_check.lxx"
3649
3666
 
3650
3667
  switch(retval){
3651
3668
  case LUT_CRC_ERROR:
@@ -3733,6 +3750,7 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3733
3750
  if(typ==LUT2_2_NAME || typ==LUT2_2_NAME_KURZ){
3734
3751
  FREE(data);
3735
3752
  i=read_lut_block_int(lut,0,LUT2_2_NAME_NAME_KURZ,&len,&data);
3753
+ #line 4313 "ruby/ext/konto_check_raw/konto_check.lxx"
3736
3754
  if(i==OK){ /* was gefunden; Typ �ndern, dann weiter wie bei OK */
3737
3755
  typ=LUT2_2_NAME_NAME_KURZ;
3738
3756
  typ1=LUT2_NAME_NAME_KURZ;
@@ -4328,6 +4346,7 @@ DLL_EXPORT int lut_blocks_id(int mode,int *lut_filename,int *lut_blocks_ok,int *
4328
4346
  * ###########################################################################
4329
4347
  */
4330
4348
 
4349
+ #line 4909 "ruby/ext/konto_check_raw/konto_check.lxx"
4331
4350
  DLL_EXPORT const char *current_lutfile_name(int *set,int *level,int *retval)
4332
4351
  {
4333
4352
  if(init_status<7 || !current_lutfile){
@@ -4727,7 +4746,6 @@ DLL_EXPORT int lut_pan_i(int b,int zweigstelle,int *retval)
4727
4746
 
4728
4747
  DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
4729
4748
  {
4730
- #if USE_IBAN_RULES
4731
4749
  char blz2[12],kto2[12];
4732
4750
  const char *bic,*bic_neu;
4733
4751
  int ret,regel;
@@ -4752,9 +4770,6 @@ DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
4752
4770
  * Falls der BIC durch die Regel modifiziert wird, wird das nur durch retval angezeigt.
4753
4771
  */
4754
4772
  return bic;
4755
- #else
4756
- return lut_bic_int(b,zweigstelle,retval);
4757
- #endif
4758
4773
  }
4759
4774
 
4760
4775
  static const char *lut_bic_int(char *b,int zweigstelle,int *retval)
@@ -4815,36 +4830,18 @@ DLL_EXPORT const char *lut_bic_h(char *b,int zweigstelle,int *retval)
4815
4830
  */
4816
4831
  DLL_EXPORT const char *lut_bic_i(int b,int zweigstelle,int *retval)
4817
4832
  {
4818
- #if !USE_IBAN_RULES
4819
- int idx;
4820
-
4821
- if(!bic)INVALID_C(LUT2_BIC_NOT_INITIALIZED);
4822
- if((idx=lut_index_i(b))<0)INVALID_C(idx);
4823
- CHECK_OFFSET_S;
4824
- return bic[startidx[idx]+zweigstelle];
4825
- #else
4826
4833
  char b_a[9];
4827
4834
 
4828
4835
  snprintf(b_a,9,"%08d",b);
4829
4836
  return lut_bic(b_a,zweigstelle,retval);
4830
- #endif
4831
4837
  }
4832
4838
 
4833
4839
  DLL_EXPORT const char *lut_bic_hi(int b,int zweigstelle,int *retval)
4834
4840
  {
4835
- #if !USE_IBAN_RULES
4836
- int idx;
4837
-
4838
- if(!bic_h)INVALID_C(LUT2_BIC_NOT_INITIALIZED);
4839
- if((idx=lut_index_i(b))<0)INVALID_C(idx);
4840
- CHECK_OFFSET_S;
4841
- return bic_h[startidx[idx]+zweigstelle];
4842
- #else
4843
4841
  char b_a[9];
4844
4842
 
4845
4843
  snprintf(b_a,9,"%08d",b);
4846
4844
  return lut_bic_h(b_a,zweigstelle,retval);
4847
- #endif
4848
4845
  }
4849
4846
 
4850
4847
  /* Funktion lut_nr() +���2 */
@@ -5103,11 +5100,11 @@ static int iban_init(void)
5103
5100
  * ###########################################################################
5104
5101
  */
5105
5102
 
5106
- #if USE_IBAN_RULES
5103
+ #line 5663 "ruby/ext/konto_check_raw/konto_check.lxx"
5107
5104
  static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_version,RETVAL *retvals)
5108
5105
  {
5109
5106
  char tmp_buffer[16];
5110
- int regel,version,b,b_alt,b_neu,k1,k2,k3,not_ok,i,ret,loesch,idx,pz_methode,uk_cnt,tmp;
5107
+ int regel,version,b,b_alt,b_neu,k1,k2,k3,not_ok,i,ret,loesch,idx,pz_methode,tmp;
5111
5108
 
5112
5109
  /* pr�fen, ob bereits initialisiert wurde */
5113
5110
  INITIALIZE_WAIT;
@@ -5123,56 +5120,6 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
5123
5120
  *bicp=NULL;
5124
5121
  ret=OK;
5125
5122
 
5126
- /* zun�chst einige Sonderf�lle (weggelassene Unterkonten) f�r Regel 0 behandeln;
5127
- * diese sind auch wichtig, falls die IBAN-Regeln nicht in der LUT-Datei enthalten sind.
5128
- * Die R�ckgabe differenziert allerdings nicht mehr nach der Art der Unterkonten; diese
5129
- * werden nur stillschweigend eingef�gt (wie im "SEPA Account Converter").
5130
- */
5131
- if(regel==0){ /* in den anderen Regeln wird die Verschiebung bei Bedarf ebenfalls gemacht */
5132
- if(((ret=kto_check_blz_x(blz,kto,&uk_cnt))<=0))return ret; /* Fehler bei Regel 0: zur�ckgeben, keine Berechnung */
5133
- switch(uk_cnt){
5134
- case 1:
5135
- ret=OK_UNTERKONTO_ATTACHED;
5136
- kto[0]=kto[1];
5137
- kto[1]=kto[2];
5138
- kto[2]=kto[3];
5139
- kto[3]=kto[4];
5140
- kto[4]=kto[5];
5141
- kto[5]=kto[6];
5142
- kto[6]=kto[7];
5143
- kto[7]=kto[8];
5144
- kto[8]=kto[9];
5145
- kto[9]='0';
5146
- break;
5147
- case 2:
5148
- ret=OK_UNTERKONTO_ATTACHED;
5149
- kto[0]=kto[2];
5150
- kto[1]=kto[3];
5151
- kto[2]=kto[4];
5152
- kto[3]=kto[5];
5153
- kto[4]=kto[6];
5154
- kto[5]=kto[7];
5155
- kto[6]=kto[8];
5156
- kto[7]=kto[9];
5157
- kto[8]=kto[9]='0';
5158
- break;
5159
- case 3:
5160
- ret=OK_UNTERKONTO_ATTACHED;
5161
- kto[0]=kto[3];
5162
- kto[1]=kto[4];
5163
- kto[2]=kto[5];
5164
- kto[3]=kto[6];
5165
- kto[4]=kto[7];
5166
- kto[5]=kto[8];
5167
- kto[6]=kto[9];
5168
- kto[7]=kto[8]=kto[9]='0';
5169
- break;
5170
- default:
5171
- break;
5172
- }
5173
- }
5174
-
5175
-
5176
5123
  /* erstmal Konto und BLZ nach Integer umwandeln */
5177
5124
  k1=b2[I kto[0]]+b1[I kto[1]];
5178
5125
  k2=b8[I kto[2]]+b7[I kto[3]]+b6[I kto[4]]+b5[I kto[5]]+b4[I kto[6]]+b3[I kto[7]]+b2[I kto[8]]+b1[I kto[9]];
@@ -8829,8 +8776,8 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8829
8776
  return IBAN_RULE_UNKNOWN;
8830
8777
  }
8831
8778
  }
8832
- #endif
8833
8779
 
8780
+ #line 9340 "ruby/ext/konto_check_raw/konto_check.lxx"
8834
8781
  /* Funktion lut_multiple() +���2 */
8835
8782
  /* ###########################################################################
8836
8783
  * # lut_multiple(): Universalfunktion, um zu einer gegebenen Bankleitzahl #
@@ -9098,6 +9045,7 @@ DLL_EXPORT int lut_cleanup(void)
9098
9045
  FREE(sort_pz_f);
9099
9046
  FREE(sort_plz);
9100
9047
  FREE(sort_iban_regel);
9048
+ #line 9602 "ruby/ext/konto_check_raw/konto_check.lxx"
9101
9049
  if(name_raw && name_data!=name_raw)
9102
9050
  FREE(name_raw);
9103
9051
  else
@@ -9166,6 +9114,7 @@ DLL_EXPORT int lut_cleanup(void)
9166
9114
  lut_cleanup(); /* neuer Versuch, aufzur�umen */
9167
9115
  RETURN(INIT_FATAL_ERROR);
9168
9116
  }
9117
+ #line 9676 "ruby/ext/konto_check_raw/konto_check.lxx"
9169
9118
  init_status&=1;
9170
9119
  init_in_progress=0;
9171
9120
  return OK;
@@ -9339,8 +9288,8 @@ static void init_atoi_table(void)
9339
9288
  unsigned long l;
9340
9289
 
9341
9290
  #if 1
9342
- /* �nderungen zum 9.6.2014 aktivieren */
9343
- if(time(NULL)>1410127200)pz_aenderungen_aktivieren=1;
9291
+ /* �nderungen zum 07.09.2015 aktivieren */
9292
+ if(time(NULL)>1441576800 ||0)pz_aenderungen_aktivieren_2015_09=1;
9344
9293
  #endif
9345
9294
 
9346
9295
  /* ung�ltige Ziffern; Blanks und Tabs werden ebenfalls als ung�ltig
@@ -9606,6 +9555,7 @@ static void init_atoi_table(void)
9606
9555
  lut_block_name2[126]="2. IBAN Regel idx";
9607
9556
  lut_block_name2[127]="2. BIC Hauptst.idx";
9608
9557
  lut_blocklen_max=453;
9558
+ #line 9918 "ruby/ext/konto_check_raw/konto_check.lxx"
9609
9559
  init_status|=1;
9610
9560
  }
9611
9561
 
@@ -9665,6 +9615,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
9665
9615
 
9666
9616
  switch(pz_methode){
9667
9617
 
9618
+ #line 9981 "ruby/ext/konto_check_raw/konto_check.lxx"
9668
9619
  /* Berechnungsmethoden 00 bis 09 +���3
9669
9620
  Berechnung nach der Methode 00 +���4 */
9670
9621
  /*
@@ -9975,8 +9926,36 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
9975
9926
  retvals->pz_methode=8;
9976
9927
  }
9977
9928
  #endif
9978
- if(strcmp(kto,"0000060000")<0) /* Kontonummern unter 60 000: keine Pr�fzifferberechnung oder falsch??? */
9979
- RETURN(INVALID_KTO);
9929
+
9930
+ /* Kontonummern unter 60 000: keine Pr�fzifferberechnung oder falsch???
9931
+ *
9932
+ * Die Beschreibung in der PDF-Datei sagt nichts dar�ber aus, was mit Kontonummern
9933
+ * unter 60 000 ist. Ich bekam jetzt zwei Emails, bei denen reale Konten in diesem
9934
+ * Bereich existieren; ein kleiner Test mit verschiedenen "Konkurrenzprodukten"
9935
+ * ergibt folgendes Bild:
9936
+ *
9937
+ * ckonto.de: ok
9938
+ * ktoblzcheck: ok
9939
+ * kontonummern.de: ok, ohne Pr�fzifferberechnung
9940
+ * iban-rechner.de: ok, ohne Pr�fzifferberechnung
9941
+ * VR-IBAN-Konverter: ok
9942
+ * SEPA-Account-Konverter (Sparkasse): ok
9943
+ *
9944
+ * BAV: falsch
9945
+ * bankleitzahlen.de: Pr�ffehler.
9946
+ * bankdatencheck.de: nicht g�ltig
9947
+ *
9948
+ * Die Mehrheit der Programme sieht die Konten als richtig an (bzw. ohne
9949
+ * Pr�fzifferberechnung als g�ltig). Daher - und vor allem auch aufgrund der vorhandenen
9950
+ * realen Konten - wird der R�ckgabewert f�r diesen Kontenkreis von INVALID_KTO auf
9951
+ * OK_NO_CHK ge�ndert.
9952
+ *
9953
+ * Markus Malkusch hat nach einer kurzen R�ckfrage auch den BAV umgestellt, da� die Konten
9954
+ * ohne Pr�fung als richtig angesehen werden.
9955
+ */
9956
+
9957
+ if(strcmp(kto,"0000060000")<0)RETURN(OK_NO_CHK);
9958
+
9980
9959
  #ifdef __ALPHA
9981
9960
  pz = ((kto[0]<'5') ? (kto[0]-'0')*2 : (kto[0]-'0')*2-9)
9982
9961
  + (kto[1]-'0')
@@ -10300,14 +10279,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
10300
10279
  * zur�ckgegeben.
10301
10280
  */
10302
10281
  return FALSE;
10303
- #if 0
10304
- /* alte Version */
10305
- #if BAV_KOMPATIBEL
10306
- return BAV_FALSE;
10307
- #else
10308
- pz=0;
10309
- #endif
10310
- #endif
10311
10282
  }
10312
10283
  CHECK_PZ10;
10313
10284
 
@@ -10861,29 +10832,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
10861
10832
  pz=0;
10862
10833
  else
10863
10834
  pz=11-pz;
10864
- CHECK_PZX8;
10865
- /* evl. wurde eine Unterkontonummer weggelassen => nur 8-stellige
10866
- * Kontonummer; neuer Versuch mit den Stellen ab der 3. Stelle
10867
- */
10868
- if(kto_len==8){
10869
- pz = (kto[2]-'0') * 8
10870
- + (kto[3]-'0') * 7
10871
- + (kto[4]-'0') * 6
10872
- + (kto[5]-'0') * 5
10873
- + (kto[6]-'0') * 4
10874
- + (kto[7]-'0') * 3
10875
- + (kto[8]-'0') * 2;
10876
-
10877
- MOD_11_176; /* pz%=11 */
10878
- if(pz<=1)
10879
- pz=0;
10880
- else
10881
- pz=11-pz;
10882
- CHECK_PZ10;
10883
- }
10884
- else
10885
- return FALSE;
10886
-
10835
+ CHECK_PZ8;
10887
10836
 
10888
10837
  /* Berechnung nach der Methode 29 +���4 */
10889
10838
  /*
@@ -11105,29 +11054,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
11105
11054
  pz=0;
11106
11055
  else
11107
11056
  pz=11-pz;
11108
- CHECK_PZX8;
11109
-
11110
- /* evl. wurde eine Unterkontonummer weggelassen => nur 8-stellige
11111
- * Kontonummer; neuer Versuch mit den Stellen ab der 3. Stelle
11112
- */
11113
- if(kto_len==8){
11114
- pz = (kto[2]-'0') * 7
11115
- + (kto[3]-'0') * 9
11116
- + (kto[4]-'0') * 10
11117
- + (kto[5]-'0') * 5
11118
- + (kto[6]-'0') * 8
11119
- + (kto[7]-'0') * 4
11120
- + (kto[8]-'0') * 2;
11121
-
11122
- MOD_11_352; /* pz%=11 */
11123
- if(pz<=1)
11124
- pz=0;
11125
- else
11126
- pz=11-pz;
11127
- CHECK_PZ10;
11128
- }
11129
- else
11130
- return FALSE;
11057
+ CHECK_PZ8;
11131
11058
 
11132
11059
  /* Berechnung nach der Methode 35 +���4 */
11133
11060
  /*
@@ -11545,7 +11472,37 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
11545
11472
  pz=0;
11546
11473
  else
11547
11474
  pz=11-pz;
11548
- CHECK_PZ10;
11475
+ CHECK_PZX10;
11476
+
11477
+ /* Noch ein Sonderfall aus der IBAN-Regel 49 (WGZ-Bank, diese Pr�fziffermethode
11478
+ * wird nur von der Bank verwendet). Bei Konten mit einer '9' an der 5. Stelle
11479
+ * oder 10-stellige Konten die mit '9' beginnen (diese sind schon herumgedreht)
11480
+ * wird die Ausnahme aus IBAN-Regel 49 angewendet:
11481
+ *
11482
+ * F�r Kontonummern mit einer '9' an der 5. Stelle muss die
11483
+ * Kontonummer, auf deren Basis die IBAN ermittelt wird, abweichend
11484
+ * berechnet werden. Die ersten 4 Stellen (inkl. aufgef�llter
11485
+ * Nullen) m�ssen ans Ende gestellt werden, so dass die Kontonummer
11486
+ * dann immer mit der '9' anf�ngt.
11487
+ *
11488
+ * Beispiel:
11489
+ *
11490
+ * Kontonummer alt: 0001991182
11491
+ * Kontonummer f�r die Berechnung der IBAN: 9911820001
11492
+ *
11493
+ * Diese neu ermittelte Kontonummer hat keine Pr�fziffer, die
11494
+ * daher auch nicht gepr�ft werden darf. Ansonsten kann mit
11495
+ * dieser Kontonummer die IBAN mit der Standard-IBAN-Regel
11496
+ * ermittelt werden.
11497
+ *
11498
+ * Das Verhalten mit der f�hrenden '9' ist nicht in der IBAN-Regel angegeben,
11499
+ * wurde aber aufgrund realer Kontodaten gefunden und durch eine Nachfrage bei
11500
+ * der Bank best�tigt (Vielen Dank an Stefan Banse f�r den Hinweis).
11501
+ */
11502
+ if(*kto=='9' || *(kto+4)=='9')
11503
+ return OK_NO_CHK;
11504
+ else
11505
+ return FALSE;
11549
11506
 
11550
11507
  /* Berechnung nach der Methode 45 +���4 */
11551
11508
  /*
@@ -11993,6 +11950,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
11993
11950
  * ######################################################################
11994
11951
  */
11995
11952
 
11953
+ #line 11992 "ruby/ext/konto_check_raw/konto_check.lxx"
11996
11954
  case 51:
11997
11955
  if(*(kto+2)=='9'){ /* Ausnahme */
11998
11956
 
@@ -12254,6 +12212,8 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12254
12212
  else
12255
12213
  return FALSE;
12256
12214
 
12215
+ #line 12206 "ruby/ext/konto_check_raw/konto_check.lxx"
12216
+ #line 12208 "ruby/ext/konto_check_raw/konto_check.lxx"
12257
12217
  /* Berechnung nach der Methode 53 +���4 */
12258
12218
  /*
12259
12219
  * ######################################################################
@@ -12552,6 +12512,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12552
12512
  * # bewerten. #
12553
12513
  * ######################################################################
12554
12514
  */
12515
+ #line 12477 "ruby/ext/konto_check_raw/konto_check.lxx"
12555
12516
  case 57:
12556
12517
  #if DEBUG>0
12557
12518
  if(retvals){
@@ -13197,6 +13158,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
13197
13158
  * # Pr�fzifferberechnung) #
13198
13159
  * ######################################################################
13199
13160
  */
13161
+ #line 13057 "ruby/ext/konto_check_raw/konto_check.lxx"
13200
13162
  case 66:
13201
13163
  #if DEBUG>0
13202
13164
  case 2066:
@@ -15092,8 +15054,18 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15092
15054
  /* Berechnung nach der Methode 87 +���4 */
15093
15055
  /*
15094
15056
  * ######################################################################
15095
- * # Berechnung nach der Methode 87 (ge�ndert zum 6.9.04) #
15057
+ * # Berechnung nach der Methode 87 (ge�ndert zum 7.9.15) #
15096
15058
  * ######################################################################
15059
+ * # #
15060
+ * # Die Kontonummer ist durch linksb�ndige Nullenauff�llung 10-stellig #
15061
+ * # darzustellen. Der zur Pr�fzifferberechnung heranzuziehende Teil #
15062
+ * # befindet sich bei der Methode A und D in den Stellen 4 bis 9 der #
15063
+ * # Kontonummer und bei den Methoden B und C in Stellen 5 - 9, die #
15064
+ * # Pr�fziffer in Stelle 10 der Kontonummer. Ergibt die erste #
15065
+ * # Berechnung der Pr�fziffer nach der Methode A einen Pr�fziffer- #
15066
+ * # fehler, so sind weitere Berechnungen mit den anderen Methoden #
15067
+ * # vorzunehmen. #
15068
+ * # #
15097
15069
  * # Ausnahme: #
15098
15070
  * # Ist nach linksb�ndiger Auff�llung mit Nullen auf 10 Stellen die #
15099
15071
  * # 3. Stelle der Kontonummer = 9 (Sachkonten), so erfolgt die #
@@ -15126,18 +15098,28 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15126
15098
  * # verbleibende Rest wird vom Divisor (7) subtrahiert. Das #
15127
15099
  * # Ergebnis ist die Pr�fziffer. Verbleibt nach der Division kein #
15128
15100
  * # Rest, ist die Pr�fziffer = 0. #
15101
+ * # #
15102
+ * # Methode D: #
15103
+ * # Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7 #
15104
+ * # Die Stellen 4 bis 9 werden von rechts nach links mit den Ziffern #
15105
+ * # 2, 3, 4, 5, 6, 7 multipliziert. Die weitere Berechnung und #
15106
+ * # m�gliche Ergebnisse entsprechen dem Verfahren 06. #
15129
15107
  * ######################################################################
15130
15108
  */
15131
15109
 
15132
15110
  case 87:
15133
15111
 
15134
- /* Ausnahme, Variante 1 */
15112
+ /* Ausnahme, Variante 1
15113
+ * Die Untermethoden f�r die Sachkonten verschieben sich mit
15114
+ * der �nderung zum September 2015 (Einf�hrung von Methode D)
15115
+ * leider auf E und F (statt vorher D und E).
15116
+ */
15135
15117
  if(*(kto+2)=='9'){ /* Berechnung wie in Verfahren 51 */
15136
15118
  #if DEBUG>0
15137
- case 4087:
15119
+ case 5087:
15138
15120
  if(retvals){
15139
- retvals->methode="87d";
15140
- retvals->pz_methode=4087;
15121
+ retvals->methode="87e";
15122
+ retvals->pz_methode=5087;
15141
15123
  }
15142
15124
  #endif
15143
15125
  pz = 9 * 8
@@ -15157,10 +15139,10 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15157
15139
 
15158
15140
  /* Ausnahme, Variante 2 */
15159
15141
  #if DEBUG>0
15160
- case 5087:
15142
+ case 6087:
15161
15143
  if(retvals){
15162
- retvals->methode="87e";
15163
- retvals->pz_methode=5087;
15144
+ retvals->methode="87f";
15145
+ retvals->pz_methode=6087;
15164
15146
  }
15165
15147
  #endif
15166
15148
  pz = (kto[0]-'0') * 10
@@ -15326,10 +15308,31 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15326
15308
  retvals->pz_pos=10;
15327
15309
  }
15328
15310
  #endif
15329
- if(pz==*(kto+9)-'0')
15330
- return OK;
15311
+ if(pz==*(kto+9)-'0')return OK;
15312
+
15313
+ #if DEBUG>0
15314
+ case 4087:
15315
+ if(retvals){
15316
+ retvals->methode="87d";
15317
+ retvals->pz_methode=4087;
15318
+ }
15319
+ #endif
15320
+ /* die neue Untermethode wird erst ab 7. September 2015 g�ltig */
15321
+ if(!pz_aenderungen_aktivieren_2015_09)return UNDEFINED_SUBMETHOD;
15322
+
15323
+ pz = (kto[3]-'0') * 7
15324
+ + (kto[4]-'0') * 6
15325
+ + (kto[5]-'0') * 5
15326
+ + (kto[6]-'0') * 4
15327
+ + (kto[7]-'0') * 3
15328
+ + (kto[8]-'0') * 2;
15329
+
15330
+ MOD_11_176; /* pz%=11 */
15331
+ if(pz<=1)
15332
+ pz=0;
15331
15333
  else
15332
- return FALSE;
15334
+ pz=11-pz;
15335
+ CHECK_PZ10;
15333
15336
 
15334
15337
 
15335
15338
  /* Berechnung nach der Methode 88 +���4 */
@@ -15564,8 +15567,8 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15564
15567
  * # Methode A: #
15565
15568
  * # Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7 #
15566
15569
  * # Stellennr.: 1 2 3 4 5 6 7 8 9 A (A = 10) #
15567
- * # Kontonr.: x x x K K K K K K P #
15568
- * # Gewichtung: 7 6 5 4 3 2 #
15570
+ * # Kontonr.: x x x K K K K K K P #
15571
+ * # Gewichtung: 7 6 5 4 3 2 #
15569
15572
  * # #
15570
15573
  * # Die Berechnung und m�gliche Ergebnisse entsprechen dem Verfahren #
15571
15574
  * # 06. #
@@ -15573,8 +15576,8 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15573
15576
  * # Methode B #
15574
15577
  * # Modulus 11, Gewichtung 2, 3, 4, 5, 6 #
15575
15578
  * # Stellennr.: 1 2 3 4 5 6 7 8 9 A (A = 10) #
15576
- * # Kontonr.: x x x x K K K K K P #
15577
- * # Gewichtung: 6 5 4 3 2 #
15579
+ * # Kontonr.: x x x x K K K K K P #
15580
+ * # Gewichtung: 6 5 4 3 2 #
15578
15581
  * # #
15579
15582
  * # Die Berechnung und die m�glichen Ergebnisse entsprechen dem #
15580
15583
  * # Verfahren 06. #
@@ -15582,8 +15585,8 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15582
15585
  * # Methode C #
15583
15586
  * # Modulus 7, Gewichtung 2, 3, 4, 5, 6 #
15584
15587
  * # Stellennr.: 1 2 3 4 5 6 7 8 9 A (A = 10) #
15585
- * # Kontonr.: x x x x K K K K K P #
15586
- * # Gewichtung: 6 5 4 3 2 #
15588
+ * # Kontonr.: x x x x K K K K K P #
15589
+ * # Gewichtung: 6 5 4 3 2 #
15587
15590
  * # #
15588
15591
  * # Die einzelnen Stellen der Kontonummer sind von rechts nach links #
15589
15592
  * # mit den Gewichten zu multiplizieren. Die jeweiligen Produkte #
@@ -15785,30 +15788,16 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15785
15788
  retvals->pz_methode=7090;
15786
15789
  }
15787
15790
  #endif
15788
- if(pz_aenderungen_aktivieren){
15789
- pz = (kto[3]-'0')
15790
- + (kto[4]-'0') * 2
15791
- + (kto[5]-'0')
15792
- + (kto[6]-'0') * 2
15793
- + (kto[7]-'0')
15794
- + (kto[8]-'0') * 2;
15791
+ pz = (kto[3]-'0')
15792
+ + (kto[4]-'0') * 2
15793
+ + (kto[5]-'0')
15794
+ + (kto[6]-'0') * 2
15795
+ + (kto[7]-'0')
15796
+ + (kto[8]-'0') * 2;
15795
15797
 
15796
- MOD_7_56; /* pz%=7 */
15797
- if(pz)pz=7-pz;
15798
- CHECK_PZ10;
15799
- }
15800
- else{
15801
- #if DEBUG>0
15802
- if(!pz_aenderungen_aktivieren){ /* switch-code derzeit noch nicht g�ltig */
15803
- if(untermethode==7)return UNDEFINED_SUBMETHOD;
15804
- if(retvals){ /* Methode zur�cksetzen, nicht definiert */
15805
- retvals->methode="90e";
15806
- retvals->pz_methode=5090;
15807
- }
15808
- }
15809
- #endif
15810
- return FALSE;
15811
- }
15798
+ MOD_7_56; /* pz%=7 */
15799
+ if(pz)pz=7-pz;
15800
+ CHECK_PZ10;
15812
15801
 
15813
15802
  /* Berechnung nach der Methode 91 +���4 */
15814
15803
  /*
@@ -19222,9 +19211,9 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
19222
19211
  * # 1. Stelle von links Zahl (Konstante) #
19223
19212
  * # der 10-stelligen #
19224
19213
  * # Kontonummer #
19225
- * # 0 4363380 # #
19226
- * # 1 4363381 # #
19227
- * # 2 4363382 # #
19214
+ * # 0 4363380 #
19215
+ * # 1 4363381 #
19216
+ * # 2 4363382 #
19228
19217
  * # 3 4363383 #
19229
19218
  * # 4 4363384 #
19230
19219
  * # 5 4363385 #
@@ -20220,6 +20209,83 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
20220
20209
  if(pz==10)return FALSE;
20221
20210
  CHECK_PZ10;
20222
20211
 
20212
+ /* Berechnung nach der Methode E2 +���4 */
20213
+ /*
20214
+ * ######################################################################
20215
+ * # Berechnung nach der Methode E2 #
20216
+ * ######################################################################
20217
+ * # Modulus 10, Gewichtung 1, 2, 1, 2, 1, 2, 1, 2 #
20218
+ * # #
20219
+ * # Die Kontonummer ist 10-stellig, ggf. ist die Kontonummer f�r die #
20220
+ * # Pr�fzifferberechnung durch linksb�ndige Auff�llung mit Nullen #
20221
+ * # 10-stellig darzustellen. Die 10. Stelle der Kontonummer ist die #
20222
+ * # Pr�fziffer. #
20223
+ * # #
20224
+ * # Kontonummern, die an der 1. Stelle von links der 10-stelligen #
20225
+ * # Kontonummer den Wert 6, 7, 8 oder 9 beinhalten, sind falsch. #
20226
+ * # #
20227
+ * # Kontonummern, die an der 1. Stelle von links der 10-stelligen #
20228
+ * # Kontonummer den Wert 0, 1, 2, 3, 4 oder 5 beinhalten, sind wie #
20229
+ * # folgt zu pr�fen: #
20230
+ * # #
20231
+ * # F�r die Berechnung der Pr�fziffer werden die Stellen 2 bis 9 der #
20232
+ * # Kontonummer von links verwendet. Diese Stellen sind links um #
20233
+ * # eine Zahl (Konstante) gem�� der folgenden Tabelle zu erg�nzen. #
20234
+ * # #
20235
+ * # 1. Stelle von links Zahl (Konstante) #
20236
+ * # der 10-stelligen #
20237
+ * # Kontonummer #
20238
+ * # 0 4383200 #
20239
+ * # 1 4383201 #
20240
+ * # 2 4383202 #
20241
+ * # 3 4383203 #
20242
+ * # 4 4383204 #
20243
+ * # 5 4383205 #
20244
+ * # #
20245
+ * # Die Berechnung und m�gliche Ergebnisse entsprechen der #
20246
+ * # Methode 00. #
20247
+ * ######################################################################
20248
+ * # Anmerkung zur Berechnung (MP): Die Methode entspricht (bis auf #
20249
+ * # die Konstante und die zugelassenen Anfangsziffern) genau der #
20250
+ * # Methode D1. die Berechnung ist daher auch analog. Die #
20251
+ * # zus�tzliche feste Konstante wird im voraus berechnet und als #
20252
+ * # Initialwert f�r die Quersumme verwendet. Die Berechnung beginnt #
20253
+ * # allerdings - entgegen der Beschreibung - mit der ersten Stelle #
20254
+ * # der Kontonummer, da diese in der Konstanten enthalten ist. #
20255
+ * ######################################################################
20256
+ */
20257
+
20258
+ case 142:
20259
+ #if DEBUG>0
20260
+ if(retvals){
20261
+ retvals->methode="E2";
20262
+ retvals->pz_methode=142;
20263
+ }
20264
+ #endif
20265
+ if(*kto>'5')return INVALID_KTO;
20266
+ pz=25;
20267
+
20268
+ #ifdef __ALPHA
20269
+ pz+= ((kto[0]<'5') ? (kto[0]-'0')*2 : (kto[0]-'0')*2-9)
20270
+ + (kto[1]-'0')
20271
+ + ((kto[2]<'5') ? (kto[2]-'0')*2 : (kto[2]-'0')*2-9)
20272
+ + (kto[3]-'0')
20273
+ + ((kto[4]<'5') ? (kto[4]-'0')*2 : (kto[4]-'0')*2-9)
20274
+ + (kto[5]-'0')
20275
+ + ((kto[6]<'5') ? (kto[6]-'0')*2 : (kto[6]-'0')*2-9)
20276
+ + (kto[7]-'0')
20277
+ + ((kto[8]<'5') ? (kto[8]-'0')*2 : (kto[8]-'0')*2-9);
20278
+ #else
20279
+ pz+=(kto[1]-'0')+(kto[3]-'0')+(kto[5]-'0')+(kto[7]-'0');
20280
+ if(kto[0]<'5')pz+=(kto[0]-'0')*2; else pz+=(kto[0]-'0')*2-9;
20281
+ if(kto[2]<'5')pz+=(kto[2]-'0')*2; else pz+=(kto[2]-'0')*2-9;
20282
+ if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20283
+ if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20284
+ if(kto[8]<'5')pz+=(kto[8]-'0')*2; else pz+=(kto[8]-'0')*2-9;
20285
+ #endif
20286
+ MOD_10_80; /* pz%=10 */
20287
+ if(pz)pz=10-pz;
20288
+ CHECK_PZ10;
20223
20289
 
20224
20290
  /* nicht abgedeckte F�lle +���3 */
20225
20291
  /*
@@ -20238,6 +20304,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
20238
20304
  return NOT_IMPLEMENTED;
20239
20305
  }
20240
20306
  }
20307
+ #line 19060 "ruby/ext/konto_check_raw/konto_check.lxx"
20241
20308
 
20242
20309
  /*
20243
20310
  * ######################################################################
@@ -20335,7 +20402,7 @@ DLL_EXPORT int kto_check_blz(char *blz,char *kto)
20335
20402
  #if DEBUG>0 /* es werden einige Funktionen benutzt, die nur in der Debug-Variante enthalten sind */
20336
20403
  DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,const char **bic,int *regel,RETVAL *retvals)
20337
20404
  {
20338
- #if USE_IBAN_RULES
20405
+ #line 19158 "ruby/ext/konto_check_raw/konto_check.lxx"
20339
20406
  char *blz_o,buffer[32],kto_o[16],*blz_n,*kto_n,*ptr,*dptr;
20340
20407
  const char *bicp;
20341
20408
  int ret,ret_regel,r;
@@ -20383,11 +20450,7 @@ DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,con
20383
20450
  }
20384
20451
  else /* BLZ und Kto gleich */
20385
20452
  return ret;
20386
- #else
20387
- if(regel)*regel=0;
20388
- if(retvals)*retvals=NULL;
20389
- return kto_check_regel(blz,kto);
20390
- #endif
20453
+ #line 19206 "ruby/ext/konto_check_raw/konto_check.lxx"
20391
20454
  }
20392
20455
 
20393
20456
  #else /* !DEBUG */
@@ -20396,7 +20459,6 @@ DLL_EXPORT int kto_check_regel_dbg(char *blz,char *kto,char *blz2,char *kto2,con
20396
20459
 
20397
20460
  DLL_EXPORT int kto_check_regel(char *blz,char *kto)
20398
20461
  {
20399
- #if USE_IBAN_RULES
20400
20462
  char *blz_o,blz_n[10],kto_o[16],kto_n[16],*ptr,*dptr;
20401
20463
  const char *bicp;
20402
20464
  int ret,ret_regel,regel;
@@ -20424,9 +20486,6 @@ DLL_EXPORT int kto_check_regel(char *blz,char *kto)
20424
20486
  }
20425
20487
  else /* BLZ und Kto gleich */
20426
20488
  return ret;
20427
- #else
20428
- return kto_check_blz(blz,kto);
20429
- #endif
20430
20489
  }
20431
20490
 
20432
20491
  /* Funktion kto_check_pz() +���1 */
@@ -20471,288 +20530,6 @@ DLL_EXPORT int kto_check_pz(char *pz,char *kto,char *blz)
20471
20530
  #endif
20472
20531
  }
20473
20532
 
20474
- /* Funktion kto_check_blz_x() +���1 */
20475
- /* ###########################################################################
20476
- * # Die Funktion kto_check_blz_x() ist eine Hilfsfunktion f�r die Funktion #
20477
- * # iban_gen(). Diese Funktion bestimmt, ob f�r ein angegebenes Konto evl. #
20478
- * # ein Unterkonto weggelassen wurde (betrifft die Methode 13, 26, 50, 63, #
20479
- * # 76 und C7; ansonsten entspricht sie der Funktion kto_check_blz(). #
20480
- * # #
20481
- * # Parameter: #
20482
- * # blz: Bankleitzahl (immer 8-stellig) #
20483
- * # kto: Kontonummer #
20484
- * # uk_cnt: R�ckgabewert: Anzahl weggelassener Unterkontostellen #
20485
- * # #
20486
- * # Copyright (C) 2010 Michael Plugge <m.plugge@hs-mannheim.de> #
20487
- * ###########################################################################
20488
- */
20489
-
20490
- static int kto_check_blz_x(char *blz,char *kto,int *uk_cnt)
20491
- {
20492
- char *ptr,*dptr,xkto[32];
20493
- int i,p1=0,kto_len,pz,fuehrende_nullen;
20494
- int idx,pz_methode,untermethode=0;
20495
- RETVAL *retvals=NULL;
20496
-
20497
- if(!blz || !kto)return MISSING_PARAMETER;
20498
- *uk_cnt=0;
20499
- if(init_status!=7){
20500
- if(init_status&24)INITIALIZE_WAIT;
20501
- if(init_status<7)return LUT2_NOT_INITIALIZED;
20502
- }
20503
- if((idx=lut_index(blz))<0)return idx;
20504
- pz_methode=pz_methoden[idx];
20505
-
20506
- memset(xkto,'0',12);
20507
- for(ptr=kto;*ptr=='0' || *ptr==' ' || *ptr=='\t';ptr++);
20508
- for(kto_len=0;*ptr && *ptr!=' ' && *ptr!='\t';kto_len++,ptr++);
20509
- dptr=xkto+10;
20510
- *dptr--=0;
20511
- if(kto_len<1 || kto_len>10)return INVALID_KTO_LENGTH;
20512
- for(ptr--,i=kto_len;i-->0;*dptr--= *ptr--);
20513
- kto=xkto;
20514
- for(fuehrende_nullen=i=0;i<3;i++)if(kto[i]=='0')fuehrende_nullen++; else break;
20515
-
20516
- switch(pz_methode){
20517
- case 13:
20518
- /* Methode 13a */
20519
- pz =(kto[1]-'0')+(kto[3]-'0')+(kto[5]-'0');
20520
- if(kto[2]<'5')pz+=(kto[2]-'0')*2; else pz+=(kto[2]-'0')*2-9;
20521
- if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20522
- if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20523
- MOD_10_80; /* pz%=10 */
20524
- if(pz)pz=10-pz;
20525
- CHECK_PZX8;
20526
- if(fuehrende_nullen<2)return FALSE; /* Methode 13b nur m�glich, falls 1. und 2. Stelle '0' sind */
20527
-
20528
- /* Methode 13b: 2-stelliges Unterkonto weggelassen */
20529
- *uk_cnt=2;
20530
- pz =(kto[3]-'0')+(kto[5]-'0')+(kto[7]-'0');
20531
- if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20532
- if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20533
- if(kto[8]<'5')pz+=(kto[8]-'0')*2; else pz+=(kto[8]-'0')*2-9;
20534
-
20535
- MOD_10_80; /* pz%=10 */
20536
- if(pz)pz=10-pz;
20537
- CHECK_PZ10;
20538
-
20539
- case 26:
20540
- if(fuehrende_nullen>=2){
20541
- /* Unterkontonummer ausgelassen */
20542
- *uk_cnt=2;
20543
- pz = (kto[2]-'0') * 2
20544
- + (kto[3]-'0') * 7
20545
- + (kto[4]-'0') * 6
20546
- + (kto[5]-'0') * 5
20547
- + (kto[6]-'0') * 4
20548
- + (kto[7]-'0') * 3
20549
- + (kto[8]-'0') * 2;
20550
-
20551
- MOD_11_176; /* pz%=11 */
20552
- if(pz<=1)
20553
- pz=0;
20554
- else
20555
- pz=11-pz;
20556
- CHECK_PZ10;
20557
- }
20558
- else{
20559
- *uk_cnt=-1; /* Unterkonto angegeben */
20560
- pz = (kto[0]-'0') * 2
20561
- + (kto[1]-'0') * 7
20562
- + (kto[2]-'0') * 6
20563
- + (kto[3]-'0') * 5
20564
- + (kto[4]-'0') * 4
20565
- + (kto[5]-'0') * 3
20566
- + (kto[6]-'0') * 2;
20567
-
20568
- MOD_11_176; /* pz%=11 */
20569
- if(pz<=1)
20570
- pz=0;
20571
- else
20572
- pz=11-pz;
20573
- CHECK_PZ8;
20574
- }
20575
-
20576
- case 50:
20577
- /* Methode 50a */
20578
- pz = (kto[0]-'0') * 7
20579
- + (kto[1]-'0') * 6
20580
- + (kto[2]-'0') * 5
20581
- + (kto[3]-'0') * 4
20582
- + (kto[4]-'0') * 3
20583
- + (kto[5]-'0') * 2;
20584
-
20585
- MOD_11_176; /* pz%=11 */
20586
- if(pz<=1)
20587
- pz=0;
20588
- else
20589
- pz=11-pz;
20590
- CHECK_PZX7;
20591
-
20592
- /* Methode 50b
20593
- *
20594
- * es ist eine reale Kontonummer bekannt, bei der rechts nur eine
20595
- * Null weggelassen wurde; daher wird die Berechnung f�r die
20596
- * Methode 50b leicht modifiziert, so da� eine, zwei oder drei
20597
- * Stellen der Unterkontonummer 000 weggelassen werden k�nnen.
20598
- */
20599
- if(kto[0]=='0' && kto[1]=='0' && kto[2]=='0'){
20600
- *uk_cnt=3;
20601
- pz = (kto[3]-'0') * 7
20602
- + (kto[4]-'0') * 6
20603
- + (kto[5]-'0') * 5
20604
- + (kto[6]-'0') * 4
20605
- + (kto[7]-'0') * 3
20606
- + (kto[8]-'0') * 2;
20607
-
20608
- MOD_11_176; /* pz%=11 */
20609
- if(pz<=1)
20610
- pz=0;
20611
- else
20612
- pz=11-pz;
20613
- CHECK_PZ10;
20614
- }
20615
- else if(kto[0]=='0' && kto[1]=='0' && kto[9]=='0'){
20616
- *uk_cnt=2;
20617
- pz = (kto[2]-'0') * 7
20618
- + (kto[3]-'0') * 6
20619
- + (kto[4]-'0') * 5
20620
- + (kto[5]-'0') * 4
20621
- + (kto[6]-'0') * 3
20622
- + (kto[7]-'0') * 2;
20623
-
20624
- MOD_11_176; /* pz%=11 */
20625
- if(pz<=1)
20626
- pz=0;
20627
- else
20628
- pz=11-pz;
20629
- CHECK_PZ9;
20630
- }
20631
- else if(kto[0]=='0' && kto[8]=='0' && kto[9]=='0'){
20632
- *uk_cnt=1;
20633
- pz = (kto[1]-'0') * 7
20634
- + (kto[2]-'0') * 6
20635
- + (kto[3]-'0') * 5
20636
- + (kto[4]-'0') * 4
20637
- + (kto[5]-'0') * 3
20638
- + (kto[6]-'0') * 2;
20639
-
20640
- MOD_11_176; /* pz%=11 */
20641
- if(pz<=1)
20642
- pz=0;
20643
- else
20644
- pz=11-pz;
20645
- CHECK_PZ8;
20646
- }
20647
- return FALSE;
20648
-
20649
- case 63:
20650
- if(*kto!='0')return INVALID_KTO;
20651
- if(*(kto+1)=='0' && *(kto+2)=='0'){ /* wahrscheinlich Unterkonto weggelassen */
20652
- *uk_cnt=2;
20653
- pz=(kto[3]-'0')+(kto[5]-'0')+(kto[7]-'0');
20654
- if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20655
- if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20656
- if(kto[8]<'5')pz+=(kto[8]-'0')*2; else pz+=(kto[8]-'0')*2-9;
20657
- MOD_10_80; /* pz%=10 */
20658
- if(pz)pz=10-pz;
20659
- CHECK_PZX10;
20660
- }
20661
- pz=(kto[1]-'0')+(kto[3]-'0')+(kto[5]-'0');
20662
- if(kto[2]<'5')pz+=(kto[2]-'0')*2; else pz+=(kto[2]-'0')*2-9;
20663
- if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20664
- if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20665
- MOD_10_80; /* pz%=10 */
20666
- if(pz)pz=10-pz;
20667
- CHECK_PZ8;
20668
-
20669
- case 76:
20670
- /* Methode 76a */
20671
- if((p1= *kto)=='1' || p1=='2' || p1=='3' || p1=='5')return INVALID_KTO;
20672
- pz = (kto[1]-'0') * 7
20673
- + (kto[2]-'0') * 6
20674
- + (kto[3]-'0') * 5
20675
- + (kto[4]-'0') * 4
20676
- + (kto[5]-'0') * 3
20677
- + (kto[6]-'0') * 2;
20678
-
20679
- MOD_11_176; /* pz%=11 */
20680
- CHECK_PZX8;
20681
-
20682
- /* Methode 76b */
20683
- if(kto[0]!='0' || kto[1]!='0')return FALSE;
20684
- if((p1=kto[2])=='1' || p1=='2' || p1=='3' || p1=='5')return INVALID_KTO;
20685
- *uk_cnt=2;
20686
- pz = (kto[3]-'0') * 7
20687
- + (kto[4]-'0') * 6
20688
- + (kto[5]-'0') * 5
20689
- + (kto[6]-'0') * 4
20690
- + (kto[7]-'0') * 3
20691
- + (kto[8]-'0') * 2;
20692
-
20693
- MOD_11_176; /* pz%=11 */
20694
- if(pz==10)return INVALID_KTO;
20695
- CHECK_PZ10;
20696
-
20697
- case 127:
20698
- if(*kto=='0'){ /* bei Methode 63 sind 10-stellige Kontonummern falsch */
20699
- if(*(kto+1)=='0' && *(kto+2)=='0'){
20700
-
20701
- /* Methode C7c */
20702
-
20703
- /* wahrscheinlich Unterkonto weggelassen; das kommt wohl eher
20704
- * vor als 7-stellige Nummern (Hinweis T.F.); stimmt auch mit
20705
- * http://www.kontonummern.de/check.php �berein.
20706
- */
20707
- *uk_cnt=2;
20708
- pz=(kto[3]-'0')+(kto[5]-'0')+(kto[7]-'0');
20709
- if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20710
- if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20711
- if(kto[8]<'5')pz+=(kto[8]-'0')*2; else pz+=(kto[8]-'0')*2-9;
20712
- MOD_10_80; /* pz%=10 */
20713
- if(pz)pz=10-pz;
20714
- CHECK_PZX10;
20715
- *uk_cnt=0; /* Bedingung nicht erf�llt, Unterkto. zur�cksetzen */
20716
- }
20717
- /* Methode C7a */
20718
- pz=(kto[1]-'0')+(kto[3]-'0')+(kto[5]-'0');
20719
- if(kto[2]<'5')pz+=(kto[2]-'0')*2; else pz+=(kto[2]-'0')*2-9;
20720
- if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
20721
- if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
20722
- MOD_10_80; /* pz%=10 */
20723
- if(pz)pz=10-pz;
20724
- CHECK_PZX8;
20725
- }
20726
-
20727
- /* Methode C7b */
20728
- /* Variante 2 */
20729
- pz = (kto[0]-'0') * 4
20730
- + (kto[1]-'0') * 3
20731
- + (kto[2]-'0') * 2
20732
- + (kto[3]-'0') * 7
20733
- + (kto[4]-'0') * 6
20734
- + (kto[5]-'0') * 5
20735
- + (kto[6]-'0') * 4
20736
- + (kto[7]-'0') * 3
20737
- + (kto[8]-'0') * 2;
20738
-
20739
- MOD_11_176; /* pz%=11 */
20740
- if(pz<=1)
20741
- pz=0;
20742
- else
20743
- pz=11-pz;
20744
- CHECK_PZ10;
20745
-
20746
- default:
20747
- *uk_cnt=-2;
20748
- #if DEBUG>0
20749
- return kto_check_int(blz,pz_methode,kto,untermethode,NULL);
20750
- #else
20751
- return kto_check_int(blz,pz_methode,kto);
20752
- #endif
20753
- }
20754
- }
20755
-
20756
20533
  /* Funktion kto_check_blz_dbg() +���1 */
20757
20534
  /* ###########################################################################
20758
20535
  * # Die Funktion kto_check_blz_dbg() ist die Debug-Version von #
@@ -20823,6 +20600,7 @@ DLL_EXPORT int kto_check_blz_dbg(char *blz,char *kto,RETVAL *retvals)
20823
20600
  * # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
20824
20601
  * ###########################################################################
20825
20602
  */
20603
+ #line 19356 "ruby/ext/konto_check_raw/konto_check.lxx"
20826
20604
  DLL_EXPORT int kto_check_pz_dbg(char *pz,char *kto,char *blz,RETVAL *retvals)
20827
20605
  {
20828
20606
  int untermethode,pz_methode;
@@ -21058,6 +20836,7 @@ DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char *
21058
20836
  }
21059
20837
  else
21060
20838
  **user_info_p=0;
20839
+ #line 19577 "ruby/ext/konto_check_raw/konto_check.lxx"
21061
20840
  FREE(prolog);
21062
20841
  return OK;
21063
20842
  }
@@ -21193,19 +20972,23 @@ DLL_EXPORT const char *get_kto_check_version_x(int mode)
21193
20972
  return __DATE__ ", " __TIME__; /* Compilierdatum und -zeit */
21194
20973
  case 4: /* Datum der Pr�fziffermethode */
21195
20974
  #if 1
21196
- if(pz_aenderungen_aktivieren)
21197
- return "08.09.2014";
20975
+ if(pz_aenderungen_aktivieren_2015_09)
20976
+ return "07.09.2015";
21198
20977
  else
21199
- return "09.06.2014 (Aenderungen vom 08.09.2014 enthalten aber noch nicht aktiviert)";
20978
+ return "08.06.2015 (Aenderungen vom 07.09.2015 enthalten aber noch nicht aktiviert)";
21200
20979
  #else
21201
- return "08.09.2014";
20980
+ return "07.09.2015";
21202
20981
  #endif
21203
20982
  case 5:
21204
- return "08.09.2014";
20983
+ return "07.09.2015";
21205
20984
  case 6:
21206
- return "1. September 2014"; /* Klartext-Datum der Bibliotheksversion */
20985
+ return "22. August 2015"; /* Klartext-Datum der Bibliotheksversion */
21207
20986
  case 7:
21208
- return "final"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
20987
+ return "final"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
20988
+ case 8:
20989
+ return "5"; /* Hauptversionszahl */
20990
+ case 9:
20991
+ return "8"; /* Unterversionszahl */
21209
20992
  }
21210
20993
  }
21211
20994
 
@@ -21351,6 +21134,7 @@ DLL_EXPORT int dump_lutfile(char *outputname,UINT4 *required)
21351
21134
  default:
21352
21135
  break;
21353
21136
  }
21137
+ #line 19814 "ruby/ext/konto_check_raw/konto_check.lxx"
21354
21138
  fputc('\n',out);
21355
21139
  while(--i)fputc('=',out);
21356
21140
  fputc('\n',out);
@@ -21485,10 +21269,7 @@ DLL_EXPORT int rebuild_blzfile(char *inputname,char *outputname,UINT4 set)
21485
21269
  if(ret<=0)RETURN(ret);
21486
21270
  }
21487
21271
  else /* set-Parameter 1 oder 2: LUT-Datei als Eingabedatei */
21488
- if(set<0) /* set darf nur 0, 1 oder 2 sein; 0 wurde schon behandelt */
21489
- set=1;
21490
- else if(set>2)
21491
- set=2;
21272
+ if(set>2)set=2; /* set darf nur 0, 1 oder 2 sein; 0 wurde schon behandelt, negative Werte gibt es nicht (UINT4 Parameter) */
21492
21273
  if((ret=kto_check_init_p(inputname,9,set,0))<=0)RETURN(ret);
21493
21274
 
21494
21275
  if(!(out=fopen(outputname,"w"))){
@@ -21621,7 +21402,7 @@ DLL_EXPORT const char *iban2bic(char *iban,int *retval,char *blz,char *kto)
21621
21402
  * iban_bic_gen() genommen, ansonsten der aus lut_bic().
21622
21403
  */
21623
21404
  if(retval)*retval=OK;
21624
- if((j=lut_index(blz2))<=0){
21405
+ if((j=lut_index(blz2))<0){
21625
21406
  if(retval)*retval=j;
21626
21407
  return "";
21627
21408
  }
@@ -21678,6 +21459,7 @@ DLL_EXPORT const char *iban2bic_id(char *iban,int *retval,int *blz,int *kto)
21678
21459
  return iban2bic(iban,retval,b,k);
21679
21460
  }
21680
21461
 
21462
+ #line 20139 "ruby/ext/konto_check_raw/konto_check.lxx"
21681
21463
  /* Funktion iban_gen(), iban_bic_gen() und iban_bic_gen1 +���1 */
21682
21464
  /* ###########################################################################
21683
21465
  * # Die Funktion iban_gen generiert aus Bankleitzahl und Kontonummer eine #
@@ -21812,9 +21594,6 @@ DLL_EXPORT char *iban_bic_gen(char *blz,char *kto,const char **bicp,char *blz2,c
21812
21594
  char c,check[128],iban[128],kto_n[16],blz_n[12],*ptr,*dptr;
21813
21595
  const char *bic;
21814
21596
  int j,ret,ret_regel,blz_i,flags,regel;
21815
- #if !USE_IBAN_RULES
21816
- int uk_cnt=-1;
21817
- #endif
21818
21597
  UINT4 zahl,rest;
21819
21598
 
21820
21599
  if(bicp)*bicp=NULL;
@@ -21845,7 +21624,6 @@ DLL_EXPORT char *iban_bic_gen(char *blz,char *kto,const char **bicp,char *blz2,c
21845
21624
  blz_i=b8[I blz[0]]+b7[I blz[1]]+b6[I blz[2]]+b5[I blz[3]]+b4[I blz[4]]+b3[I blz[5]]+b2[I blz[6]]+b1[I blz[7]];
21846
21625
 
21847
21626
  /* BLZ und Kontonummer in eigenen Speicherbereich kopieren, Konto links mit Nullen f�llen */
21848
- #if USE_IBAN_RULES
21849
21627
  for(ptr=blz,dptr=blz_n;(*dptr++=*ptr++););
21850
21628
  for(ptr=kto;*ptr;ptr++); /* Ende von kto suchen */
21851
21629
  ptr--;
@@ -21886,16 +21664,6 @@ DLL_EXPORT char *iban_bic_gen(char *blz,char *kto,const char **bicp,char *blz2,c
21886
21664
  ret_regel=OK;
21887
21665
  }
21888
21666
  if(ret_regel==OK_IBAN_WITHOUT_KC_TEST || ret_regel==OK_KTO_REPLACED_NO_PZ)flags|=1; /* kein Test der Bankverbindung */
21889
- #else
21890
- ret_regel=OK;
21891
- if(!(flags&2) && own_iban){
21892
- /* testen, ob die BLZ in der "Verbotsliste" steht */
21893
- if(bsearch(&blz_i,own_iban,own_iban_cnt,sizeof(int),cmp_int)){
21894
- if(retval)*retval=NO_OWN_IBAN_CALCULATION;
21895
- return NULL;
21896
- }
21897
- }
21898
- #endif
21899
21667
 
21900
21668
  /* IBAN-Regel 0000 00: BLZ durch Nachfolge-BLZ ersetzen, falls eine
21901
21669
  * solche existiert. F�r einige Konten wird die BLZ auch in den
@@ -21934,53 +21702,10 @@ DLL_EXPORT char *iban_bic_gen(char *blz,char *kto,const char **bicp,char *blz2,c
21934
21702
 
21935
21703
  /* erstmal das Konto testen */
21936
21704
  if(!(flags&1)){ /* Test der Bankverbindung */
21937
- #if USE_IBAN_RULES
21938
21705
  if((ret=kto_check_blz(blz,kto))<=0){ /* Konto fehlerhaft */
21939
21706
  if(retval)*retval=ret;
21940
21707
  return NULL;
21941
21708
  }
21942
- #else
21943
- if((ret=kto_check_blz_x(blz,kto,&uk_cnt))<=0){ /* Konto fehlerhaft */
21944
- if(retval)*retval=ret;
21945
- return NULL;
21946
- }
21947
-
21948
- /* bei einigen Methoden (13, 26, 50, 63, 76 und C7) kann u.U. ein
21949
- * Unterkonto weggelassen worden sein. N�heres dazu in der Funktion
21950
- * kto_check_blz_x().
21951
- *
21952
- * *** (alter Code, mit den IBAN-Regeln ist dieser Kommentar nicht mehr aktuell) ***
21953
- * Falls dies der Fall war (uk_cnt>0) wird es hier wieder an der
21954
- * richtigen Stelle eingef�gt; es wird allerdings als Fehler angesehen
21955
- * (mit dem Fehlercode OK_UNTERKONTO_ATTACHED). Falls ein Unterkonto
21956
- * m�glich bzw. angegeben ist, ist das normalerweise ein Zeichen daf�r
21957
- * da� das betreffende Institut einer Selbstberechnung nicht zugestimmt
21958
- * hat; es wird dann nur eine Warnung ausgegeben (OK_UNTERKONTO_POSSIBLE
21959
- * bzw. OK_UNTERKONTO_GIVEN), aber diese Werte sind gr��er als 0 und
21960
- * werden insofern nicht als Fehler gerechnet. Das Ergebnis kann
21961
- * allerdings u.U. falsch sein und sollte mit Vorsicht benutzt werden.
21962
- */
21963
- if(uk_cnt>0){
21964
- for(ptr=kto,dptr=kto_n;(*dptr=*ptr++);dptr++);
21965
- *dptr++='0';
21966
- if(uk_cnt>1)*dptr++='0';
21967
- if(uk_cnt>2)*dptr++='0';
21968
- *dptr=0;
21969
- if((ret=kto_check_blz(blz,kto_n))>0){ /* Unterkonto mu� angeh�ngt werden */
21970
- kto=kto_n;
21971
- ret_regel=OK_UNTERKONTO_ATTACHED;
21972
- }
21973
- }
21974
- else if(!uk_cnt){
21975
- ret_regel=OK_UNTERKONTO_POSSIBLE;
21976
- }
21977
- else if(uk_cnt==-1){
21978
- ret_regel=OK_UNTERKONTO_GIVEN;
21979
- }
21980
- else{ /* uk_cnt==-2 */
21981
- ret_regel=OK;
21982
- }
21983
- #endif
21984
21709
  }
21985
21710
  else
21986
21711
  if(ret_regel!=OK_IBAN_WITHOUT_KC_TEST && ret_regel!=OK_KTO_REPLACED_NO_PZ)ret_regel=LUT2_KTO_NOT_CHECKED;
@@ -22341,7 +22066,7 @@ DLL_EXPORT int iban_check(char *iban,int *retval)
22341
22066
  * falls nicht, Fehlermeldung/Warnung.
22342
22067
  */
22343
22068
  j=lut_index(blz2);
22344
- if(j>0){
22069
+ if(j>=0){
22345
22070
  if((ret=iban_init())<OK)return ret; /* alle notwendigen Blocks kontrollieren, evl. nachladen */
22346
22071
  uk=uk_pz_methoden[pz_methoden[j]];
22347
22072
  nachfolge=nachfolge_blz[startidx[j]];
@@ -22567,6 +22292,7 @@ DLL_EXPORT int ipi_check(char *zweck)
22567
22292
  * # Copyright (C) 2009,2011 Michael Plugge <m.plugge@hs-mannheim.de> #
22568
22293
  * ###########################################################################
22569
22294
  */
22295
+ #line 20972 "ruby/ext/konto_check_raw/konto_check.lxx"
22570
22296
 
22571
22297
  /* Funktion volltext_zeichen() +���2 */
22572
22298
  /* Diese Funktion gibt f�r Zeichen die bei der Volltextsuche g�ltig sind
@@ -23412,6 +23138,7 @@ static int qcmp_bic_h(const void *ap,const void *bp)
23412
23138
  return a-b;
23413
23139
  }
23414
23140
 
23141
+ #line 21818 "ruby/ext/konto_check_raw/konto_check.lxx"
23415
23142
 
23416
23143
  /* Funktion qcmp_bic() +���3 */
23417
23144
  static int qcmp_bic(const void *ap,const void *bp)
@@ -23516,6 +23243,7 @@ static int qcmp_iban_regel(const void *ap,const void *bp)
23516
23243
  else
23517
23244
  return a-b;
23518
23245
  }
23246
+ #line 21833 "ruby/ext/konto_check_raw/konto_check.lxx"
23519
23247
 
23520
23248
  /* Funktion init_blzf() +���2
23521
23249
  * Diese Funktion initialisiert das Array mit den Bankleitzahlen f�r alle
@@ -23583,6 +23311,7 @@ DLL_EXPORT int konto_check_idx2blz(int idx,int *zweigstelle,int *retval)
23583
23311
  }
23584
23312
 
23585
23313
  /* Funktion suche_int1() +���2 */
23314
+ #line 21901 "ruby/ext/konto_check_raw/konto_check.lxx"
23586
23315
  static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
23587
23316
  int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int cnt,int such_idx)
23588
23317
  {
@@ -23633,6 +23362,7 @@ static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstell
23633
23362
  }
23634
23363
 
23635
23364
  /* Funktion suche_int2() +���2 */
23365
+ #line 21952 "ruby/ext/konto_check_raw/konto_check.lxx"
23636
23366
  static int suche_int2(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
23637
23367
  int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int such_idx,int pz_suche)
23638
23368
  {
@@ -24020,6 +23750,7 @@ DLL_EXPORT int lut_suche(int such_id,char *such_cmd,UINT4 *such_cnt,UINT4 **fili
24020
23750
  if(ret==KEY_NOT_FOUND)key_not_found=1;
24021
23751
  }
24022
23752
  for(s=s1=s2=NULL,typ=SUCHE_STD,ptr=such_cmd;*ptr;ptr++){
23753
+
24023
23754
  if(*ptr=='+'){
24024
23755
  if(typ==SUCHE_STD)
24025
23756
  s=lut_suche_multiple_or(s,&s1,NULL);
@@ -24210,6 +23941,7 @@ static int cmp_suche_sort(const void *ap,const void *bp)
24210
23941
  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)
24211
23942
  {
24212
23943
  int i,j,last_idx,*idx_a,*cnt_o;
23944
+ #line 22532 "ruby/ext/konto_check_raw/konto_check.lxx"
24213
23945
 
24214
23946
  if(idx_op)*idx_op=NULL;
24215
23947
  if(cnt_op)*cnt_op=NULL;
@@ -24291,6 +24023,7 @@ DLL_EXPORT int lut_suche_sort2(int anzahl,int *blz,int *zweigstellen,int *anzahl
24291
24023
  return OK;
24292
24024
  }
24293
24025
 
24026
+ #line 22615 "ruby/ext/konto_check_raw/konto_check.lxx"
24294
24027
  /* Funktion lut_suche_volltext() +���2 */
24295
24028
  DLL_EXPORT int lut_suche_volltext(char *such_wort,int *anzahl,int *base_name_idx,char ***base_name,
24296
24029
  int *zweigstellen_anzahl,int **start_idx,int **zweigstellen_base,int **blz_base)
@@ -24420,7 +24153,7 @@ DLL_EXPORT int lut_suche_blz(int such1,int such2,int *anzahl,int **start_idx,int
24420
24153
  return suche_int1(such1,such2,anzahl,start_idx,zweigstellen_base,blz_base,&blz_f,&sort_blz,qcmp_blz,cnt,0);
24421
24154
  }
24422
24155
 
24423
- #line 23085 "konto_check.lxx"
24156
+ #line 22765 "ruby/ext/konto_check_raw/konto_check.lxx"
24424
24157
  /* Funktion lut_suche_bic() +���2 */
24425
24158
  DLL_EXPORT int lut_suche_bic(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
24426
24159
  char ***base_name,int **blz_base)
@@ -24474,6 +24207,7 @@ DLL_EXPORT int lut_suche_pz(int such1,int such2,int *anzahl,int **start_idx,int
24474
24207
  {
24475
24208
  int retval;
24476
24209
 
24210
+
24477
24211
  if(anzahl)*anzahl=0;
24478
24212
  if(such2 && such1>such2)return INVALID_SEARCH_RANGE;
24479
24213
  if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
@@ -24487,6 +24221,7 @@ DLL_EXPORT int lut_suche_pz(int such1,int such2,int *anzahl,int **start_idx,int
24487
24221
  /* Funktion lut_suche_plz() +���2 */
24488
24222
  DLL_EXPORT int lut_suche_plz(int such1,int such2,int *anzahl,int **start_idx,int **zweigstellen_base,int **base_name,int **blz_base)
24489
24223
  {
24224
+
24490
24225
  if(anzahl)*anzahl=0;
24491
24226
  if(such2 && such1>such2)return INVALID_SEARCH_RANGE;
24492
24227
  if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
@@ -24499,6 +24234,7 @@ DLL_EXPORT int lut_suche_plz(int such1,int such2,int *anzahl,int **start_idx,int
24499
24234
  /* Funktion lut_suche_regel() +���2 */
24500
24235
  DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,int **zweigstellen_base,int **base_name,int **blz_base)
24501
24236
  {
24237
+
24502
24238
  if(anzahl)*anzahl=0;
24503
24239
  if(such2 && such1>such2)return INVALID_SEARCH_RANGE;
24504
24240
  if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
@@ -24508,6 +24244,7 @@ DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,i
24508
24244
  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);
24509
24245
  }
24510
24246
 
24247
+ #line 22798 "ruby/ext/konto_check_raw/konto_check.lxx"
24511
24248
 
24512
24249
  /* Funktion lut_suche_bic_h() +���2 */
24513
24250
  DLL_EXPORT int lut_suche_bic_h(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
@@ -24893,6 +24630,7 @@ DLL_EXPORT const char *iban_ort(char *iban,int filiale,int*retval)
24893
24630
  {
24894
24631
  return iban_fkt_s(iban,filiale,retval,lut_ort);
24895
24632
  }
24633
+ #line 22887 "ruby/ext/konto_check_raw/konto_check.lxx"
24896
24634
 
24897
24635
  static int bic_fkt_c(char *bic1,int mode,int filiale,int *retval,char *base,int error)
24898
24636
  {
@@ -25837,7 +25575,7 @@ static int convert_encoding(char **data,UINT4 *len)
25837
25575
  DLL_EXPORT const char *pz2str(int pz,int *ret)
25838
25576
  {
25839
25577
  if(ret){
25840
- if(pz%1000>=142)
25578
+ if(pz%1000>=143)
25841
25579
  *ret=NOT_DEFINED;
25842
25580
  else
25843
25581
  *ret=OK;
@@ -25985,6 +25723,7 @@ DLL_EXPORT const char *pz2str(int pz,int *ret)
25985
25723
  case 139: return "D9";
25986
25724
  case 140: return "E0";
25987
25725
  case 141: return "E1";
25726
+ case 142: return "E2";
25988
25727
  case 1013: return "13a";
25989
25728
  case 1049: return "49a";
25990
25729
  case 1050: return "50a";
@@ -26165,11 +25904,13 @@ DLL_EXPORT const char *pz2str(int pz,int *ret)
26165
25904
  case 5090: return "90e";
26166
25905
  case 5104: return "A4e";
26167
25906
  case 6051: return "51f";
25907
+ case 6087: return "87f";
26168
25908
  case 6090: return "90f";
26169
25909
  case 7090: return "90g";
26170
25910
  default: return "???";
26171
25911
  }
26172
25912
  }
25913
+ #line 23842 "ruby/ext/konto_check_raw/konto_check.lxx"
26173
25914
 
26174
25915
  /* Funktion lut_keine_iban_berechnung() +���1 */
26175
25916
  /*
@@ -26284,7 +26025,7 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
26284
26025
  /* Funktion pz_aenderungen_enable() +���1 */
26285
26026
  /* ###########################################################################
26286
26027
  * # Die Funktion pz_aenderungen_enable() dient dazu, den Status des Flags #
26287
- * # pz_aenderungen_aktivieren abzufragen bzw. zu setzen. Falls die Variable #
26028
+ * # pz_aenderungen_aktivieren_2015_09 abzufragen bzw. zu setzen. Falls die Variable #
26288
26029
  * # set 1 ist, werden die �nderungen aktiviert, falls sie 0 ist, werden #
26289
26030
  * # die �nderungen deaktiviert. Bei allen anderen Werten wird das aktuelle #
26290
26031
  * # Flag nicht ver�ndert, sondern nur der Status zur�ckgegeben. #
@@ -26300,8 +26041,8 @@ DLL_EXPORT int lut_keine_iban_berechnung(char *iban_blacklist,char *lutfile,int
26300
26041
 
26301
26042
  DLL_EXPORT int pz_aenderungen_enable(int set)
26302
26043
  {
26303
- if(set==0 || set==1)pz_aenderungen_aktivieren=set;
26304
- return pz_aenderungen_aktivieren;
26044
+ if(set==0 || set==1)pz_aenderungen_aktivieren_2015_09=set;
26045
+ return pz_aenderungen_aktivieren_2015_09;
26305
26046
  }
26306
26047
 
26307
26048
  #if DEBUG>0
@@ -26333,6 +26074,7 @@ DLL_EXPORT char *kto_check_test_vars(char *txt,UINT4 i)
26333
26074
  #endif
26334
26075
 
26335
26076
 
26077
+ #line 24006 "ruby/ext/konto_check_raw/konto_check.lxx"
26336
26078
  /* Funktionen *_id() +���1 */
26337
26079
  /* ###########################################################################
26338
26080
  * # Die folgenden Funktionen sind die id-Varianten von Funktionen, die #