konto_check 5.5.0 → 5.8.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.
@@ -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 #