konto_check 5.2.1 → 5.3.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.
data/LICENSE CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2010-2011 Peter Horn, Jan Schwenzien, Michael Plugge
1
+ Copyright (c) 2010-2012 Peter Horn, Jan Schwenzien, Michael Plugge
2
+ Copyright (c) 2013 Michael Plugge
2
3
 
3
4
  This program is free software: you can redistribute it and/or modify
4
5
  it under the terms of the GNU General Public License as published by
@@ -16,6 +17,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
  ACKNOWLEDGEMENT
17
18
 
18
19
  This software is entirely based on the C library konto_check
19
- http://www.informatik.hs-mannheim.de/konto_check/
20
20
  http://sourceforge.net/projects/kontocheck/
21
21
  by Michael Plugge.
data/README.textile CHANGED
@@ -4,10 +4,10 @@ Check whether a certain bic/account-no-combination can possibly be valid for a G
4
4
  retrieve certain infos from the blz file and search for banks matching different criteria,
5
5
  convert bic/account into IBAN and BIC, test IBAN or BIC...
6
6
 
7
- It uses the C library konto_check (see http://sourceforge.net/projects/kontocheck/) by
7
+ It uses the C library konto_check available at <a href="http://sourceforge.net/projects/kontocheck" target="_blank">sourceforge</a> by
8
8
  Michael Plugge.
9
9
 
10
- h2. Example
10
+ h2. A few Examples
11
11
 
12
12
  An example tends to tell more than a 1000 words:
13
13
 
@@ -15,23 +15,73 @@ An example tends to tell more than a 1000 words:
15
15
  >> require "konto_check"
16
16
  true
17
17
 
18
+ # initialize the library
18
19
  >> KontoCheck::init
19
20
  1
20
21
 
21
- >> KontoCheck::konto_check("52001","52250030")
22
+ # use UTF-8 encoding
23
+ >> KontoCheck::encoding 'u'
24
+ 2
25
+
26
+ # check a bic/account combination
27
+ >> KontoCheck::konto_check("52250030","52001")
22
28
  true
23
29
 
30
+ # retrieve a bank name
24
31
  >> KontoCheck::bank_name("10010010")
25
32
  "Postbank"
26
33
 
34
+ # search banks with "eifel"
35
+ >> eifel=KontoCheckRaw::bank_suche_volltext 'eifel'
36
+ [["Eifel"],
37
+ [37069303, 37069342, 37069642, 37069720, 39050000, 39550110, 57069067, 57069144, 57650010, 57751310, 57761591, 58650030, 58651240, 58660101, 58661901, 58668818, 58691500, 58751230, 58760954],
38
+ [2, 0, 1, 0, 6, 14, 2, 2, 1, 13, 18, 6, 2, 2, 1, 0, 0, 0, 1],
39
+ 1, 19]
40
+ # show some resuts
41
+ >> b=eifel[1]; f=eifel[2]; maxidx=eifel[4]-1
42
+ >> (10..maxidx).each{|i| printf("%s (Fil.%2d) %s, %s\n",b[i],f[i],KontoCheck::bank_name(b[i],f[i]),KontoCheck::bank_ort(b[i],f[i])) }
43
+ 57761591 (Fil.18) Volksbank RheinAhrEifel, Uersfeld, Eifel
44
+ 58650030 (Fil. 6) Kreissparkasse Bitburg-Prüm, Bettingen, Eifel
45
+ 58651240 (Fil. 2) Kreissparkasse Vulkaneifel, Hillesheim, Eifel
46
+ 58660101 (Fil. 2) Volksbank Bitburg, Bettingen, Eifel
47
+ 58661901 (Fil. 1) Raiffeisenbank Westeifel, Burbach, Eifel
48
+ 58668818 (Fil. 0) Raiffeisenbank Neuerburg-Land -alt-, Neuerburg, Eifel
49
+ 58691500 (Fil. 0) Volksbank Eifel Mitte, Prüm
50
+ 58751230 (Fil. 0) Sparkasse Mittelmosel-Eifel Mosel Hunsrück, Bernkastel-Kues
51
+ 58760954 (Fil. 1) Vereinigte Volksbank Raiffeisenbank, Landscheid, Eifel
52
+
53
+ # test an IBAN
54
+ >> KontoCheck::iban_check "DE03683515573047232594"
55
+ 1
56
+
57
+ # check of an invalid IBAN with correct IBAN checksum
58
+ >> KontoCheck::retval2txt KontoCheck::iban_check 'DE80200500000000101105'
59
+ "Die IBAN-Prüfsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (wahrscheinlich falsch)"
60
+ # extract bic and account from IBAN
61
+ >> KontoCheckRaw::iban2bic 'DE80200500000000101105'
62
+ ["HSHNDEHHXXX", -130, "20050000", "0000101105"]
63
+ # generate the IBAN again using IBAN rules
64
+ >> KontoCheckRaw::iban_gen "20050000", "0000101105"
65
+ ["DE32210500000101105000", "DE32 2105 0000 0101 1050 00", 20, "HSHNDEHHXXX", "21050000", "0101105000", 36]
66
+
67
+ # generate an IBAN using the low-level interface KontoCheckRaw::
27
68
  >> KontoCheckRaw::iban_gen('68351976','1116232594')
28
69
  ["DE03683515573047232594", "DE03 6835 1557 3047 2325 94", 20, "SOLADES1SFH", "68351557", "3047232594", 9]
29
-
70
+ # once again using the high-level interface KontoCheck::
30
71
  >> KontoCheck::iban_gen('68351976','1116232594')
31
72
  "DE03683515573047232594"
32
73
  </pre>
33
74
 
75
+ h2. Data file
76
+
77
+ To use the library, you need (of course) the current Bank Data. KontoCheck uses an own compressed format
78
+ to hold the bank data distributed by the Deutsche Bundesbank. You can generate the file yourself using
79
+ the function KontoCheck::generate_lutfile() or use the file from
80
+ <a href="http://sourceforge.net/projects/kontocheck/files/konto_check-de/5.2/blz.lut2f/download" target="_blank">SourceForge.net</a>.
81
+ For further information have look at
82
+ <a href="http://kontocheck.sourceforge.net/?ausgabe=4&sub=5" target="_blank">this page</a>.
83
+
34
84
  h2. License
35
85
 
36
- Since the original http://www.informatik.hs-mannheim.de/konto_check/ is
86
+ Since the <a href="http://sourceforge.net/projects/kontocheck" target="_blank">original</a> is
37
87
  licensed under LGPL, so is this module.
@@ -13,7 +13,7 @@
13
13
  * # wurden aus der aktuellen BLZ-Datei der Deutschen Bundesbank #
14
14
  * # �bernommen. #
15
15
  * # #
16
- * # Copyright (C) 2002-2013 Michael Plugge <m.plugge@hs-mannheim.de> #
16
+ * # Copyright (C) 2002-2014 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,13 +45,12 @@
45
45
  * # im Internet herunterladen. #
46
46
  * ##########################################################################
47
47
  */
48
- #line 309 "konto_check.lxx"
49
48
 
50
49
  /* Definitionen und Includes */
51
50
  #ifndef VERSION
52
- #define VERSION "5.3 (development)"
51
+ #define VERSION "5.3 (final)"
53
52
  #endif
54
- #define VERSION_DATE "2013-12-06"
53
+ #define VERSION_DATE "2014-03-03"
55
54
 
56
55
  #ifndef INCLUDE_KONTO_CHECK_DE
57
56
  #define INCLUDE_KONTO_CHECK_DE 1
@@ -102,7 +101,7 @@ static lzo_align_t __LZO_MMODEL wrkmem[LZO1X_1_MEM_COMPRESS];
102
101
  #define KONTO_CHECK_VARS
103
102
  #include "konto_check.h"
104
103
 
105
- /* Flag, um die �nderungen zum 9.12.2013 zu aktivieren */
104
+ /* Flag, um die �nderungen zum 3.3.2014 zu aktivieren */
106
105
  static int pz_aenderungen_aktivieren;
107
106
 
108
107
  /* falls die Variable verbose_debug gesetzt wird, werden bei einigen
@@ -240,7 +239,6 @@ static int convert_encoding(char **data,UINT4 *len);
240
239
  #define free(ptr) efree(ptr)
241
240
  #endif
242
241
 
243
- #line 742 "konto_check.lxx"
244
242
 
245
243
  /* Testwert zur Markierung ung�ltiger Ziffern im BLZ-String (>8 Stellen) */
246
244
  #define BLZ_FEHLER 100000000
@@ -376,7 +374,6 @@ static int convert_encoding(char **data,UINT4 *len);
376
374
  */
377
375
  #define CHECK_RETVAL(fkt) do{if((retval=fkt)!=OK)goto fini;}while(0) /* es mu� noch aufger�umt werden, daher goto */
378
376
  #define CHECK_RETURN(fkt) do{if((retval=fkt)!=OK)return retval;}while(0)
379
- #line 883 "konto_check.lxx"
380
377
 
381
378
  /* einige Makros zur Umwandlung zwischen unsigned int und char */
382
379
  #define UCP (unsigned char*)
@@ -496,7 +493,6 @@ int pz=-777;
496
493
 
497
494
  #define E_START(x)
498
495
  #define E_END(x)
499
- #line 1008 "konto_check.lxx"
500
496
 
501
497
  /* Variable f�r die Methoden 27, 29 und 69 */
502
498
  static const int m10h_digits[4][10]={
@@ -578,19 +574,19 @@ static unsigned char ee[500],*eeh,*eep,eec[]={
578
574
  0xb3,0xa2,0xf4,0x0f,0x7e,0xb5,0x0a,0xdd,0x54,0xfb,0x74,0x56,0xf5,
579
575
  0x16,0x5a,0x53,0x14,0x3d,0xd8,0xbd,0x00,0x8b,0x59,0x95,0x67,0x00
580
576
  };
581
- #define EE 26
577
+ #define EE 27
582
578
 
583
579
  /* Arrays f�r die Felder der LUT-Datei u.a. */
584
580
  static char *lut_prolog,*lut_sys_info,*lut_user_info;
585
581
  static char **name,**name_kurz,**ort,*name_data,*name_name_kurz_data,*name_kurz_data,
586
- *ort_data,**bic,*bic_buffer,*aenderung,*loeschung,**volltext,*volltext_data;
587
- static int lut_version,*blz,*startidx,*plz,*filialen,*pan,*pz_methoden,*bank_nr,*nachfolge_blz,
582
+ *ort_data,**bic,**bic_h,*bic_buffer,*aenderung,*loeschung,**volltext,*volltext_data;
583
+ static int lut_version,*blz,*startidx,*hs_idx,*plz,*filialen,*pan,*pz_methoden,*bank_nr,*nachfolge_blz,
588
584
  *own_iban,own_iban_cnt,vt_cnt,vt_cnt_uniq,*volltext_banken,*volltext_start,*iban_regel,
589
585
  extra_init_done;
590
586
  static volatile int init_status,init_in_progress;
591
587
 
592
588
  /* Arrays f�r die Suche nach verschiedenen Feldern */
593
- static int *blz_f,*pz_f,*zweigstelle_f,*zweigstelle_f1,*sort_volltext,*sort_bic,*sort_name,*sort_name_kurz,*sort_ort,*sort_blz,*sort_pz_f,*sort_plz,*sort_iban_regel;
589
+ static int *blz_f,*pz_f,*zweigstelle_f,*zweigstelle_f1,*sort_volltext,*sort_bic,*sort_name,*sort_name_kurz,*sort_ort,*sort_blz,*sort_pz_f,*sort_plz,*sort_iban_regel,*sort_bic_h;
594
590
 
595
591
  /* Arrays zur Umwandlung von ASCII nach Zahlen */
596
592
  static unsigned int b0[256],b1[256],b2[256],b3[256],b4[256],b5[256],b6[256],b7[256],b8[256],
@@ -677,6 +673,15 @@ static int qcmp_sorti(const void *ap,const void *bp);
677
673
  static int iban_init(void);
678
674
  static int iban_regel_cvt(char *blz,char *kto,const char **bic,int regel_version);
679
675
  static const char *lut_bic_int(char *b,int zweigstelle,int *retval);
676
+ static int bic_fkt_c(char *bic1,int mode,int filiale,int*retval,char *base);
677
+ static int biq_fkt_c(int idx,int*retval,char *base);
678
+ static int iban_fkt_c(char *iban,int filiale,int *retval,int(*fkt)(char*,int,int*));
679
+ static int bic_fkt_i(char *bic1,int mode,int filiale,int*retval,int *base);
680
+ static int biq_fkt_i(int idx,int*retval,int *base);
681
+ static int iban_fkt_i(char *iban,int filiale,int *retval,int(*fkt)(char*,int,int*));
682
+ static const char *bic_fkt_s(char *bic1,int mode,int filiale,int*retval,char **base);
683
+ static const char *biq_fkt_s(int idx,int*retval,char **base);
684
+ static const char *iban_fkt_s(char *iban,int filiale,int *retval,const char*(*fkt)(char*,int,int*));
680
685
  #if DEBUG>0
681
686
  static int kto_check_int(char *x_blz,int pz_methode,char *kto,int untermethode,RETVAL *retvals);
682
687
  #else
@@ -920,7 +925,6 @@ static int create_lutfile_int(char *name, char *prolog, int slots,FILE **lut)
920
925
  * ###########################################################################
921
926
  */
922
927
 
923
- #line 1432 "konto_check.lxx"
924
928
  DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
925
929
  {
926
930
  char buffer[SLOT_BUFFER],*ptr;
@@ -958,7 +962,6 @@ DLL_EXPORT int write_lut_block(char *lutname,UINT4 typ,UINT4 len,char *data)
958
962
  * #############################################################################
959
963
  */
960
964
 
961
- #line 1470 "konto_check.lxx"
962
965
  static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
963
966
  {
964
967
  char buffer[SLOT_BUFFER],*ptr,*cptr;
@@ -1094,7 +1097,6 @@ static int write_lut_block_int(FILE *lut,UINT4 typ,UINT4 len,char *data)
1094
1097
  * ###########################################################################
1095
1098
  */
1096
1099
 
1097
- #line 1606 "konto_check.lxx"
1098
1100
  DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **data)
1099
1101
  {
1100
1102
  int retval;
@@ -1117,7 +1119,6 @@ DLL_EXPORT int read_lut_block(char *lutname, UINT4 typ,UINT4 *blocklen,char **da
1117
1119
  * ###########################################################################
1118
1120
  */
1119
1121
 
1120
- #line 1630 "konto_check.lxx"
1121
1122
  DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
1122
1123
  {
1123
1124
  int retval;
@@ -1139,7 +1140,6 @@ DLL_EXPORT int read_lut_slot(char *lutname,int slot,UINT4 *blocklen,char **data)
1139
1140
  * ###########################################################################
1140
1141
  */
1141
1142
 
1142
- #line 1653 "konto_check.lxx"
1143
1143
  static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **data)
1144
1144
  {
1145
1145
  char buffer[SLOT_BUFFER],*ptr,*sbuffer,*dbuffer;
@@ -1229,7 +1229,6 @@ static int read_lut_block_int(FILE *lut,int slot,int typ,UINT4 *blocklen,char **
1229
1229
  FREE(sbuffer);
1230
1230
  RETURN(ERROR_MALLOC);
1231
1231
  }
1232
- #line 1758 "konto_check.lxx"
1233
1232
 
1234
1233
  if(fread(sbuffer,1,compressed_len,lut)<compressed_len){
1235
1234
  FREE(sbuffer);
@@ -1570,8 +1569,8 @@ static int lut_dir(FILE *lut,int id,UINT4 *slot_cnt,UINT4 *typ,UINT4 *len,
1570
1569
  static int write_lutfile_entry_de(UINT4 typ,int auch_filialen,int bank_cnt,char *out_buffer,
1571
1570
  FILE *lut,UINT4 set,int add_idx)
1572
1571
  {
1573
- char *ptr,*zptr,*dptr,*name_hauptstelle=NULL,*name_start=NULL,*data,*data_idx,**sortc_buf1,**sortc_buf2;
1574
- int cnt,i,j,k,max,b,prev_blz,diff,hs,retval,*iptr;
1572
+ char *ptr,*zptr,*bptr,*dptr,*name_hauptstelle=NULL,*name_start=NULL,*data,*data_idx,**sortc_buf1,**sortc_buf2;
1573
+ int cnt,i,j,k,max,b,prev_blz,diff,hs,retval,qs_hs,*iptr;
1575
1574
 
1576
1575
  if(set==2)typ+=SET_OFFSET; /* sekund�res Set schreiben */
1577
1576
 
@@ -1867,7 +1866,7 @@ static int write_lutfile_entry_de(UINT4 typ,int auch_filialen,int bank_cnt,char
1867
1866
  CHECK_RETURN(write_lut_block_int(lut,typ,dptr-data,data));
1868
1867
 
1869
1868
  /* Index-Block f�r BIC generieren. Die BICs werden noch einmal neu
1870
- * eingelesen, da sich die obige Version sich zum Sortieren eignet.
1869
+ * eingelesen, da sich die obige Version nicht zum Sortieren eignet.
1871
1870
  */
1872
1871
  if(add_idx){
1873
1872
  for(i=j=0,dptr=data;i<bank_cnt;i++)if(auch_filialen || qs_hauptstelle[qs_sortidx[i]]=='1'){
@@ -1883,6 +1882,28 @@ static int write_lutfile_entry_de(UINT4 typ,int auch_filialen,int bank_cnt,char
1883
1882
  UI2C(j,dptr);
1884
1883
  for(i=0;i<j;i++)UI2C(iptr[i],dptr);
1885
1884
  CHECK_RETURN(write_lut_block_int(lut,LUT2_BIC_SORT+(typ-LUT2_BIC),dptr-data_idx,data_idx));
1885
+
1886
+ /* nun nochmal fast dasselbe, nur die BICs der Nebenstellen mit denen der Hauptstelle f�llen */
1887
+ for(i=j=0,bptr=dptr=data;i<bank_cnt;i++){
1888
+ qs_hs=qs_hauptstelle[qs_sortidx[i]]=='1'?1:0; /* Kennzeichen Haupt/Nebenstelle */
1889
+ if(auch_filialen || qs_hs){
1890
+ zptr=qs_zeilen[qs_sortidx[i]];
1891
+ sortc_buf1[j++]=dptr;
1892
+ if(qs_hs) /* Hauptstelle */
1893
+ for(bptr=ptr=zptr+139;ptr<zptr+150;)*dptr++=*ptr++;
1894
+ else /* Nebenstelle */
1895
+ /* bptr wird bei der vorhergehenden HS gesetzt, die kommen *immer* vor den Nebenstellen */
1896
+ for(ptr=bptr;ptr<bptr+11;)*dptr++=*ptr++;
1897
+ *dptr++=0;
1898
+ }
1899
+ }
1900
+ data_idx=dptr;
1901
+ sortc_buf=sortc_buf1;
1902
+ for(i=0;i<j;i++)iptr[i]=i; /* Index-Array initialisieren */
1903
+ qsort(iptr,j,sizeof(int),qcmp_sortc);
1904
+ UI2C(j,dptr);
1905
+ for(i=0;i<j;i++)UI2C(iptr[i],dptr);
1906
+ CHECK_RETURN(write_lut_block_int(lut,LUT2_BIC_H_SORT+(typ-LUT2_BIC),dptr-data_idx,data_idx));
1886
1907
  }
1887
1908
  break;
1888
1909
 
@@ -2746,7 +2767,6 @@ DLL_EXPORT int lut_info_b(char *lut_name,char **info1,char **info2,int *valid1,i
2746
2767
  * ###########################################################################
2747
2768
  */
2748
2769
 
2749
- #line 3275 "konto_check.lxx"
2750
2770
  DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int *valid2)
2751
2771
  {
2752
2772
  char *ptr,*ptr1,buffer[128];
@@ -2834,7 +2854,6 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
2834
2854
 
2835
2855
  /* Infoblocks lesen: 1. Infoblock */
2836
2856
  if((ret=read_lut_block_int(in,0,LUT2_INFO,&cnt,&ptr))==OK){
2837
- #line 3364 "konto_check.lxx"
2838
2857
  *(ptr+cnt)=0;
2839
2858
  if(valid1){
2840
2859
  for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
@@ -2882,7 +2901,6 @@ DLL_EXPORT int lut_info(char *lut_name,char **info1,char **info2,int *valid1,int
2882
2901
 
2883
2902
  /* Infoblocks lesen: 2. Infoblock */
2884
2903
  if((ret=read_lut_block_int(in,0,LUT2_2_INFO,&cnt,&ptr))==OK){
2885
- #line 3413 "konto_check.lxx"
2886
2904
  *(ptr+cnt)=0;
2887
2905
  if(valid2){
2888
2906
  for(ptr1=ptr,v1=v2=0;*ptr1 && *ptr1!='\n' && !isdigit(*ptr1);ptr1++);
@@ -3101,7 +3119,6 @@ DLL_EXPORT int copy_lutfile(char *old_name,char *new_name,int new_slots)
3101
3119
  qsort(slotdir,slot_cnt,sizeof(int),cmp_int);
3102
3120
  for(last_slot=-1,i=0;i<(int)slot_cnt;i++)if((typ=slotdir[i]) && typ!=(UINT4)last_slot){
3103
3121
  read_lut_block_int(lut1,0,typ,&len,&data);
3104
- #line 3633 "konto_check.lxx"
3105
3122
  write_lut_block_int(lut2,typ,len,data);
3106
3123
  FREE(data);
3107
3124
  last_slot=typ;
@@ -3330,11 +3347,10 @@ DLL_EXPORT int lut_init(char *lut_name,int required,int set)
3330
3347
  * # Copyright (C) 2008 Michael Plugge <m.plugge@hs-mannheim.de> #
3331
3348
  * ###########################################################################
3332
3349
  */
3333
- #line 3862 "konto_check.lxx"
3334
3350
  DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,int incremental)
3335
3351
  {
3336
3352
  char *ptr,*dptr,*data,*eptr,*prolog,*info,*user_info,*hs=NULL,*info1,*info2,*ci=NULL,name_buffer[LUT_PATH_LEN];
3337
- int b,h,i,j,k,v1,v2,retval,release_data,alles_ok,slotdir[MAX_SLOTS],*iptr,*rptr,xrequired[MAX_SLOTS],own_iban_2;
3353
+ int b,h,i,j,k,x,y,v1,v2,retval,release_data,alles_ok,slotdir[MAX_SLOTS],*iptr,*rptr,xrequired[MAX_SLOTS],own_iban_2;
3338
3354
  UINT4 len,typ,typ1,slot_cnt;
3339
3355
  FILE *lut;
3340
3356
  struct stat s_buf;
@@ -3558,7 +3574,6 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3558
3574
  typ1=typ;
3559
3575
  if(lut2_block_status[typ]==OK)continue; /* jeden Block nur einmal einlesen */
3560
3576
  retval=read_lut_block_int(lut,0,typ,&len,&data);
3561
- #line 4091 "konto_check.lxx"
3562
3577
 
3563
3578
  switch(retval){
3564
3579
  case LUT_CRC_ERROR:
@@ -3646,7 +3661,6 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3646
3661
  if(typ==LUT2_2_NAME || typ==LUT2_2_NAME_KURZ){
3647
3662
  FREE(data);
3648
3663
  i=read_lut_block_int(lut,0,LUT2_2_NAME_NAME_KURZ,&len,&data);
3649
- #line 4183 "konto_check.lxx"
3650
3664
  if(i==OK){ /* was gefunden; Typ �ndern, dann weiter wie bei OK */
3651
3665
  typ=LUT2_2_NAME_NAME_KURZ;
3652
3666
  typ1=LUT2_NAME_NAME_KURZ;
@@ -3712,7 +3726,8 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3712
3726
  FREE(blz);
3713
3727
  FREE(hash);
3714
3728
  if(!(blz=calloc(lut2_cnt_hs+1,sizeof(int)))
3715
- || (!startidx && !(startidx=calloc(lut2_cnt_hs,sizeof(int))))
3729
+ || (!startidx && !(startidx=calloc(lut2_cnt_hs,sizeof(int)))) /* Index der Hauptstelle in den gro�en Arrays */
3730
+ || (!hs_idx && !(hs_idx=calloc(lut2_cnt,sizeof(int)))) /* reziprok zu startidx */
3716
3731
  || !(hash=calloc(sizeof(short),HASH_BUFFER_SIZE)))
3717
3732
  lut2_block_status[typ]=lut2_block_status[typ1]=ERROR_MALLOC;
3718
3733
  else{
@@ -3755,13 +3770,14 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3755
3770
  case LUT2_2_FILIALEN:
3756
3771
  release_data=1;
3757
3772
  FREE(filialen);
3758
- if(!(filialen=calloc(len,sizeof(int)))
3759
- || (!startidx && !(startidx=calloc(lut2_cnt_hs,sizeof(int)))))
3773
+ if(!(filialen=calloc(len,sizeof(int))))
3760
3774
  lut2_block_status[typ]=lut2_block_status[typ1]=ERROR_MALLOC;
3761
3775
  else{
3762
- for(i=j=0,ptr=data,eptr=data+len;i<(int)len;i++){
3763
- startidx[i]+=j;
3764
- j+=(filialen[i]=UI *ptr++)-1;
3776
+ for(i=j=x=0,ptr=data,eptr=data+len;i<(int)len;i++){
3777
+ startidx[i]+=j; /* j ist nur ein Inkrement, startidx[] wurde oben mit i initialisiert */
3778
+ filialen[i]=UI *ptr++;
3779
+ for(y=0;y<filialen[i];y++)hs_idx[x++]=startidx[i]; /* Hauptstellen-Index f�r alle Filialen der Bank setzen */
3780
+ j+=filialen[i]-1;
3765
3781
  }
3766
3782
  }
3767
3783
  break;
@@ -3791,6 +3807,9 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3791
3807
  *
3792
3808
  * Diese Daten �ndern sich weniger oft und k�nnen daher �ber einen
3793
3809
  * l�ngeren Zeitraum benutzt werden.
3810
+ *
3811
+ * Aktuell (zum M�rz 2014) ist die Ausschlu�liste leer, der Block
3812
+ * wird nicht weiter verwendet.
3794
3813
  */
3795
3814
  case LUT2_OWN_IBAN:
3796
3815
  case LUT2_2_OWN_IBAN:
@@ -3964,8 +3983,10 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3964
3983
  case LUT2_2_BIC:
3965
3984
  release_data=1;
3966
3985
  FREE(bic);
3986
+ FREE(bic_h);
3967
3987
  FREE(bic_buffer);
3968
- if(!(bic_buffer=calloc(lut2_cnt+10,12)) || !(bic=calloc(lut2_cnt+10,sizeof(char*)))){
3988
+ if(!(bic_buffer=calloc(lut2_cnt+10,12)) || !(bic=calloc(lut2_cnt+10,sizeof(char*)))
3989
+ || !(bic_h=calloc(lut2_cnt+10,sizeof(char*)))){
3969
3990
  lut2_block_status[typ]=lut2_block_status[typ1]=ERROR_MALLOC;
3970
3991
  }
3971
3992
  else{
@@ -3995,16 +4016,18 @@ DLL_EXPORT int kto_check_init(char *lut_name,int *required,int **status,int set,
3995
4016
  }
3996
4017
  bic_buffer=realloc(bic_buffer,(size_t)(dptr-bic_buffer)+10);
3997
4018
 
3998
- /* die Schleife darf erst ab 1 laufen; die Bundesbank hat
3999
- * einen BIC, aber bic[0] ist 0 da der Offset 0 ist. bic[0]
4000
- * mu� manuell gesetzt werden.
4019
+ /* die Schleife darf erst ab 1 laufen, da der Offset f�r die
4020
+ * Bundesbank (in bic[0]) 0 ist. bic[0] und bic_h[0] mu�
4021
+ * manuell auf den Anfang von bic_buffer gesetzt werden.
4001
4022
  */
4002
- bic[0]=bic_buffer;
4003
- for(j=1;j<i;j++)
4023
+ bic[0]=bic_h[0]=bic_buffer;
4024
+ for(j=1;j<i;j++){
4004
4025
  if(!bic[j]) /* Leerstring */
4005
4026
  bic[j]=(char*)" ";
4006
4027
  else /* Adresse anpassen */
4007
4028
  bic[j]=(char*)(bic_buffer+(unsigned long)bic[j]);
4029
+ bic_h[j]=bic[hs_idx[j]];
4030
+ }
4008
4031
  }
4009
4032
  break;
4010
4033
 
@@ -4191,7 +4214,6 @@ DLL_EXPORT int lut_blocks(int mode,char **lut_filename,char **lut_blocks_ok,char
4191
4214
  * ###########################################################################
4192
4215
  */
4193
4216
 
4194
- #line 4728 "konto_check.lxx"
4195
4217
  DLL_EXPORT const char *current_lutfile_name(int *set,int *level,int *retval)
4196
4218
  {
4197
4219
  if(init_status<7 || !current_lutfile){
@@ -4354,6 +4376,17 @@ DLL_EXPORT int lut_blz(char *b,int zweigstelle)
4354
4376
  return OK;
4355
4377
  }
4356
4378
 
4379
+ DLL_EXPORT int lut_blz_i(int b,int zweigstelle)
4380
+ {
4381
+ int idx;
4382
+
4383
+ if(!blz)RETURN(LUT2_BLZ_NOT_INITIALIZED);
4384
+ if((idx=lut_index_i(b))<0)return idx;
4385
+ if(zweigstelle<0 || (filialen && zweigstelle>=filialen[idx]) || (zweigstelle && !filialen))
4386
+ RETURN(LUT2_INDEX_OUT_OF_RANGE);
4387
+ return OK;
4388
+ }
4389
+
4357
4390
  /* Funktion lut_filialen() +���2 */
4358
4391
  /* ###########################################################################
4359
4392
  * # lut_filialen(): Anzahl der Filialen zu einer gegebenen Bankleitzahl #
@@ -4598,7 +4631,7 @@ DLL_EXPORT const char *lut_bic(char *b,int zweigstelle,int *retval)
4598
4631
  strcpy(blz2,b);
4599
4632
  strcpy(kto2,"13"); /* nur Dummy f�r Funktionsaufruf */
4600
4633
  iban_regel_cvt(blz2,kto2,&bic_neu,regel); /* R�ckgabewert egal, nur bic_neu interessiert */
4601
- if(bic && bic_neu && strcmp(bic,bic_neu))*retval=OK_INVALID_FOR_IBAN; /* BIC wurde durch eine Regel ge�ndert */
4634
+ if(bic && bic_neu && strcasecmp(bic,bic_neu))*retval=OK_INVALID_FOR_IBAN; /* BIC wurde durch eine Regel ge�ndert */
4602
4635
  }
4603
4636
  }
4604
4637
  /* R�ckgabe ist immer der BIC aus der LUT-Datei, nicht der durch Regeln modifizierte Wert.
@@ -4633,9 +4666,38 @@ static const char *lut_bic_int(char *b,int zweigstelle,int *retval)
4633
4666
  return bic[startidx[idx]+zweigstelle];
4634
4667
  }
4635
4668
 
4669
+ /* Die Funktion lut_bic_h() entspricht der Funktion lut_bic(), nur wird
4670
+ * anstelle des individuellen BICs der BIC der Hauptstelle zur�ckgeliefert.
4671
+ * Die Funktion steht in Zusammenhang mit der Funktionsgruppe bic_name(),
4672
+ * bic_kurzname(), bic_ort()... die ebenfalls den BIC der Hauptstelle benutzen.
4673
+ */
4674
+ DLL_EXPORT const char *lut_bic_h(char *b,int zweigstelle,int *retval)
4675
+ {
4676
+ int idx,force_old,blz_i;
4677
+
4678
+ if(!bic_h)INVALID_C(LUT2_BIC_NOT_INITIALIZED);
4679
+ if(*b=='!'){
4680
+ b++;
4681
+ force_old=1;
4682
+ }
4683
+ if((idx=lut_index(b))<0)INVALID_C(idx);
4684
+ CHECK_OFFSET_S;
4685
+
4686
+ /* falls eine Nachfolge-BLZ eingetragen ist, wird diese benutzt */
4687
+ if(!nachfolge_blz && !force_old)INVALID_C(LUT2_NACHFOLGE_BLZ_NOT_INITIALIZED);
4688
+ if((blz_i=lut_nachfolge_blz(b,0,NULL))){
4689
+ if((idx=lut_index_i(blz_i))<0)INVALID_C(idx);
4690
+ if(retval)*retval=OK_NACHFOLGE_BLZ_USED;
4691
+ }
4692
+ else
4693
+ if(retval)*retval=OK;
4694
+ return bic_h[startidx[idx]+zweigstelle];
4695
+ }
4696
+
4636
4697
  /* Die Funktion lut_bic_i() (mit Integer-Wert f�r die BLZ) bietet bei Verwendung der
4637
4698
  * IBAN-Regeln keinen Vorteil mehr. Daher wird die BLZ in einen String umgewandelt
4638
- * und dann die Funktion lut_bic() aufgerufen.
4699
+ * und dann die Funktion lut_bic() aufgerufen. Die Funktion lut_bic_hi() entspricht
4700
+ * lut_bic_h().
4639
4701
  */
4640
4702
  DLL_EXPORT const char *lut_bic_i(int b,int zweigstelle,int *retval)
4641
4703
  {
@@ -4654,6 +4716,23 @@ DLL_EXPORT const char *lut_bic_i(int b,int zweigstelle,int *retval)
4654
4716
  #endif
4655
4717
  }
4656
4718
 
4719
+ DLL_EXPORT const char *lut_bic_hi(int b,int zweigstelle,int *retval)
4720
+ {
4721
+ #if !USE_IBAN_RULES
4722
+ int idx;
4723
+
4724
+ if(!bic_h)INVALID_C(LUT2_BIC_NOT_INITIALIZED);
4725
+ if((idx=lut_index_i(b))<0)INVALID_C(idx);
4726
+ CHECK_OFFSET_S;
4727
+ return bic_h[startidx[idx]+zweigstelle];
4728
+ #else
4729
+ char b_a[9];
4730
+
4731
+ snprintf(b_a,9,"%08d",b);
4732
+ return lut_bic_h(b_a,zweigstelle,retval);
4733
+ #endif
4734
+ }
4735
+
4657
4736
  /* Funktion lut_nr() +���2 */
4658
4737
  /* ###########################################################################
4659
4738
  * # lut_nr(): Nummer des Datensatzes in der BLZ-Datei #
@@ -4910,7 +4989,6 @@ static int iban_init(void)
4910
4989
  * ###########################################################################
4911
4990
  */
4912
4991
 
4913
- #line 5447 "konto_check.lxx"
4914
4992
  #if USE_IBAN_RULES
4915
4993
  static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_version)
4916
4994
  {
@@ -5051,11 +5129,12 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
5051
5129
  if((idx=lut_index(blz))<0)return idx;
5052
5130
  pz_methode=pz_methoden[idx];
5053
5131
 
5054
- /* comdirect bank beh�lt wohl ihren BIC (Beispiel und Vergleich mit
5055
- * SEPA Account Converter und VR Iban Konverter); alle anderen BLZs
5056
- * der Commerzbank bekommen COBADEFFXXX.
5132
+ /* comdirect bank beh�lt ihren BIC (Beispiel und Vergleich mit SEPA
5133
+ * Account Converter und VR Iban Konverter, sowie Anmerkung 6 in der
5134
+ * IBAN-Regel 5 auf S. 14); alle anderen BLZs der Commerzbank
5135
+ * bekommen COBADEFFXXX.
5057
5136
  */
5058
- if(blz[3]=='4' && strcmp(lut_name(blz,0,NULL),"comdirect bank"))*bicp="COBADEFFXXX";
5137
+ if(blz[3]=='4' && strcasecmp(lut_name(blz,0,NULL),"comdirect bank"))*bicp="COBADEFFXXX";
5059
5138
 
5060
5139
  /* BLZs ohne Pr�fzifferberechnung */
5061
5140
  if(pz_methode==9)return OK_NO_CHK;
@@ -5792,10 +5871,9 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
5792
5871
  * die Bundesbank hat jedoch schon die Regelversion am 28. August ver�ffentlicht, mit der Bitte, sie
5793
5872
  * m�glichst schon zum 9. September einzusetzen. Der Best Guess Ansatz mit dem Fehlercode 51 bzw.
5794
5873
  * IBAN_AMBIGUOUS_KTO wird entfernt und durch Verfahren zur Ermittlung eindeutiger IBANs ersetzt.
5874
+ * Die alte Version ist jetzt (9.12.13) nicht mehr im Code enthalten, da sie ung�ltig ist.
5795
5875
  */
5796
5876
 
5797
- #if DB_NEUE_VERSION>0
5798
-
5799
5877
  /* BLZ ohne IBAN-Berechnung */
5800
5878
  if(b==10020000)return NO_IBAN_CALCULATION;
5801
5879
 
@@ -5867,130 +5945,6 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
5867
5945
  /* alle restlichen Konten (8- bis 9-stellig) nur mit Methode 63a pr�fen */
5868
5946
  return kto_check_pz("63a",kto,NULL);
5869
5947
 
5870
- #else
5871
- /* Deutsche Bank AG (alte Version mit IBAN_AMBIGUOUS_KTO) */
5872
-
5873
- /* BLZ ohne IBAN-Berechnung */
5874
- if(b==10020000)return NO_IBAN_CALCULATION;
5875
-
5876
- /* Spendenkontonummer */
5877
- if(b==50070010 && k1==0 && k2==9999){
5878
- strcpy(kto,"0092777202");
5879
- RETURN_OK_KTO_REPLACED;
5880
- }
5881
-
5882
- /* Pr�fziffermethode holen */
5883
- if((idx=lut_index(blz))<0)return idx;
5884
- pz_methode=pz_methoden[idx];
5885
-
5886
- /* Pr�fzifferverfahren 09 (Deutsche Bank GF intern) */
5887
- if(pz_methode==9)return OK_NO_CHK;
5888
-
5889
- /* 10-stellige Konten sind ung�ltig */
5890
- if(*kto!='0')return INVALID_KTO;
5891
-
5892
- /* Pr�fzifferverfahren 63 (Deutsche Bank) */
5893
- if(pz_methode==63){
5894
- char kto2[12];
5895
- int v,v1,v2,v3;
5896
-
5897
- v=v1=v2=v3=0;
5898
- /* drei Nullen links: Test mit weggelassenem Unterkonto (s.Beispiel) */
5899
- if(*kto=='0' && kto[1]=='0' && kto[2]=='0'){
5900
- if(kto_check_pz("63b",kto,NULL)==OK){
5901
- v++;
5902
- v2=1;
5903
- }
5904
- }
5905
- if(*kto=='0' && (kto[1]!='0' || kto[2]!='0' || kto[3]!='0')){
5906
- if(kto_check_pz("63a",kto,NULL)==OK){
5907
- v++;
5908
- v1=1;
5909
- }
5910
- }
5911
- /* drei Nullen rechtsb�ndig, 1. Stelle != 0: falsche Eingabe (0 rechts vom Kunden erg�nzt) */
5912
- if(*kto!='0' && kto[7]=='0' && kto[8]=='0' && kto[9]=='0'){
5913
- for(i=0;i<9;i++)kto2[i+1]=kto[i];
5914
- *kto2='0';
5915
- kto2[10]=0;
5916
- if(kto_check_pz("63a",kto2,NULL)==OK){
5917
- v++;
5918
- v3=1;
5919
- }
5920
- }
5921
- if(!v)return INVALID_KTO; /* Konto ung�ltig */
5922
- if(v==1){ /* ein g�ltiges Konto gefunden, dieses zur�ckgeben */
5923
- if(v2){ /* Konto zwei Stellen nach links schieben, Nullen rechts erg�nzen */
5924
- for(i=0;i<8;i++)kto[i]=kto[i+2];
5925
- kto[8]='0';
5926
- kto[9]='0';
5927
- return OK_UNTERKONTO_ATTACHED;
5928
- }
5929
- if(v3){ /* Konto eine Stelle nach rechts, Null links erg�nzen */
5930
- for(i=9;i>0;i--)kto[i]=kto[i-1];
5931
- *kto='0';
5932
- }
5933
- if(v1)
5934
- RETURN_OK;
5935
- else
5936
- RETURN_OK_KTO_REPLACED;
5937
- }
5938
- if(v>1){
5939
- /* mehrere m�gliche Kontonummern gefunden, Fehlermeldung.
5940
- * Falls v1 gesetzt ist, wird dieses genommen; falls v2 oder v3
5941
- * gesetzt ist, wird v2 genommen.
5942
- */
5943
- if(!v1 && v2){
5944
- for(i=0;i<8;i++)kto[i]=kto[i+2];
5945
- kto[8]='0';
5946
- kto[9]='0';
5947
- }
5948
- return IBAN_AMBIGUOUS_KTO;
5949
- }
5950
- }
5951
-
5952
- /* Pr�fzifferverfahren C7 (Norisbank) */
5953
- if(pz_methode==127){
5954
-
5955
- /* die erste Stelle mu� immer 0 sein */
5956
- if(*kto!='0')return FALSE;
5957
- if(kto[1]=='0' && kto[2]=='0'){
5958
-
5959
- /* Falls die Kontonummer mit drei Nullen beginnt und zwei
5960
- * Nullen am Ende hat, enth�lt sie das Unterkonto und ist
5961
- * deshalb nach Methode c7a zu pr�fen. Aus den IBAN-Regeln
5962
- * (FAQ zu Regel 20, Frage 1):
5963
- * Eine Kontonummer, die in die IBAN-Berechnung - nach den
5964
- * Pr�f-/Korrekturschritten 5.2.1 a) bis c) - einzubeziehen
5965
- * ist, ist immer mindestens 7-stellig und maximal
5966
- * 9-stellig. Eine k�rzere oder l�ngere Kontonummer ist
5967
- * nicht g�ltig und muss zu einer Fehlermeldung (im
5968
- * Konverter-Tool bzw. -Portal) f�hren.
5969
- */
5970
- if(kto[8]=='0' && kto[9]=='0')return kto_check_pz("c7a",kto,NULL);
5971
-
5972
- if(kto_check_pz("c7c",kto,NULL)==OK){
5973
-
5974
- /* nicht zu entscheiden, ob c7a oder c7c (mit erg�nztem Unterkonto) richtig ist */
5975
- if( kto_check_pz("c7a",kto,NULL)==OK)return IBAN_AMBIGUOUS_KTO;
5976
-
5977
- /* Unterkonto bei Methode C7 weggelassen */
5978
- for(i=0;i<8;i++)kto[i]=kto[i+2];
5979
- kto[8]='0';
5980
- kto[9]='0';
5981
- return OK_UNTERKONTO_ATTACHED;
5982
- }
5983
- }
5984
- if(kto_check_pz("c7a",kto,NULL)==OK)RETURN_OK;
5985
-
5986
- /* Sonderfall Norisbank: ausschlie�lich Pr�fzifferverfahren 06 (entspricht c7b) ist f�r IBAN-Berechnung nicht zugelassen */
5987
- if(kto_check_pz("c7b",kto,NULL)==OK)return NO_IBAN_CALCULATION;
5988
- }
5989
-
5990
- RETURN_OK; /* Lumpensammler f�r Regel 20 */
5991
- #endif
5992
-
5993
-
5994
5948
  /* National-Bank AG */
5995
5949
  case 21:
5996
5950
  /* 1-5 stellige oder 8 stellige Konten sind ung�ltig */
@@ -8030,13 +7984,21 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8030
7984
 
8031
7985
  /* Deutsche Bundesbank */
8032
7986
  case 42:
7987
+
8033
7988
  /* nur 8-stellige Konten sind zur IBAN-Berechnung freigegeben */
8034
7989
  if(*kto!='0' || kto[1]!='0')return NO_IBAN_CALCULATION;
8035
7990
 
8036
7991
  /* Konten ohne IBAN-Berechnung: nnn 0 0000 bis nnn 0 0999 */
8037
7992
  if(kto[5]=='0' && kto[6]=='0')return NO_IBAN_CALCULATION;
8038
7993
 
8039
- /* Die Kontonummer muss an der 4. Stelle immer gleich '0' sein */
7994
+ /* Die Kontonummer muss an der 4. Stelle immer gleich '0' sein.
7995
+ *
7996
+ * Anm. (MP): die "4." Stelle bezieht sich hier auf die 4. Stelle
7997
+ * der 8-stelligen Kontonummer, nicht die der 10-stelligen; daher
7998
+ * wird kto[5] auf '0' getestet. Als Beispiel wird 100 0 1000
7999
+ * angegeben, wobei die 0 nach initialen 100 damit gemeint ist. Die
8000
+ * beiden f�hrenden Nullen werden nicht ber�cksichtigt.
8001
+ */
8040
8002
  if(kto[5]=='0')return OK;
8041
8003
 
8042
8004
  /* au�erdem freigegeben: 50462000 bis 50463999 sowie 50469000 bis 50469999 */
@@ -8482,6 +8444,108 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8482
8444
  }
8483
8445
  else if(k1==17 && k2==61070000){strcpy(kto,"0176107000"); RETURN_OK_KTO_REPLACED;}
8484
8446
  else if(k1==22 && k2==10531180){strcpy(kto,"0201053180"); RETURN_OK_KTO_REPLACED;}
8447
+
8448
+ if(version>0){ /* g�ltig ab 3.3.2014 */
8449
+ if(k1==0)switch(k2){
8450
+ case 624044: return OK_IBAN_WITHOUT_KC_TEST;
8451
+ case 4063060: return OK_IBAN_WITHOUT_KC_TEST;
8452
+ case 20111908: return OK_IBAN_WITHOUT_KC_TEST;
8453
+ case 20211908: return OK_IBAN_WITHOUT_KC_TEST;
8454
+ case 20311908: return OK_IBAN_WITHOUT_KC_TEST;
8455
+ case 20411908: return OK_IBAN_WITHOUT_KC_TEST;
8456
+ case 20511908: return OK_IBAN_WITHOUT_KC_TEST;
8457
+ case 20611908: return OK_IBAN_WITHOUT_KC_TEST;
8458
+ case 20711908: return OK_IBAN_WITHOUT_KC_TEST;
8459
+ case 20811908: return OK_IBAN_WITHOUT_KC_TEST;
8460
+ case 20911908: return OK_IBAN_WITHOUT_KC_TEST;
8461
+ case 21111908: return OK_IBAN_WITHOUT_KC_TEST;
8462
+ case 21211908: return OK_IBAN_WITHOUT_KC_TEST;
8463
+ case 21311908: return OK_IBAN_WITHOUT_KC_TEST;
8464
+ case 21411908: return OK_IBAN_WITHOUT_KC_TEST;
8465
+ case 21511908: return OK_IBAN_WITHOUT_KC_TEST;
8466
+ case 21611908: return OK_IBAN_WITHOUT_KC_TEST;
8467
+ case 21711908: return OK_IBAN_WITHOUT_KC_TEST;
8468
+ case 21811908: return OK_IBAN_WITHOUT_KC_TEST;
8469
+ case 21911908: return OK_IBAN_WITHOUT_KC_TEST;
8470
+ case 22111908: return OK_IBAN_WITHOUT_KC_TEST;
8471
+ case 22211908: return OK_IBAN_WITHOUT_KC_TEST;
8472
+ case 22311908: return OK_IBAN_WITHOUT_KC_TEST;
8473
+ case 22411908: return OK_IBAN_WITHOUT_KC_TEST;
8474
+ case 22511908: return OK_IBAN_WITHOUT_KC_TEST;
8475
+ case 22611908: return OK_IBAN_WITHOUT_KC_TEST;
8476
+ case 46211991: return OK_IBAN_WITHOUT_KC_TEST;
8477
+ case 50111908: return OK_IBAN_WITHOUT_KC_TEST;
8478
+ case 50211908: return OK_IBAN_WITHOUT_KC_TEST;
8479
+ case 50311908: return OK_IBAN_WITHOUT_KC_TEST;
8480
+ case 50411908: return OK_IBAN_WITHOUT_KC_TEST;
8481
+ case 50511908: return OK_IBAN_WITHOUT_KC_TEST;
8482
+ case 50611908: return OK_IBAN_WITHOUT_KC_TEST;
8483
+ case 50711908: return OK_IBAN_WITHOUT_KC_TEST;
8484
+ case 50811908: return OK_IBAN_WITHOUT_KC_TEST;
8485
+ case 50911908: return OK_IBAN_WITHOUT_KC_TEST;
8486
+ case 51111908: return OK_IBAN_WITHOUT_KC_TEST;
8487
+ case 51111991: return OK_IBAN_WITHOUT_KC_TEST;
8488
+ case 51211908: return OK_IBAN_WITHOUT_KC_TEST;
8489
+ case 51211991: return OK_IBAN_WITHOUT_KC_TEST;
8490
+ case 51311908: return OK_IBAN_WITHOUT_KC_TEST;
8491
+ case 51411908: return OK_IBAN_WITHOUT_KC_TEST;
8492
+ case 51511908: return OK_IBAN_WITHOUT_KC_TEST;
8493
+ case 51611908: return OK_IBAN_WITHOUT_KC_TEST;
8494
+ case 51711908: return OK_IBAN_WITHOUT_KC_TEST;
8495
+ case 51811908: return OK_IBAN_WITHOUT_KC_TEST;
8496
+ case 51911908: return OK_IBAN_WITHOUT_KC_TEST;
8497
+ case 52111908: return OK_IBAN_WITHOUT_KC_TEST;
8498
+ case 52111991: return OK_IBAN_WITHOUT_KC_TEST;
8499
+ case 52211908: return OK_IBAN_WITHOUT_KC_TEST;
8500
+ case 52211991: return OK_IBAN_WITHOUT_KC_TEST;
8501
+ case 52311908: return OK_IBAN_WITHOUT_KC_TEST;
8502
+ case 52411908: return OK_IBAN_WITHOUT_KC_TEST;
8503
+ case 52511908: return OK_IBAN_WITHOUT_KC_TEST;
8504
+ case 52611908: return OK_IBAN_WITHOUT_KC_TEST;
8505
+ case 52711908: return OK_IBAN_WITHOUT_KC_TEST;
8506
+ case 52811908: return OK_IBAN_WITHOUT_KC_TEST;
8507
+ case 52911908: return OK_IBAN_WITHOUT_KC_TEST;
8508
+ case 53111908: return OK_IBAN_WITHOUT_KC_TEST;
8509
+ case 53211908: return OK_IBAN_WITHOUT_KC_TEST;
8510
+ case 53311908: return OK_IBAN_WITHOUT_KC_TEST;
8511
+ case 57111908: return OK_IBAN_WITHOUT_KC_TEST;
8512
+ case 58111908: return OK_IBAN_WITHOUT_KC_TEST;
8513
+ case 58211908: return OK_IBAN_WITHOUT_KC_TEST;
8514
+ case 58311908: return OK_IBAN_WITHOUT_KC_TEST;
8515
+ case 58411908: return OK_IBAN_WITHOUT_KC_TEST;
8516
+ case 58511908: return OK_IBAN_WITHOUT_KC_TEST;
8517
+ case 80111908: return OK_IBAN_WITHOUT_KC_TEST;
8518
+ case 80211908: return OK_IBAN_WITHOUT_KC_TEST;
8519
+ case 80311908: return OK_IBAN_WITHOUT_KC_TEST;
8520
+ case 80411908: return OK_IBAN_WITHOUT_KC_TEST;
8521
+ case 80511908: return OK_IBAN_WITHOUT_KC_TEST;
8522
+ case 80611908: return OK_IBAN_WITHOUT_KC_TEST;
8523
+ case 80711908: return OK_IBAN_WITHOUT_KC_TEST;
8524
+ case 80811908: return OK_IBAN_WITHOUT_KC_TEST;
8525
+ case 80911908: return OK_IBAN_WITHOUT_KC_TEST;
8526
+ case 81111908: return OK_IBAN_WITHOUT_KC_TEST;
8527
+ case 81211908: return OK_IBAN_WITHOUT_KC_TEST;
8528
+ case 81311908: return OK_IBAN_WITHOUT_KC_TEST;
8529
+ case 81411908: return OK_IBAN_WITHOUT_KC_TEST;
8530
+ case 81511908: return OK_IBAN_WITHOUT_KC_TEST;
8531
+ case 81611908: return OK_IBAN_WITHOUT_KC_TEST;
8532
+ case 81711908: return OK_IBAN_WITHOUT_KC_TEST;
8533
+ case 81811908: return OK_IBAN_WITHOUT_KC_TEST;
8534
+ case 81911908: return OK_IBAN_WITHOUT_KC_TEST;
8535
+ case 82111908: return OK_IBAN_WITHOUT_KC_TEST;
8536
+ case 82211908: return OK_IBAN_WITHOUT_KC_TEST;
8537
+ case 82311908: return OK_IBAN_WITHOUT_KC_TEST;
8538
+ case 82411908: return OK_IBAN_WITHOUT_KC_TEST;
8539
+ case 82511908: return OK_IBAN_WITHOUT_KC_TEST;
8540
+ case 82611908: return OK_IBAN_WITHOUT_KC_TEST;
8541
+ case 82711908: return OK_IBAN_WITHOUT_KC_TEST;
8542
+ case 82811908: return OK_IBAN_WITHOUT_KC_TEST;
8543
+ case 82911908: return OK_IBAN_WITHOUT_KC_TEST;
8544
+ case 99624044: return OK_IBAN_WITHOUT_KC_TEST;
8545
+ }
8546
+ else
8547
+ if(k1==3 && k2==143869)return OK_IBAN_WITHOUT_KC_TEST;
8548
+ }
8485
8549
  RETURN_OK;
8486
8550
 
8487
8551
  /* BHW Kreditservice GmbH */
@@ -8495,46 +8559,52 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8495
8559
 
8496
8560
  /* SEB AG */
8497
8561
  case 56:
8498
- /* Spendenkonten */
8562
+ /* Spendenkonten: nur mit festgelegten IBANs -> Konto und evl. BLZ/BIC anpassen */
8499
8563
  if(k1==0)switch(k2){
8500
- case 36: strcpy(kto,"1010240003"); return OK_KTO_REPLACED;
8501
- case 50: strcpy(kto,"1328506100"); return OK_KTO_REPLACED;
8502
- case 99: strcpy(kto,"1826063000"); return OK_KTO_REPLACED;
8503
- case 110: strcpy(kto,"1015597802"); return OK_KTO_REPLACED;
8504
- case 240: strcpy(kto,"1010240000"); return OK_KTO_REPLACED;
8505
- case 333: strcpy(kto,"1011296100"); return OK_KTO_REPLACED;
8506
- case 555: strcpy(kto,"1600220800"); return OK_KTO_REPLACED;
8507
- case 556: strcpy(kto,"1000556100"); return OK_KTO_REPLACED;
8508
- case 606: strcpy(kto,"1967153801"); return OK_KTO_REPLACED;
8509
- case 700: strcpy(kto,"1070088000"); return OK_KTO_REPLACED;
8510
- case 777: strcpy(kto,"1006015200"); return OK_KTO_REPLACED;
8511
- case 999: strcpy(kto,"1010240001"); return OK_KTO_REPLACED;
8512
- case 1234: strcpy(kto,"1369152400"); return OK_KTO_REPLACED;
8513
- case 1313: strcpy(kto,"1017500000"); return OK_KTO_REPLACED;
8514
- case 1888: strcpy(kto,"1241113000"); return OK_KTO_REPLACED;
8515
- case 1953: strcpy(kto,"1026500901"); return OK_KTO_REPLACED;
8516
- case 1998: strcpy(kto,"1547620500"); return OK_KTO_REPLACED;
8517
- case 2007: strcpy(kto,"1026500907"); return OK_KTO_REPLACED;
8518
- case 4004: strcpy(kto,"1635100100"); return OK_KTO_REPLACED;
8519
- case 4444: strcpy(kto,"1304610900"); return OK_KTO_REPLACED;
8520
- case 5000: strcpy(kto,"1395676000"); return OK_KTO_REPLACED;
8521
- case 5510: strcpy(kto,"1611754300"); return OK_KTO_REPLACED;
8522
- case 6060: strcpy(kto,"1000400200"); return OK_KTO_REPLACED;
8523
- case 6800: strcpy(kto,"1296401301"); return OK_KTO_REPLACED;
8524
- case 55555: strcpy(kto,"1027758200"); return OK_KTO_REPLACED;
8525
- case 60000: strcpy(kto,"1005007001"); return OK_KTO_REPLACED;
8526
- case 66666: strcpy(kto,"1299807801"); return OK_KTO_REPLACED;
8527
- case 102030: strcpy(kto,"1837501600"); return OK_KTO_REPLACED;
8528
- case 121212: strcpy(kto,"1249461502"); return OK_KTO_REPLACED;
8529
- case 130500: strcpy(kto,"1413482100"); return OK_KTO_REPLACED;
8530
- case 202020: strcpy(kto,"1213431002"); return OK_KTO_REPLACED;
8531
- case 414141: strcpy(kto,"1010555101"); return OK_KTO_REPLACED;
8532
- case 666666: strcpy(kto,"1798758900"); return OK_KTO_REPLACED;
8533
- case 5000000: strcpy(kto,"1403124100"); return OK_KTO_REPLACED;
8564
+ case 36: strcpy(kto,"1010240003"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8565
+ case 50: strcpy(kto,"1328506100"); if(b!=48010111){strcpy(blz,"48010111"); *bicp="ESSEDE5F480"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8566
+ case 99: strcpy(kto,"1826063000"); if(b!=43010111){strcpy(blz,"43010111"); *bicp="ESSEDE5F430"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8567
+ case 110: strcpy(kto,"1015597802"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8568
+ case 240: strcpy(kto,"1010240000"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8569
+ case 333: strcpy(kto,"1011296100"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8570
+ case 555: strcpy(kto,"1600220800"); if(b!=10010111){strcpy(blz,"10010111"); *bicp="ESSEDE5F100"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8571
+ case 556: strcpy(kto,"1000556100"); if(b!=39010111){strcpy(blz,"39010111"); *bicp="ESSEDE5F390"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8572
+ case 606: strcpy(kto,"1967153801"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8573
+ case 700: strcpy(kto,"1070088000"); if(b!=26510111){strcpy(blz,"26510111"); *bicp="ESSEDE5F265"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8574
+ case 777: strcpy(kto,"1006015200"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8575
+ case 999: strcpy(kto,"1010240001"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8576
+ case 1234: strcpy(kto,"1369152400"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8577
+ case 1313: strcpy(kto,"1017500000"); if(b!=57010111){strcpy(blz,"57010111"); *bicp="ESSEDE5F570"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8578
+ case 1888: strcpy(kto,"1241113000"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8579
+ case 1953: strcpy(kto,"1026500901"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8580
+ case 1998: strcpy(kto,"1547620500"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8581
+ case 2007: strcpy(kto,"1026500907"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8582
+ case 4004: strcpy(kto,"1635100100"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8583
+ case 4444: strcpy(kto,"1304610900"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8584
+ case 5000: strcpy(kto,"1395676000"); if(b!=25010111){strcpy(blz,"25010111"); *bicp="ESSEDE5F250"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8585
+ case 5510: strcpy(kto,"1611754300"); if(b!=29010111){strcpy(blz,"29010111"); *bicp="ESSEDE5F290"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8586
+ case 6060: strcpy(kto,"1000400200"); if(b!=50010111){strcpy(blz,"50010111"); *bicp="ESSEDE5FXXX"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8587
+ case 6800: strcpy(kto,"1296401301"); if(b!=67010111){strcpy(blz,"67010111"); *bicp="ESSEDE5F670"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8588
+ case 55555: strcpy(kto,"1027758200"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8589
+ case 60000: strcpy(kto,"1005007001"); if(b!=50010111){strcpy(blz,"50010111"); *bicp="ESSEDE5FXXX"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8590
+ case 66666: strcpy(kto,"1299807801"); if(b!=20010111){strcpy(blz,"20010111"); *bicp="ESSEDE5F200"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8591
+ case 102030: strcpy(kto,"1837501600"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8592
+ case 121212: strcpy(kto,"1249461502"); if(b!=70010111){strcpy(blz,"70010111"); *bicp="ESSEDE5F700"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8593
+ case 130500: strcpy(kto,"1413482100"); if(b!=30010111){strcpy(blz,"30010111"); *bicp="ESSEDE5F300"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8594
+ case 202020: strcpy(kto,"1213431002"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8595
+ case 414141: strcpy(kto,"1010555101"); if(b!=38010111){strcpy(blz,"38010111"); *bicp="ESSEDE5F380"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8596
+ case 666666: strcpy(kto,"1798758900"); if(b!=20010111){strcpy(blz,"20010111"); *bicp="ESSEDE5F200"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8597
+ case 5000000: strcpy(kto,"1403124100"); if(b!=37010111){strcpy(blz,"37010111"); *bicp="ESSEDE5F370"; return OK_BLZ_KTO_REPLACED;} else return OK_KTO_REPLACED;
8534
8598
  }
8535
8599
  else if(k1==5 && k2==500500){
8536
8600
  strcpy(kto,"1045720000");
8537
- return OK_KTO_REPLACED;
8601
+ if(b!=60010111){
8602
+ strcpy(blz,"60010111");
8603
+ *bicp="ESSEDE5F600";
8604
+ return OK_BLZ_KTO_REPLACED;
8605
+ }
8606
+ else
8607
+ return OK_KTO_REPLACED;
8538
8608
  }
8539
8609
 
8540
8610
  /* f�r die folgenden BLZs sind nur zehnstelllige Kontonummern erlaubt: */
@@ -8607,18 +8677,25 @@ static int iban_regel_cvt(char *blz,char *kto,const char **bicp,int regel_versio
8607
8677
  default:
8608
8678
  break;
8609
8679
  }
8680
+ RETURN_OK;
8610
8681
 
8611
- RETURN_OK; /* sollte nicht vorkommen, nur Lumpensammler */
8682
+ /* Badenia Bausparkasse */
8683
+ case 57:
8684
+ if(b!=66010200){
8685
+ strcpy(blz,"66010200");
8686
+ *bicp="BBSPDE6KXXX";
8687
+ return OK_BLZ_REPLACED;
8688
+ }
8689
+ RETURN_OK;
8612
8690
 
8613
8691
 
8614
- /* Lumpensammler f�r Regeln */
8692
+ /* Lumpensammler f�r unbekannte Regeln */
8615
8693
  default:
8616
8694
  return IBAN_RULE_UNKNOWN;
8617
8695
  }
8618
8696
  }
8619
8697
  #endif
8620
8698
 
8621
- #line 9155 "konto_check.lxx"
8622
8699
  /* Funktion lut_multiple() +���2 */
8623
8700
  /* ###########################################################################
8624
8701
  * # lut_multiple(): Universalfunktion, um zu einer gegebenen Bankleitzahl #
@@ -8876,6 +8953,8 @@ DLL_EXPORT int lut_cleanup(void)
8876
8953
  }
8877
8954
  FREE(zweigstelle_f);
8878
8955
  FREE(zweigstelle_f1);
8956
+ FREE(sort_bic_h);
8957
+ FREE(bic_h);
8879
8958
  FREE(sort_bic);
8880
8959
  FREE(sort_name);
8881
8960
  FREE(sort_name_kurz);
@@ -8884,7 +8963,6 @@ DLL_EXPORT int lut_cleanup(void)
8884
8963
  FREE(sort_pz_f);
8885
8964
  FREE(sort_plz);
8886
8965
  FREE(sort_iban_regel);
8887
- #line 9415 "konto_check.lxx"
8888
8966
  if(name_raw && name_data!=name_raw)
8889
8967
  FREE(name_raw);
8890
8968
  else
@@ -8914,6 +8992,7 @@ DLL_EXPORT int lut_cleanup(void)
8914
8992
  FREE(loeschung);
8915
8993
  FREE(blz);
8916
8994
  FREE(startidx);
8995
+ FREE(hs_idx);
8917
8996
  FREE(plz);
8918
8997
  FREE(filialen);
8919
8998
  FREE(pan);
@@ -8947,7 +9026,6 @@ DLL_EXPORT int lut_cleanup(void)
8947
9026
  lut_cleanup(); /* neuer Versuch, aufzur�umen */
8948
9027
  RETURN(INIT_FATAL_ERROR);
8949
9028
  }
8950
- #line 9483 "konto_check.lxx"
8951
9029
  init_status&=1;
8952
9030
  init_in_progress=0;
8953
9031
  return OK;
@@ -9033,6 +9111,7 @@ static int read_lut(char *filename,int *cnt_blz)
9033
9111
  /* zun�chst u.U. Speicher freigeben, damit keine Lecks entstehen */
9034
9112
  FREE(blz);
9035
9113
  FREE(startidx);
9114
+ FREE(hs_idx);
9036
9115
  FREE(hash);
9037
9116
  FREE(pz_methoden);
9038
9117
  if(!(blz=calloc(j=cnt+100,sizeof(int))) || !(startidx=calloc(j,sizeof(int)))
@@ -9119,8 +9198,8 @@ static void init_atoi_table(void)
9119
9198
  unsigned long l;
9120
9199
 
9121
9200
  #if 1
9122
- /* �nderungen zum 9.12.2013 aktivieren */
9123
- if(time(NULL)>1386543600)pz_aenderungen_aktivieren=1;
9201
+ /* �nderungen zum 3.3.2014 aktivieren */
9202
+ if(time(NULL)>1393801200)pz_aenderungen_aktivieren=1;
9124
9203
  #endif
9125
9204
 
9126
9205
  /* ung�ltige Ziffern; Blanks und Tabs werden ebenfalls als ung�ltig
@@ -9245,6 +9324,8 @@ static void init_atoi_table(void)
9245
9324
  lut2_feld_namen[LUT2_2_IBAN_REGEL]="LUT2_2_IBAN_REGEL";
9246
9325
  lut2_feld_namen[LUT2_IBAN_REGEL_SORT]="LUT2_IBAN_REGEL_SORT";
9247
9326
  lut2_feld_namen[LUT2_2_IBAN_REGEL_SORT]="LUT2_2_IBAN_REGEL_SORT";
9327
+ lut2_feld_namen[LUT2_BIC_H_SORT]="LUT2_BIC_H_SORT";
9328
+ lut2_feld_namen[LUT2_2_BIC_H_SORT]="LUT2_2_BIC_H_SORT";
9248
9329
 
9249
9330
  lut_block_idx[1]=0;
9250
9331
  lut_block_idx[2]=0;
@@ -9272,6 +9353,7 @@ static void init_atoi_table(void)
9272
9353
  lut_block_idx[24]=0;
9273
9354
  lut_block_idx[25]=0;
9274
9355
  lut_block_idx[26]=0;
9356
+ lut_block_idx[27]=0;
9275
9357
 
9276
9358
  lut_block_name1[1]="BLZ";
9277
9359
  lut_block_name1[2]="FILIALEN";
@@ -9299,6 +9381,7 @@ static void init_atoi_table(void)
9299
9381
  lut_block_name1[24]="VOLLTEXT_IDX";
9300
9382
  lut_block_name1[25]="IBAN_REGEL";
9301
9383
  lut_block_name1[26]="IBAN_REGEL_SORT";
9384
+ lut_block_name1[27]="BIC_H_SORT";
9302
9385
  lut_block_name1[101]="BLZ (2)";
9303
9386
  lut_block_name1[102]="FILIALEN (2)";
9304
9387
  lut_block_name1[103]="NAME (2)";
@@ -9325,6 +9408,7 @@ static void init_atoi_table(void)
9325
9408
  lut_block_name1[124]="VOLLTEXT_IDX (2)";
9326
9409
  lut_block_name1[125]="IBAN_REGEL (2)";
9327
9410
  lut_block_name1[126]="IBAN_REGEL_SORT (2)";
9411
+ lut_block_name1[127]="BIC_H_SORT (2)";
9328
9412
 
9329
9413
  lut_block_name2[1]="1. BLZ";
9330
9414
  lut_block_name2[2]="1. Anzahl Fil.";
@@ -9352,6 +9436,7 @@ static void init_atoi_table(void)
9352
9436
  lut_block_name2[24]="1. Volltext idx";
9353
9437
  lut_block_name2[25]="1. IBAN Regel";
9354
9438
  lut_block_name2[26]="1. IBAN Regel idx";
9439
+ lut_block_name2[27]="1. BIC Hauptst.idx";
9355
9440
  lut_block_name2[101]="2. BLZ";
9356
9441
  lut_block_name2[102]="2. Anzahl Fil.";
9357
9442
  lut_block_name2[103]="2. Name";
@@ -9378,8 +9463,8 @@ static void init_atoi_table(void)
9378
9463
  lut_block_name2[124]="2. Volltext idx";
9379
9464
  lut_block_name2[125]="2. IBAN Regel";
9380
9465
  lut_block_name2[126]="2. IBAN Regel idx";
9381
- lut_blocklen_max=434;
9382
- #line 9723 "konto_check.lxx"
9466
+ lut_block_name2[127]="2. BIC Hauptst.idx";
9467
+ lut_blocklen_max=453;
9383
9468
  init_status|=1;
9384
9469
  }
9385
9470
 
@@ -9439,7 +9524,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
9439
9524
 
9440
9525
  switch(pz_methode){
9441
9526
 
9442
- #line 9786 "konto_check.lxx"
9443
9527
  /* Berechnungsmethoden 00 bis 09 +���3
9444
9528
  Berechnung nach der Methode 00 +���4 */
9445
9529
  /*
@@ -9875,7 +9959,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
9875
9959
  retvals->methode="12";
9876
9960
  retvals->pz_methode=12;
9877
9961
  }
9878
- #endif /* frei */
9962
+ #endif
9879
9963
  return NOT_DEFINED;
9880
9964
 
9881
9965
  /* Berechnung nach der Methode 13 +���4 */
@@ -11768,7 +11852,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
11768
11852
  * ######################################################################
11769
11853
  */
11770
11854
 
11771
- #line 11791 "konto_check.lxx"
11772
11855
  case 51:
11773
11856
  if(*(kto+2)=='9'){ /* Ausnahme */
11774
11857
 
@@ -12030,8 +12113,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12030
12113
  else
12031
12114
  return FALSE;
12032
12115
 
12033
- #line 12005 "konto_check.lxx"
12034
- #line 12007 "konto_check.lxx"
12035
12116
  /* Berechnung nach der Methode 53 +���4 */
12036
12117
  /*
12037
12118
  * ######################################################################
@@ -12112,7 +12193,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12112
12193
  kto_alt[5]=kto[3];
12113
12194
  for(ptr=kto+4;*ptr=='0' && *ptr;ptr++);
12114
12195
  for(dptr=kto_alt+6;(*dptr= *ptr++);dptr++);
12115
- kto=kto_alt;
12116
12196
  p1=kto_alt[5]; /* Pr�fziffer merken */
12117
12197
  kto_alt[5]='0';
12118
12198
  for(pz=0,ptr=kto_alt+strlen(kto_alt)-1,i=0;ptr>=kto_alt;ptr--,i++)
@@ -12133,7 +12213,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12133
12213
  if(retvals)retvals->pz=pz;
12134
12214
  #endif
12135
12215
  INVALID_PZ10;
12136
- if(*(kto+5)-'0'==pz)
12216
+ if(*(kto_alt+5)-'0'==pz)
12137
12217
  return ok;
12138
12218
  else
12139
12219
  return FALSE;
@@ -12331,8 +12411,13 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12331
12411
  * # bewerten. #
12332
12412
  * ######################################################################
12333
12413
  */
12334
- #line 12277 "konto_check.lxx"
12335
12414
  case 57:
12415
+ #if DEBUG>0
12416
+ if(retvals){
12417
+ retvals->methode="57";
12418
+ retvals->pz_methode=57;
12419
+ }
12420
+ #endif
12336
12421
  #if DEBUG>0
12337
12422
  case 1057: /* die Untermethoden werden in einem eigenen switch abgearbeitet, daher alle hier zusammen */
12338
12423
  case 2057:
@@ -12940,7 +13025,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12940
13025
  /* Berechnung nach der Methode 66 +���4 */
12941
13026
  /*
12942
13027
  * ######################################################################
12943
- * # Berechnung nach der Methode 66 #
13028
+ * # Berechnung nach der Methode 66 (ge�ndert zum 3.3.2014) #
12944
13029
  * ######################################################################
12945
13030
  * # Aufbau der 9-stelligen Kontonummer (innerhalb des #
12946
13031
  * # zwischenbetrieblich 10-stelligen Feldes) #
@@ -12964,13 +13049,27 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
12964
13049
  * # von 0 ist die Pr�fziffer 1. Bei einem Rest von 1 ist die #
12965
13050
  * # Pr�fziffer 0 Verbleibt ein Rest von 2 bis 10, so wird dieser vom #
12966
13051
  * # Divison (11) subtrahiert. Die Differenz ist dann die Pr�fziffer. #
13052
+ * # #
13053
+ * # Ausnahme: #
13054
+ * # Ist die Stelle 2 der Kontonummer der Wert = 9, ist die Kontonummer #
13055
+ * # nicht pr�fziffergesichert; es gilt die Methode 09 (keine #
13056
+ * # Pr�fzifferberechnung) #
12967
13057
  * ######################################################################
12968
13058
  */
12969
13059
  case 66:
12970
13060
  #if DEBUG>0
13061
+ case 2066:
12971
13062
  if(retvals){
12972
- retvals->methode="66";
12973
- retvals->pz_methode=66;
13063
+ retvals->methode="66b";
13064
+ retvals->pz_methode=2066;
13065
+ }
13066
+ #endif
13067
+ if(pz_aenderungen_aktivieren && kto[1]=='9')return OK_NO_CHK;
13068
+ #if DEBUG>0
13069
+ case 1066:
13070
+ if(retvals){
13071
+ retvals->methode="66a";
13072
+ retvals->pz_methode=1066;
12974
13073
  }
12975
13074
  #endif
12976
13075
  if(*kto!='0')return INVALID_KTO;
@@ -17429,7 +17528,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
17429
17528
  kto_alt[5]=kto[3];
17430
17529
  for(ptr=kto+4;*ptr=='0' && *ptr;ptr++);
17431
17530
  for(dptr=kto_alt+6;(*dptr= *ptr++);dptr++);
17432
- kto=kto_alt;
17433
17531
  p1=kto_alt[5]; /* Pr�fziffer merken */
17434
17532
  kto_alt[5]='0';
17435
17533
  for(pz=0,ptr=kto_alt+strlen(kto_alt)-1,i=0;ptr>=kto_alt;ptr--,i++)
@@ -17450,7 +17548,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
17450
17548
  if(retvals)retvals->pz=pz;
17451
17549
  #endif
17452
17550
  INVALID_PZ10;
17453
- if(*(kto+5)-'0'==pz)
17551
+ if(*(kto_alt+5)-'0'==pz)
17454
17552
  return ok;
17455
17553
  else
17456
17554
  return FALSE;
@@ -18509,7 +18607,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
18509
18607
  * 7-stellige Nummern (Hinweis T.F.); stimmt auch mit
18510
18608
  * http://www.kontonummern.de/check.php �berein.
18511
18609
  */
18512
- #if DEBUG>0
18610
+ #if DEBUG>0
18513
18611
  case 3127:
18514
18612
  if(retvals){
18515
18613
  retvals->methode="C7c";
@@ -18535,7 +18633,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
18535
18633
  CHECK_PZX10;
18536
18634
  }
18537
18635
  /* hier darf kein else-Zweig hin, damit nach 63c auch 63a gepr�ft wird */
18538
- #if DEBUG>0
18636
+ #if DEBUG>0
18539
18637
  case 1127:
18540
18638
  if(retvals){
18541
18639
  retvals->methode="C7a";
@@ -19826,8 +19924,8 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
19826
19924
  * # #
19827
19925
  * # Anmerkung (M.P.): nach der Multiplikation wird ein Wert von 2442 #
19828
19926
  * # subtrahiert; dies ist ein Vielfaches von 11, das sich bei der #
19829
- * # "Kontonummer" 0 ergibt. Durch die ASCII-Darstellung wird das #
19830
- * # Ergebnis nur unn�tig vergr��ert; die Subtraktion �ndert das #
19927
+ * # "Kontonummer" 00000000 ergibt. Durch die ASCII-Darstellung wird #
19928
+ * # das Ergebnis nur unn�tig vergr��ert; die Subtraktion �ndert das #
19831
19929
  * # Endergebnis nicht, bringt aber die Summe in einen Bereich, der f�r #
19832
19930
  * # das Makros MOD_11_352 akzeptabel ist. #
19833
19931
  * ######################################################################
@@ -19877,7 +19975,6 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
19877
19975
  return NOT_IMPLEMENTED;
19878
19976
  }
19879
19977
  }
19880
- #line 18644 "konto_check.lxx"
19881
19978
 
19882
19979
  /*
19883
19980
  * ######################################################################
@@ -20118,7 +20215,6 @@ DLL_EXPORT int kto_check_pz(char *pz,char *kto,char *blz)
20118
20215
  * ###########################################################################
20119
20216
  */
20120
20217
 
20121
- #line 18885 "konto_check.lxx"
20122
20218
  static int kto_check_blz_x(char *blz,char *kto,int *uk_cnt)
20123
20219
  {
20124
20220
  char *ptr,*dptr,xkto[32];
@@ -20455,7 +20551,6 @@ DLL_EXPORT int kto_check_blz_dbg(char *blz,char *kto,RETVAL *retvals)
20455
20551
  * # Copyright (C) 2007 Michael Plugge <m.plugge@hs-mannheim.de> #
20456
20552
  * ###########################################################################
20457
20553
  */
20458
- #line 19222 "konto_check.lxx"
20459
20554
  DLL_EXPORT int kto_check_pz_dbg(char *pz,char *kto,char *blz,RETVAL *retvals)
20460
20555
  {
20461
20556
  int untermethode,pz_methode;
@@ -20619,7 +20714,6 @@ DLL_EXPORT int kto_check(char *pz_or_blz,char *kto,char *lut_name)
20619
20714
  }
20620
20715
  }
20621
20716
 
20622
- #line 19386 "konto_check.lxx"
20623
20717
  /* Funktion bic_check() +���1 */
20624
20718
  /* ###########################################################################
20625
20719
  * # Die Funktion bic_check() testet ob ein BIC g�ltig ist. Falls ja, wird #
@@ -20660,9 +20754,11 @@ DLL_EXPORT const char *kto_check_retval2txt(int retval)
20660
20754
  DLL_EXPORT const char *kto_check_retval2iso(int retval)
20661
20755
  {
20662
20756
  switch(retval){
20757
+ case IBAN_ONLY_GERMAN: return "Es werden nur deutsche IBANs unterst�tzt";
20758
+ case INVALID_PARAMETER_TYPE: return "Falscher Parametertyp f�r die Funktion";
20663
20759
  case BIC_ONLY_GERMAN: return "Es werden nur deutsche BICs unterst�tzt";
20664
20760
  case INVALID_BIC_LENGTH: return "Die L�nge des BIC mu� genau 8 oder 11 Zeichen sein";
20665
- case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Pr�fsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (BLZ nicht ersetzt, wahrscheinlich falsch)";
20761
+ case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Pr�fsumme stimmt, die BLZ sollte aber durch eine zentrale BLZ ersetzt werden. Die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
20666
20762
  case IBAN_CHKSUM_OK_KC_NOT_INITIALIZED: return "Die IBAN-Pr�fsumme stimmt, konto_check wurde jedoch noch nicht initialisiert (Kontopr�fung nicht m�glich)";
20667
20763
  case IBAN_CHKSUM_OK_BLZ_INVALID: return "Die IBAN-Pr�fsumme stimmt, die BLZ ist allerdings ung�ltig";
20668
20764
  case IBAN_CHKSUM_OK_NACHFOLGE_BLZ_DEFINED: return "Die IBAN-Pr�fsumme stimmt, f�r die Bank gibt es allerdings eine (andere) Nachfolge-BLZ";
@@ -20674,7 +20770,7 @@ DLL_EXPORT const char *kto_check_retval2iso(int retval)
20674
20770
  case BLZ_BLACKLISTED: return "Die BLZ findet sich in der Ausschlussliste f�r IBAN-Berechnungen";
20675
20771
  case BLZ_MARKED_AS_DELETED: return "Die BLZ ist in der Bundesbank-Datei als gel�scht markiert und somit ung�ltig";
20676
20772
  case IBAN_CHKSUM_OK_SOMETHING_WRONG: return "Die IBAN-Pr�fsumme stimmt, es gibt allerdings einen Fehler in der eigenen IBAN-Bestimmung (wahrscheinlich falsch)";
20677
- case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Pr�fsumme stimmt, eine IBAN-Berechnung ist allerdings nicht erlaubt (wahrscheinlich falsch)";
20773
+ case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Pr�fsumme stimmt. Die Bank gibt IBANs nach nicht ver�ffentlichten Regeln heraus, die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
20678
20774
  case IBAN_CHKSUM_OK_RULE_IGNORED: return "Die IBAN-Pr�fsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (wahrscheinlich falsch)";
20679
20775
  case IBAN_CHKSUM_OK_UNTERKTO_MISSING: return "Die IBAN-Pr�fsumme stimmt, es fehlt aber ein Unterkonto (wahrscheinlich falsch)";
20680
20776
  case IBAN_INVALID_RULE: return "Die BLZ passt nicht zur angegebenen IBAN-Regel";
@@ -20689,11 +20785,11 @@ DLL_EXPORT const char *kto_check_retval2iso(int retval)
20689
20785
  case LUT2_VOLLTEXT_INVALID_CHAR: return "Ung�ltiges Zeichen ( ()+-/&.,\' ) f�r die Volltextsuche gefunden";
20690
20786
  case LUT2_VOLLTEXT_SINGLE_WORD_ONLY: return "Die Volltextsuche sucht jeweils nur ein einzelnes Wort, benutzen Sie lut_suche_multiple() zur Suche nach mehreren Worten";
20691
20787
  case LUT_SUCHE_INVALID_RSC: return "die angegebene Suchresource ist ung�ltig";
20692
- case LUT_SUCHE_INVALID_CMD: return "Suche: im Verkn�pfungsstring sind nur die Zeichen a-z sowie + und - erlaubt";
20693
- case LUT_SUCHE_INVALID_CNT: return "Suche: es m�ssen zwischen 1 und 26 Suchmuster angegeben werden";
20788
+ case LUT_SUCHE_INVALID_CMD: return "bei der Suche sind im Verkn�pfungsstring nur die Zeichen a-z sowie + und - erlaubt";
20789
+ case LUT_SUCHE_INVALID_CNT: return "bei der Suche m�ssen zwischen 1 und 26 Suchmuster angegeben werden";
20694
20790
  case LUT2_VOLLTEXT_NOT_INITIALIZED: return "Das Feld Volltext wurde nicht initialisiert";
20695
20791
  case NO_OWN_IBAN_CALCULATION: return "das Institut erlaubt keine eigene IBAN-Berechnung";
20696
- case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden";
20792
+ case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurde beim Kompilieren nicht eingebunden";
20697
20793
  case KTO_CHECK_INVALID_COMPRESSION_LIB: return "der angegebene Wert f�r die Default-Kompression ist ung�ltig";
20698
20794
  case OK_UNTERKONTO_ATTACHED_OLD: return "(nicht mehr als Fehler, sondern positive Ausgabe - Dummy f�r den alten Wert)";
20699
20795
  case KTO_CHECK_DEFAULT_BLOCK_INVALID: return "Ung�ltige Signatur im Default-Block";
@@ -20749,7 +20845,7 @@ DLL_EXPORT const char *kto_check_retval2iso(int retval)
20749
20845
  case LUT2_NOT_YET_VALID: return "Der Datensatz ist noch nicht g�ltig";
20750
20846
  case LUT2_NO_LONGER_VALID: return "Der Datensatz ist nicht mehr g�ltig";
20751
20847
  case LUT2_GUELTIGKEIT_SWAPPED: return "Im G�ltigkeitsdatum sind Anfangs- und Enddatum vertauscht";
20752
- case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene G�ltigkeitsdatum ist ung�ltig (Soll: JJJJMMTT-JJJJMMTT)";
20848
+ case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene G�ltigkeitsdatum ist ung�ltig (Sollformat ist JJJJMMTT-JJJJMMTT)";
20753
20849
  case LUT2_INDEX_OUT_OF_RANGE: return "Der Index f�r die Filiale ist ung�ltig";
20754
20850
  case LUT2_INIT_IN_PROGRESS: return "Die Bibliothek wird gerade neu initialisiert";
20755
20851
  case LUT2_BLZ_NOT_INITIALIZED: return "Das Feld BLZ wurde nicht initialisiert";
@@ -20826,14 +20922,14 @@ DLL_EXPORT const char *kto_check_retval2iso(int retval)
20826
20922
  case OK_NACHFOLGE_BLZ_USED: return "ok, f�r die BLZ wurde allerdings die Nachfolge-BLZ eingesetzt";
20827
20923
  case OK_KTO_REPLACED: return "ok, die Kontonummer wurde allerdings ersetzt";
20828
20924
  case OK_BLZ_REPLACED: return "ok, die Bankleitzahl wurde allerdings ersetzt";
20829
- case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurde allerdings ersetzt";
20925
+ case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurden allerdings ersetzt";
20830
20926
  case OK_IBAN_WITHOUT_KC_TEST: return "ok, die Bankverbindung ist (ohne Test) als richtig anzusehen";
20831
- case OK_INVALID_FOR_IBAN: return "ok, f�r IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
20927
+ case OK_INVALID_FOR_IBAN: return "ok, f�r die die IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
20832
20928
  case OK_HYPO_REQUIRES_KTO: return "ok, f�r die BIC-Bestimmung der ehemaligen Hypo-Bank f�r IBAN wird i.A. zus�tzlich die Kontonummer ben�tigt";
20833
20929
  case OK_KTO_REPLACED_NO_PZ: return "ok, die Kontonummer wurde ersetzt, die neue Kontonummer hat keine Pr�fziffer";
20834
20930
  case OK_UNTERKONTO_ATTACHED: return "ok, es wurde ein (weggelassenes) Unterkonto angef�gt";
20931
+ case OK_SHORT_BIC_USED: return "ok, f�r den BIC wurde die Zweigstellennummer allerdings durch XXX ersetzt";
20835
20932
  default: return "ung�ltiger R�ckgabewert";
20836
- #line 19428 "konto_check.lxx"
20837
20933
  }
20838
20934
  }
20839
20935
 
@@ -20849,9 +20945,11 @@ DLL_EXPORT const char *kto_check_retval2iso(int retval)
20849
20945
  DLL_EXPORT const char *kto_check_retval2dos(int retval)
20850
20946
  {
20851
20947
  switch(retval){
20948
+ case IBAN_ONLY_GERMAN: return "Es werden nur deutsche IBANs unterst�tzt";
20949
+ case INVALID_PARAMETER_TYPE: return "Falscher Parametertyp f�r die Funktion";
20852
20950
  case BIC_ONLY_GERMAN: return "Es werden nur deutsche BICs unterst�tzt";
20853
20951
  case INVALID_BIC_LENGTH: return "Die L� nge des BIC mu� genau 8 oder 11 Zeichen sein";
20854
- case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Pr�fsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (BLZ nicht ersetzt, wahrscheinlich falsch)";
20952
+ case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Pr�fsumme stimmt, die BLZ sollte aber durch eine zentrale BLZ ersetzt werden. Die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
20855
20953
  case IBAN_CHKSUM_OK_KC_NOT_INITIALIZED: return "Die IBAN-Pr�fsumme stimmt, konto_check wurde jedoch noch nicht initialisiert (Kontopr�fung nicht m�glich)";
20856
20954
  case IBAN_CHKSUM_OK_BLZ_INVALID: return "Die IBAN-Pr�fsumme stimmt, die BLZ ist allerdings ung�ltig";
20857
20955
  case IBAN_CHKSUM_OK_NACHFOLGE_BLZ_DEFINED: return "Die IBAN-Pr�fsumme stimmt, f�r die Bank gibt es allerdings eine (andere) Nachfolge-BLZ";
@@ -20863,7 +20961,7 @@ DLL_EXPORT const char *kto_check_retval2dos(int retval)
20863
20961
  case BLZ_BLACKLISTED: return "Die BLZ findet sich in der Ausschlussliste f�r IBAN-Berechnungen";
20864
20962
  case BLZ_MARKED_AS_DELETED: return "Die BLZ ist in der Bundesbank-Datei als gel�scht markiert und somit ung�ltig";
20865
20963
  case IBAN_CHKSUM_OK_SOMETHING_WRONG: return "Die IBAN-Pr�fsumme stimmt, es gibt allerdings einen Fehler in der eigenen IBAN-Bestimmung (wahrscheinlich falsch)";
20866
- case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Pr�fsumme stimmt, eine IBAN-Berechnung ist allerdings nicht erlaubt (wahrscheinlich falsch)";
20964
+ case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Pr�fsumme stimmt. Die Bank gibt IBANs nach nicht ver�ffentlichten Regeln heraus, die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
20867
20965
  case IBAN_CHKSUM_OK_RULE_IGNORED: return "Die IBAN-Pr�fsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (wahrscheinlich falsch)";
20868
20966
  case IBAN_CHKSUM_OK_UNTERKTO_MISSING: return "Die IBAN-Pr�fsumme stimmt, es fehlt aber ein Unterkonto (wahrscheinlich falsch)";
20869
20967
  case IBAN_INVALID_RULE: return "Die BLZ passt nicht zur angegebenen IBAN-Regel";
@@ -20878,11 +20976,11 @@ DLL_EXPORT const char *kto_check_retval2dos(int retval)
20878
20976
  case LUT2_VOLLTEXT_INVALID_CHAR: return "Ung�ltiges Zeichen ( ()+-/&.,\' ) f�r die Volltextsuche gefunden";
20879
20977
  case LUT2_VOLLTEXT_SINGLE_WORD_ONLY: return "Die Volltextsuche sucht jeweils nur ein einzelnes Wort, benutzen Sie lut_suche_multiple() zur Suche nach mehreren Worten";
20880
20978
  case LUT_SUCHE_INVALID_RSC: return "die angegebene Suchresource ist ung�ltig";
20881
- case LUT_SUCHE_INVALID_CMD: return "Suche: im Verkn�pfungsstring sind nur die Zeichen a-z sowie + und - erlaubt";
20882
- case LUT_SUCHE_INVALID_CNT: return "Suche: es m�ssen zwischen 1 und 26 Suchmuster angegeben werden";
20979
+ case LUT_SUCHE_INVALID_CMD: return "bei der Suche sind im Verkn�pfungsstring nur die Zeichen a-z sowie + und - erlaubt";
20980
+ case LUT_SUCHE_INVALID_CNT: return "bei der Suche m�ssen zwischen 1 und 26 Suchmuster angegeben werden";
20883
20981
  case LUT2_VOLLTEXT_NOT_INITIALIZED: return "Das Feld Volltext wurde nicht initialisiert";
20884
20982
  case NO_OWN_IBAN_CALCULATION: return "das Institut erlaubt keine eigene IBAN-Berechnung";
20885
- case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden";
20983
+ case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurde beim Kompilieren nicht eingebunden";
20886
20984
  case KTO_CHECK_INVALID_COMPRESSION_LIB: return "der angegebene Wert f�r die Default-Kompression ist ung�ltig";
20887
20985
  case OK_UNTERKONTO_ATTACHED_OLD: return "(nicht mehr als Fehler, sondern positive Ausgabe - Dummy f�r den alten Wert)";
20888
20986
  case KTO_CHECK_DEFAULT_BLOCK_INVALID: return "Ung�ltige Signatur im Default-Block";
@@ -20938,7 +21036,7 @@ DLL_EXPORT const char *kto_check_retval2dos(int retval)
20938
21036
  case LUT2_NOT_YET_VALID: return "Der Datensatz ist noch nicht g�ltig";
20939
21037
  case LUT2_NO_LONGER_VALID: return "Der Datensatz ist nicht mehr g�ltig";
20940
21038
  case LUT2_GUELTIGKEIT_SWAPPED: return "Im G�ltigkeitsdatum sind Anfangs- und Enddatum vertauscht";
20941
- case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene G�ltigkeitsdatum ist ung�ltig (Soll: JJJJMMTT-JJJJMMTT)";
21039
+ case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene G�ltigkeitsdatum ist ung�ltig (Sollformat ist JJJJMMTT-JJJJMMTT)";
20942
21040
  case LUT2_INDEX_OUT_OF_RANGE: return "Der Index f�r die Filiale ist ung�ltig";
20943
21041
  case LUT2_INIT_IN_PROGRESS: return "Die Bibliothek wird gerade neu initialisiert";
20944
21042
  case LUT2_BLZ_NOT_INITIALIZED: return "Das Feld BLZ wurde nicht initialisiert";
@@ -21015,14 +21113,14 @@ DLL_EXPORT const char *kto_check_retval2dos(int retval)
21015
21113
  case OK_NACHFOLGE_BLZ_USED: return "ok, f�r die BLZ wurde allerdings die Nachfolge-BLZ eingesetzt";
21016
21114
  case OK_KTO_REPLACED: return "ok, die Kontonummer wurde allerdings ersetzt";
21017
21115
  case OK_BLZ_REPLACED: return "ok, die Bankleitzahl wurde allerdings ersetzt";
21018
- case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurde allerdings ersetzt";
21116
+ case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurden allerdings ersetzt";
21019
21117
  case OK_IBAN_WITHOUT_KC_TEST: return "ok, die Bankverbindung ist (ohne Test) als richtig anzusehen";
21020
- case OK_INVALID_FOR_IBAN: return "ok, f�r IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
21118
+ case OK_INVALID_FOR_IBAN: return "ok, f�r die die IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
21021
21119
  case OK_HYPO_REQUIRES_KTO: return "ok, f�r die BIC-Bestimmung der ehemaligen Hypo-Bank f�r IBAN wird i.A. zus� tzlich die Kontonummer ben�tigt";
21022
21120
  case OK_KTO_REPLACED_NO_PZ: return "ok, die Kontonummer wurde ersetzt, die neue Kontonummer hat keine Pr�fziffer";
21023
21121
  case OK_UNTERKONTO_ATTACHED: return "ok, es wurde ein (weggelassenes) Unterkonto angef�gt";
21122
+ case OK_SHORT_BIC_USED: return "ok, f�r den BIC wurde die Zweigstellennummer allerdings durch XXX ersetzt";
21024
21123
  default: return "ung�ltiger R�ckgabewert";
21025
- #line 19445 "konto_check.lxx"
21026
21124
  }
21027
21125
  }
21028
21126
 
@@ -21038,9 +21136,11 @@ DLL_EXPORT const char *kto_check_retval2dos(int retval)
21038
21136
  DLL_EXPORT const char *kto_check_retval2html(int retval)
21039
21137
  {
21040
21138
  switch(retval){
21139
+ case IBAN_ONLY_GERMAN: return "Es werden nur deutsche IBANs unterst&uuml;tzt";
21140
+ case INVALID_PARAMETER_TYPE: return "Falscher Parametertyp f&uuml;r die Funktion";
21041
21141
  case BIC_ONLY_GERMAN: return "Es werden nur deutsche BICs unterst&uuml;tzt";
21042
21142
  case INVALID_BIC_LENGTH: return "Die L&auml;nge des BIC mu&szlig; genau 8 oder 11 Zeichen sein";
21043
- case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Pr&uuml;fsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (BLZ nicht ersetzt, wahrscheinlich falsch)";
21143
+ case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Pr&uuml;fsumme stimmt, die BLZ sollte aber durch eine zentrale BLZ ersetzt werden. Die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
21044
21144
  case IBAN_CHKSUM_OK_KC_NOT_INITIALIZED: return "Die IBAN-Pr&uuml;fsumme stimmt, konto_check wurde jedoch noch nicht initialisiert (Kontopr&uuml;fung nicht m&ouml;glich)";
21045
21145
  case IBAN_CHKSUM_OK_BLZ_INVALID: return "Die IBAN-Pr&uuml;fsumme stimmt, die BLZ ist allerdings ung&uuml;ltig";
21046
21146
  case IBAN_CHKSUM_OK_NACHFOLGE_BLZ_DEFINED: return "Die IBAN-Pr&uuml;fsumme stimmt, f&uuml;r die Bank gibt es allerdings eine (andere) Nachfolge-BLZ";
@@ -21052,7 +21152,7 @@ DLL_EXPORT const char *kto_check_retval2html(int retval)
21052
21152
  case BLZ_BLACKLISTED: return "Die BLZ findet sich in der Ausschlussliste f&uuml;r IBAN-Berechnungen";
21053
21153
  case BLZ_MARKED_AS_DELETED: return "Die BLZ ist in der Bundesbank-Datei als gel&ouml;scht markiert und somit ung&uuml;ltig";
21054
21154
  case IBAN_CHKSUM_OK_SOMETHING_WRONG: return "Die IBAN-Pr&uuml;fsumme stimmt, es gibt allerdings einen Fehler in der eigenen IBAN-Bestimmung (wahrscheinlich falsch)";
21055
- case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Pr&uuml;fsumme stimmt, eine IBAN-Berechnung ist allerdings nicht erlaubt (wahrscheinlich falsch)";
21155
+ case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Pr&uuml;fsumme stimmt. Die Bank gibt IBANs nach nicht ver&ouml;ffentlichten Regeln heraus, die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
21056
21156
  case IBAN_CHKSUM_OK_RULE_IGNORED: return "Die IBAN-Pr&uuml;fsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (wahrscheinlich falsch)";
21057
21157
  case IBAN_CHKSUM_OK_UNTERKTO_MISSING: return "Die IBAN-Pr&uuml;fsumme stimmt, es fehlt aber ein Unterkonto (wahrscheinlich falsch)";
21058
21158
  case IBAN_INVALID_RULE: return "Die BLZ passt nicht zur angegebenen IBAN-Regel";
@@ -21064,14 +21164,14 @@ DLL_EXPORT const char *kto_check_retval2html(int retval)
21064
21164
  case LUT2_IBAN_REGEL_NOT_INITIALIZED: return "Das Feld IBAN-Regel wurde nicht initialisiert";
21065
21165
  case INVALID_IBAN_LENGTH: return "Die L&auml;nge der IBAN f&uuml;r das angegebene L&auml;nderk&uuml;rzel ist falsch";
21066
21166
  case LUT2_NO_ACCOUNT_GIVEN: return "Keine Bankverbindung/IBAN angegeben";
21067
- case LUT2_VOLLTEXT_INVALID_CHAR: return "Ung&uuml;ltiges Zeichen ( ()+-/&.,\' ) f&uuml;r die Volltextsuche gefunden";
21167
+ case LUT2_VOLLTEXT_INVALID_CHAR: return "Ung&uuml;ltiges Zeichen ( ()+-/&amp;.,\' ) f&uuml;r die Volltextsuche gefunden";
21068
21168
  case LUT2_VOLLTEXT_SINGLE_WORD_ONLY: return "Die Volltextsuche sucht jeweils nur ein einzelnes Wort, benutzen Sie lut_suche_multiple() zur Suche nach mehreren Worten";
21069
21169
  case LUT_SUCHE_INVALID_RSC: return "die angegebene Suchresource ist ung&uuml;ltig";
21070
- case LUT_SUCHE_INVALID_CMD: return "Suche: im Verkn&uuml;pfungsstring sind nur die Zeichen a-z sowie + und - erlaubt";
21071
- case LUT_SUCHE_INVALID_CNT: return "Suche: es m&uuml;ssen zwischen 1 und 26 Suchmuster angegeben werden";
21170
+ case LUT_SUCHE_INVALID_CMD: return "bei der Suche sind im Verkn&uuml;pfungsstring nur die Zeichen a-z sowie + und - erlaubt";
21171
+ case LUT_SUCHE_INVALID_CNT: return "bei der Suche m&uuml;ssen zwischen 1 und 26 Suchmuster angegeben werden";
21072
21172
  case LUT2_VOLLTEXT_NOT_INITIALIZED: return "Das Feld Volltext wurde nicht initialisiert";
21073
21173
  case NO_OWN_IBAN_CALCULATION: return "das Institut erlaubt keine eigene IBAN-Berechnung";
21074
- case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden";
21174
+ case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurde beim Kompilieren nicht eingebunden";
21075
21175
  case KTO_CHECK_INVALID_COMPRESSION_LIB: return "der angegebene Wert f&uuml;r die Default-Kompression ist ung&uuml;ltig";
21076
21176
  case OK_UNTERKONTO_ATTACHED_OLD: return "(nicht mehr als Fehler, sondern positive Ausgabe - Dummy f&uuml;r den alten Wert)";
21077
21177
  case KTO_CHECK_DEFAULT_BLOCK_INVALID: return "Ung&uuml;ltige Signatur im Default-Block";
@@ -21127,7 +21227,7 @@ DLL_EXPORT const char *kto_check_retval2html(int retval)
21127
21227
  case LUT2_NOT_YET_VALID: return "Der Datensatz ist noch nicht g&uuml;ltig";
21128
21228
  case LUT2_NO_LONGER_VALID: return "Der Datensatz ist nicht mehr g&uuml;ltig";
21129
21229
  case LUT2_GUELTIGKEIT_SWAPPED: return "Im G&uuml;ltigkeitsdatum sind Anfangs- und Enddatum vertauscht";
21130
- case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene G&uuml;ltigkeitsdatum ist ung&uuml;ltig (Soll: JJJJMMTT-JJJJMMTT)";
21230
+ case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene G&uuml;ltigkeitsdatum ist ung&uuml;ltig (Sollformat ist JJJJMMTT-JJJJMMTT)";
21131
21231
  case LUT2_INDEX_OUT_OF_RANGE: return "Der Index f&uuml;r die Filiale ist ung&uuml;ltig";
21132
21232
  case LUT2_INIT_IN_PROGRESS: return "Die Bibliothek wird gerade neu initialisiert";
21133
21233
  case LUT2_BLZ_NOT_INITIALIZED: return "Das Feld BLZ wurde nicht initialisiert";
@@ -21204,14 +21304,14 @@ DLL_EXPORT const char *kto_check_retval2html(int retval)
21204
21304
  case OK_NACHFOLGE_BLZ_USED: return "ok, f&uuml;r die BLZ wurde allerdings die Nachfolge-BLZ eingesetzt";
21205
21305
  case OK_KTO_REPLACED: return "ok, die Kontonummer wurde allerdings ersetzt";
21206
21306
  case OK_BLZ_REPLACED: return "ok, die Bankleitzahl wurde allerdings ersetzt";
21207
- case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurde allerdings ersetzt";
21307
+ case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurden allerdings ersetzt";
21208
21308
  case OK_IBAN_WITHOUT_KC_TEST: return "ok, die Bankverbindung ist (ohne Test) als richtig anzusehen";
21209
- case OK_INVALID_FOR_IBAN: return "ok, f&uuml;r IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
21309
+ case OK_INVALID_FOR_IBAN: return "ok, f&uuml;r die die IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
21210
21310
  case OK_HYPO_REQUIRES_KTO: return "ok, f&uuml;r die BIC-Bestimmung der ehemaligen Hypo-Bank f&uuml;r IBAN wird i.A. zus&auml;tzlich die Kontonummer ben&ouml;tigt";
21211
21311
  case OK_KTO_REPLACED_NO_PZ: return "ok, die Kontonummer wurde ersetzt, die neue Kontonummer hat keine Pr&uuml;fziffer";
21212
21312
  case OK_UNTERKONTO_ATTACHED: return "ok, es wurde ein (weggelassenes) Unterkonto angef&uuml;gt";
21313
+ case OK_SHORT_BIC_USED: return "ok, f&uuml;r den BIC wurde die Zweigstellennummer allerdings durch XXX ersetzt";
21213
21314
  default: return "ung&uuml;ltiger R&uuml;ckgabewert";
21214
- #line 19462 "konto_check.lxx"
21215
21315
  }
21216
21316
  }
21217
21317
 
@@ -21227,9 +21327,11 @@ DLL_EXPORT const char *kto_check_retval2html(int retval)
21227
21327
  DLL_EXPORT const char *kto_check_retval2utf8(int retval)
21228
21328
  {
21229
21329
  switch(retval){
21330
+ case IBAN_ONLY_GERMAN: return "Es werden nur deutsche IBANs unterstützt";
21331
+ case INVALID_PARAMETER_TYPE: return "Falscher Parametertyp für die Funktion";
21230
21332
  case BIC_ONLY_GERMAN: return "Es werden nur deutsche BICs unterstützt";
21231
21333
  case INVALID_BIC_LENGTH: return "Die Länge des BIC muß genau 8 oder 11 Zeichen sein";
21232
- case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Prüfsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (BLZ nicht ersetzt, wahrscheinlich falsch)";
21334
+ case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "Die IBAN-Prüfsumme stimmt, die BLZ sollte aber durch eine zentrale BLZ ersetzt werden. Die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
21233
21335
  case IBAN_CHKSUM_OK_KC_NOT_INITIALIZED: return "Die IBAN-Prüfsumme stimmt, konto_check wurde jedoch noch nicht initialisiert (Kontoprüfung nicht möglich)";
21234
21336
  case IBAN_CHKSUM_OK_BLZ_INVALID: return "Die IBAN-Prüfsumme stimmt, die BLZ ist allerdings ungültig";
21235
21337
  case IBAN_CHKSUM_OK_NACHFOLGE_BLZ_DEFINED: return "Die IBAN-Prüfsumme stimmt, für die Bank gibt es allerdings eine (andere) Nachfolge-BLZ";
@@ -21241,7 +21343,7 @@ DLL_EXPORT const char *kto_check_retval2utf8(int retval)
21241
21343
  case BLZ_BLACKLISTED: return "Die BLZ findet sich in der Ausschlussliste für IBAN-Berechnungen";
21242
21344
  case BLZ_MARKED_AS_DELETED: return "Die BLZ ist in der Bundesbank-Datei als gelöscht markiert und somit ungültig";
21243
21345
  case IBAN_CHKSUM_OK_SOMETHING_WRONG: return "Die IBAN-Prüfsumme stimmt, es gibt allerdings einen Fehler in der eigenen IBAN-Bestimmung (wahrscheinlich falsch)";
21244
- case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Prüfsumme stimmt, eine IBAN-Berechnung ist allerdings nicht erlaubt (wahrscheinlich falsch)";
21346
+ case IBAN_CHKSUM_OK_NO_IBAN_CALCULATION: return "Die IBAN-Prüfsumme stimmt. Die Bank gibt IBANs nach nicht veröffentlichten Regeln heraus, die Richtigkeit der IBAN kann nur mit einer Anfrage bei der Bank ermittelt werden";
21245
21347
  case IBAN_CHKSUM_OK_RULE_IGNORED: return "Die IBAN-Prüfsumme stimmt, es wurde allerdings eine IBAN-Regel nicht beachtet (wahrscheinlich falsch)";
21246
21348
  case IBAN_CHKSUM_OK_UNTERKTO_MISSING: return "Die IBAN-Prüfsumme stimmt, es fehlt aber ein Unterkonto (wahrscheinlich falsch)";
21247
21349
  case IBAN_INVALID_RULE: return "Die BLZ passt nicht zur angegebenen IBAN-Regel";
@@ -21256,11 +21358,11 @@ DLL_EXPORT const char *kto_check_retval2utf8(int retval)
21256
21358
  case LUT2_VOLLTEXT_INVALID_CHAR: return "Ungültiges Zeichen ( ()+-/&.,\' ) für die Volltextsuche gefunden";
21257
21359
  case LUT2_VOLLTEXT_SINGLE_WORD_ONLY: return "Die Volltextsuche sucht jeweils nur ein einzelnes Wort, benutzen Sie lut_suche_multiple() zur Suche nach mehreren Worten";
21258
21360
  case LUT_SUCHE_INVALID_RSC: return "die angegebene Suchresource ist ungültig";
21259
- case LUT_SUCHE_INVALID_CMD: return "Suche: im Verknüpfungsstring sind nur die Zeichen a-z sowie + und - erlaubt";
21260
- case LUT_SUCHE_INVALID_CNT: return "Suche: es müssen zwischen 1 und 26 Suchmuster angegeben werden";
21361
+ case LUT_SUCHE_INVALID_CMD: return "bei der Suche sind im Verknüpfungsstring nur die Zeichen a-z sowie + und - erlaubt";
21362
+ case LUT_SUCHE_INVALID_CNT: return "bei der Suche müssen zwischen 1 und 26 Suchmuster angegeben werden";
21261
21363
  case LUT2_VOLLTEXT_NOT_INITIALIZED: return "Das Feld Volltext wurde nicht initialisiert";
21262
21364
  case NO_OWN_IBAN_CALCULATION: return "das Institut erlaubt keine eigene IBAN-Berechnung";
21263
- case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurden beim Kompilieren nicht eingebunden";
21365
+ case KTO_CHECK_UNSUPPORTED_COMPRESSION: return "die notwendige Kompressions-Bibliothek wurde beim Kompilieren nicht eingebunden";
21264
21366
  case KTO_CHECK_INVALID_COMPRESSION_LIB: return "der angegebene Wert für die Default-Kompression ist ungültig";
21265
21367
  case OK_UNTERKONTO_ATTACHED_OLD: return "(nicht mehr als Fehler, sondern positive Ausgabe - Dummy für den alten Wert)";
21266
21368
  case KTO_CHECK_DEFAULT_BLOCK_INVALID: return "Ungültige Signatur im Default-Block";
@@ -21316,7 +21418,7 @@ DLL_EXPORT const char *kto_check_retval2utf8(int retval)
21316
21418
  case LUT2_NOT_YET_VALID: return "Der Datensatz ist noch nicht gültig";
21317
21419
  case LUT2_NO_LONGER_VALID: return "Der Datensatz ist nicht mehr gültig";
21318
21420
  case LUT2_GUELTIGKEIT_SWAPPED: return "Im Gültigkeitsdatum sind Anfangs- und Enddatum vertauscht";
21319
- case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene Gültigkeitsdatum ist ungültig (Soll: JJJJMMTT-JJJJMMTT)";
21421
+ case LUT2_INVALID_GUELTIGKEIT: return "Das angegebene Gültigkeitsdatum ist ungültig (Sollformat ist JJJJMMTT-JJJJMMTT)";
21320
21422
  case LUT2_INDEX_OUT_OF_RANGE: return "Der Index für die Filiale ist ungültig";
21321
21423
  case LUT2_INIT_IN_PROGRESS: return "Die Bibliothek wird gerade neu initialisiert";
21322
21424
  case LUT2_BLZ_NOT_INITIALIZED: return "Das Feld BLZ wurde nicht initialisiert";
@@ -21393,14 +21495,14 @@ DLL_EXPORT const char *kto_check_retval2utf8(int retval)
21393
21495
  case OK_NACHFOLGE_BLZ_USED: return "ok, für die BLZ wurde allerdings die Nachfolge-BLZ eingesetzt";
21394
21496
  case OK_KTO_REPLACED: return "ok, die Kontonummer wurde allerdings ersetzt";
21395
21497
  case OK_BLZ_REPLACED: return "ok, die Bankleitzahl wurde allerdings ersetzt";
21396
- case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurde allerdings ersetzt";
21498
+ case OK_BLZ_KTO_REPLACED: return "ok, die Bankleitzahl und Kontonummer wurden allerdings ersetzt";
21397
21499
  case OK_IBAN_WITHOUT_KC_TEST: return "ok, die Bankverbindung ist (ohne Test) als richtig anzusehen";
21398
- case OK_INVALID_FOR_IBAN: return "ok, für IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
21500
+ case OK_INVALID_FOR_IBAN: return "ok, für die die IBAN ist (durch eine Regel) allerdings ein anderer BIC definiert";
21399
21501
  case OK_HYPO_REQUIRES_KTO: return "ok, für die BIC-Bestimmung der ehemaligen Hypo-Bank für IBAN wird i.A. zusätzlich die Kontonummer benötigt";
21400
21502
  case OK_KTO_REPLACED_NO_PZ: return "ok, die Kontonummer wurde ersetzt, die neue Kontonummer hat keine Prüfziffer";
21401
21503
  case OK_UNTERKONTO_ATTACHED: return "ok, es wurde ein (weggelassenes) Unterkonto angefügt";
21504
+ case OK_SHORT_BIC_USED: return "ok, für den BIC wurde die Zweigstellennummer allerdings durch XXX ersetzt";
21402
21505
  default: return "ungültiger Rückgabewert";
21403
- #line 19479 "konto_check.lxx"
21404
21506
  }
21405
21507
  }
21406
21508
 
@@ -21416,6 +21518,8 @@ DLL_EXPORT const char *kto_check_retval2utf8(int retval)
21416
21518
  DLL_EXPORT const char *kto_check_retval2txt_short(int retval)
21417
21519
  {
21418
21520
  switch(retval){
21521
+ case IBAN_ONLY_GERMAN: return "IBAN_ONLY_GERMAN";
21522
+ case INVALID_PARAMETER_TYPE: return "INVALID_PARAMETER_TYPE";
21419
21523
  case BIC_ONLY_GERMAN: return "BIC_ONLY_GERMAN";
21420
21524
  case INVALID_BIC_LENGTH: return "INVALID_BIC_LENGTH";
21421
21525
  case IBAN_CHKSUM_OK_RULE_IGNORED_BLZ: return "IBAN_CHKSUM_OK_RULE_IGNORED_BLZ";
@@ -21588,8 +21692,8 @@ DLL_EXPORT const char *kto_check_retval2txt_short(int retval)
21588
21692
  case OK_HYPO_REQUIRES_KTO: return "OK_HYPO_REQUIRES_KTO";
21589
21693
  case OK_KTO_REPLACED_NO_PZ: return "OK_KTO_REPLACED_NO_PZ";
21590
21694
  case OK_UNTERKONTO_ATTACHED: return "OK_UNTERKONTO_ATTACHED";
21695
+ case OK_SHORT_BIC_USED: return "OK_SHORT_BIC_USED";
21591
21696
  default: return "UNDEFINED_RETVAL";
21592
- #line 19496 "konto_check.lxx"
21593
21697
  }
21594
21698
  }
21595
21699
 
@@ -21645,7 +21749,6 @@ DLL_EXPORT int get_lut_info2_b(char *lutname,int *version,char **prolog_p,char *
21645
21749
  }
21646
21750
  else
21647
21751
  **user_info_p=0;
21648
- #line 19537 "konto_check.lxx"
21649
21752
  FREE(prolog);
21650
21753
  return OK;
21651
21754
  }
@@ -21765,6 +21868,9 @@ DLL_EXPORT const char *get_kto_check_version(void)
21765
21868
 
21766
21869
  DLL_EXPORT const char *get_kto_check_version_x(int mode)
21767
21870
  {
21871
+ /* Arrays initialisieren, falls noch nicht gemacht */
21872
+ if(!(init_status&1))init_atoi_table();
21873
+
21768
21874
  switch(mode){
21769
21875
  default: /* 0 bzw. Default ist wie get_kto_check_version(), die Werte geben einzelne Felder zur�ck */
21770
21876
  case 0:
@@ -21776,27 +21882,20 @@ DLL_EXPORT const char *get_kto_check_version_x(int mode)
21776
21882
  case 3:
21777
21883
  return __DATE__ ", " __TIME__; /* Compilierdatum und -zeit */
21778
21884
  case 4: /* Datum der Pr�fziffermethode */
21779
- #if 0
21885
+ #if 1
21780
21886
  if(pz_aenderungen_aktivieren)
21781
- return "09.12.2013";
21887
+ return "03.03.2014";
21782
21888
  else
21783
- return "03.06.2013 (Aenderungen vom 09.12.2013 enthalten aber noch nicht aktiviert)";
21889
+ return "09.12.2013 (Aenderungen vom 03.03.2014 enthalten aber noch nicht aktiviert)";
21784
21890
  #else
21785
- return "09.12.2013";
21891
+ return "03.03.2014";
21786
21892
  #endif
21787
21893
  case 5:
21788
- #if DB_NEUE_VERSION>0
21789
- if(pz_aenderungen_aktivieren)
21790
- return "09.12.2013"; /* Datum der IBAN-Regeln */
21791
- else
21792
- return "09.12.2013 (Regel 20 / Deutsche Bank: Version 1.6 aus der Bundesbank-Mail vom 30.8.2013)"; /* Datum der IBAN-Regeln */
21793
- #else
21794
- return "09.12.2013";
21795
- #endif
21894
+ return "03.03.2014";
21796
21895
  case 6:
21797
- return "6. Dezember 2013"; /* Klartext-Datum der Bibliotheksversion */
21896
+ return "3. M�rz 2014"; /* Klartext-Datum der Bibliotheksversion */
21798
21897
  case 7:
21799
- return "development"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
21898
+ return "final"; /* Versions-Typ der Bibliotheksversion (development, beta, final) */
21800
21899
  }
21801
21900
  }
21802
21901
 
@@ -21942,7 +22041,6 @@ DLL_EXPORT int dump_lutfile(char *outputname,UINT4 *required)
21942
22041
  default:
21943
22042
  break;
21944
22043
  }
21945
- #line 19773 "konto_check.lxx"
21946
22044
  fputc('\n',out);
21947
22045
  while(--i)fputc('=',out);
21948
22046
  fputc('\n',out);
@@ -22219,7 +22317,7 @@ DLL_EXPORT const char *iban2bic(char *iban,int *retval,char *blz,char *kto)
22219
22317
  for(ptr=papier,dptr=iban2;*ptr;ptr++)if(*ptr!=' ')*dptr++=*ptr;
22220
22318
  *dptr=0;
22221
22319
  FREE(papier);
22222
- if(strcmp(iban,iban2) && retval){
22320
+ if(strcasecmp(iban,iban2) && retval){
22223
22321
  if(regel>0)
22224
22322
  *retval=IBAN_CHKSUM_OK_RULE_IGNORED;
22225
22323
  else /* bei Regel==0 kann nur ein Unterkonto fehlen */
@@ -22309,7 +22407,6 @@ DLL_EXPORT const char *iban2bic(char *iban,int *retval,char *blz,char *kto)
22309
22407
  * ###########################################################################
22310
22408
  */
22311
22409
 
22312
- #line 20140 "konto_check.lxx"
22313
22410
  DLL_EXPORT char *iban_gen(char *blz,char *kto,int *retval)
22314
22411
  {
22315
22412
  return iban_bic_gen(blz,kto,NULL,NULL,NULL,retval);
@@ -22357,32 +22454,6 @@ DLL_EXPORT char *iban_bic_gen(char *blz,char *kto,const char **bicp,char *blz2,c
22357
22454
  /* BLZ numerisch darstellen */
22358
22455
  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]];
22359
22456
 
22360
- /* Alle BLZs der Flessa-Bank werden f�r die IBAN-Generierung auf 79330111
22361
- * umgesetzt (siehe dazu http://www.flessabank.de/aktuell.php?akt=149). In
22362
- * konto_check.h findet sich ein Auszug von dieser Seite.
22363
- *
22364
- * In CONFIG.INI sind die BLZs der der Flessa-Bank auskommentiert (d.h.
22365
- * sie sind f�r die Selbstgenerierung zugelassen); dabei steht allerdings
22366
- * noch die Anmerkung "Flessa Sonderfall implementiert ab 19.4.2012" (das
22367
- * bezieht sich wohl auch auf das Umsetzen der BLZ). Wenn die neue
22368
- * CONFIG.INI mit einer alten konto_check-Version ohne diese Korrektur
22369
- * eingesetzt wird, werden f�r die BLZs der Flessa-Bank (au�er 79330111)
22370
- * syntaktisch richtige, aber ansonsten falsche IBANs erzeugt.
22371
- *
22372
- * Die Kontonummern der Flessa-Bank bleiben trotz der Umstellung erhalten.
22373
- * (siehe dazu die angegebene Webseite).
22374
- *
22375
- * Ab dem 9. September 2013 sind die Daten als gel�scht markiert, und die BLZ
22376
- * 79330111 ist als Nachfolge-BLZ eingetragen. Damit ist diese Korrektur hinf�llig
22377
- * und das Makro kann auf 0 gesetzt werden (bzw. bald verschwinden).
22378
- */
22379
- #if FLESSA_KORREKTUR
22380
- if(blz_i==70030111 || blz_i==76330111 || blz_i==77030111 || blz_i==78330111 || blz_i==84030111){
22381
- blz=(char*)"79330111";
22382
- blz_i=79330111;
22383
- }
22384
- #endif
22385
-
22386
22457
  /* BLZ und Kontonummer in eigenen Speicherbereich kopieren, Konto links mit Nullen f�llen */
22387
22458
  #if USE_IBAN_RULES
22388
22459
  for(ptr=blz,dptr=blz_n;(*dptr++=*ptr++););
@@ -22690,7 +22761,7 @@ DLL_EXPORT int ci_check(char *ci)
22690
22761
  DLL_EXPORT int iban_check(char *iban,int *retval)
22691
22762
  {
22692
22763
  char c,check[128],*papier2,iban1[64],iban2[24],*blz2,*kto2,*ptr,*dptr;
22693
- int j,test,ret,ret_kc,iban_len,regel,uk,nachfolge;
22764
+ int j,test,ret,ret_kc=0,iban_len,regel,uk,nachfolge;
22694
22765
  UINT4 zahl,rest;
22695
22766
 
22696
22767
  if(!iban || !*iban){
@@ -22897,11 +22968,13 @@ DLL_EXPORT int iban_check(char *iban,int *retval)
22897
22968
  for(ptr=papier2,dptr=iban2;*ptr;ptr++)if(*ptr!=' ')*dptr++=*ptr;
22898
22969
  *dptr=0;
22899
22970
  FREE(papier2);
22900
- if(strcmp(iban,iban2)){
22971
+ if(strcasecmp(iban,iban2)){
22901
22972
  if(regel>0){
22902
- if(!strcmp(iban+12,iban2+12))
22973
+ #if EXTRA_BLZ_REGEL
22974
+ if(!strcmp(iban+12,iban2+12)) /* nur BLZ ge�ndert */
22903
22975
  return IBAN_CHKSUM_OK_RULE_IGNORED_BLZ;
22904
22976
  else
22977
+ #endif
22905
22978
  return IBAN_CHKSUM_OK_RULE_IGNORED;
22906
22979
  }
22907
22980
  else if(nachfolge)
@@ -23077,7 +23150,6 @@ DLL_EXPORT int ipi_check(char *zweck)
23077
23150
  * # Copyright (C) 2009,2011 Michael Plugge <m.plugge@hs-mannheim.de> #
23078
23151
  * ###########################################################################
23079
23152
  */
23080
- #line 20908 "konto_check.lxx"
23081
23153
 
23082
23154
  /* Funktion volltext_zeichen() +���2 */
23083
23155
  /* Diese Funktion gibt f�r Zeichen die bei der Volltextsuche g�ltig sind
@@ -23910,7 +23982,19 @@ static int qcmp_sortc(const void *ap,const void *bp)
23910
23982
  return a-b;
23911
23983
  }
23912
23984
 
23913
- #line 21741 "konto_check.lxx"
23985
+ /* Funktion qcmp_bic_h() +���3 */
23986
+ static int qcmp_bic_h(const void *ap,const void *bp)
23987
+ {
23988
+ int a,b,r;
23989
+
23990
+ a=*((int *)ap);
23991
+ b=*((int *)bp);
23992
+ if((r=stri_cmp(bic_h[a],bic_h[b])))
23993
+ return r;
23994
+ else
23995
+ return a-b;
23996
+ }
23997
+
23914
23998
 
23915
23999
  /* Funktion qcmp_bic() +���3 */
23916
24000
  static int qcmp_bic(const void *ap,const void *bp)
@@ -24015,7 +24099,6 @@ static int qcmp_iban_regel(const void *ap,const void *bp)
24015
24099
  else
24016
24100
  return a-b;
24017
24101
  }
24018
- #line 21756 "konto_check.lxx"
24019
24102
 
24020
24103
  /* Funktion init_blzf() +���2
24021
24104
  * Diese Funktion initialisiert das Array mit den Bankleitzahlen f�r alle
@@ -24083,7 +24166,6 @@ DLL_EXPORT int konto_check_idx2blz(int idx,int *zweigstelle,int *retval)
24083
24166
  }
24084
24167
 
24085
24168
  /* Funktion suche_int1() +���2 */
24086
- #line 21824 "konto_check.lxx"
24087
24169
  static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
24088
24170
  int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int cnt,int such_idx)
24089
24171
  {
@@ -24134,7 +24216,6 @@ static int suche_int1(int a1,int a2,int *anzahl,int **start_idx,int **zweigstell
24134
24216
  }
24135
24217
 
24136
24218
  /* Funktion suche_int2() +���2 */
24137
- #line 21875 "konto_check.lxx"
24138
24219
  static int suche_int2(int a1,int a2,int *anzahl,int **start_idx,int **zweigstellen_base,int **blz_base,
24139
24220
  int **base_name,int **base_sort,int(*cmp)(const void *, const void *),int such_idx,int pz_suche)
24140
24221
  {
@@ -24410,6 +24491,9 @@ DLL_EXPORT int lut_suche_set(int such_id,int idx,int typ,int i1,int i2,char *txt
24410
24491
  case LUT_SUCHE_BIC:
24411
24492
  if((ret=lut_suche_bic(txt,NULL,NULL,NULL,NULL,NULL))<0 && ret!=KEY_NOT_FOUND)return ret;
24412
24493
  break;
24494
+ case LUT_SUCHE_BIC_H:
24495
+ if((ret=lut_suche_bic_h(txt,NULL,NULL,NULL,NULL,NULL))<0 && ret!=KEY_NOT_FOUND)return ret;
24496
+ break;
24413
24497
  case LUT_SUCHE_NAMEN:
24414
24498
  if((ret=lut_suche_namen(txt,NULL,NULL,NULL,NULL,NULL))<0 && ret!=KEY_NOT_FOUND)return ret;
24415
24499
  break;
@@ -24478,6 +24562,10 @@ DLL_EXPORT int lut_suche(int such_id,char *such_cmd,UINT4 *such_cnt,UINT4 **fili
24478
24562
  if((ret=lut_suche_bic(such_array[i].suche_str,
24479
24563
  &(ergebnis[i].cnt),&(ergebnis[i].start_idx),NULL,NULL,NULL))<0 && ret!=KEY_NOT_FOUND)return ret;
24480
24564
  break;
24565
+ case LUT_SUCHE_BIC_H:
24566
+ if((ret=lut_suche_bic_h(such_array[i].suche_str,
24567
+ &(ergebnis[i].cnt),&(ergebnis[i].start_idx),NULL,NULL,NULL))<0 && ret!=KEY_NOT_FOUND)return ret;
24568
+ break;
24481
24569
  case LUT_SUCHE_NAMEN:
24482
24570
  if((ret=lut_suche_namen(such_array[i].suche_str,
24483
24571
  &(ergebnis[i].cnt),&(ergebnis[i].start_idx),NULL,NULL,NULL))<0 && ret!=KEY_NOT_FOUND)return ret;
@@ -24625,6 +24713,8 @@ DLL_EXPORT int lut_suche_multiple(char *such_str,int uniq,char *such_cmd,UINT4 *
24625
24713
  typ=LUT_SUCHE_BLZ;
24626
24714
  else if(tolower(*ptr)=='i')
24627
24715
  typ=LUT_SUCHE_BIC;
24716
+ else if(tolower(*ptr)=='h')
24717
+ typ=LUT_SUCHE_BIC_H;
24628
24718
  break;
24629
24719
 
24630
24720
  case 'k':
@@ -24703,7 +24793,6 @@ static int cmp_suche_sort(const void *ap,const void *bp)
24703
24793
  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)
24704
24794
  {
24705
24795
  int i,j,last_idx,*idx_a,*cnt_o;
24706
- #line 22445 "konto_check.lxx"
24707
24796
 
24708
24797
  if(idx_op)*idx_op=NULL;
24709
24798
  if(cnt_op)*cnt_op=NULL;
@@ -24914,7 +25003,7 @@ DLL_EXPORT int lut_suche_blz(int such1,int such2,int *anzahl,int **start_idx,int
24914
25003
  return suche_int1(such1,such2,anzahl,start_idx,zweigstellen_base,blz_base,&blz_f,&sort_blz,qcmp_blz,cnt,0);
24915
25004
  }
24916
25005
 
24917
- #line 22677 "konto_check.lxx"
25006
+ #line 22783 "konto_check.lxx"
24918
25007
  /* Funktion lut_suche_bic() +���2 */
24919
25008
  DLL_EXPORT int lut_suche_bic(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
24920
25009
  char ***base_name,int **blz_base)
@@ -24968,7 +25057,6 @@ DLL_EXPORT int lut_suche_pz(int such1,int such2,int *anzahl,int **start_idx,int
24968
25057
  {
24969
25058
  int retval;
24970
25059
 
24971
-
24972
25060
  if(anzahl)*anzahl=0;
24973
25061
  if(such2 && such1>such2)return INVALID_SEARCH_RANGE;
24974
25062
  if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
@@ -24982,7 +25070,6 @@ DLL_EXPORT int lut_suche_pz(int such1,int such2,int *anzahl,int **start_idx,int
24982
25070
  /* Funktion lut_suche_plz() +���2 */
24983
25071
  DLL_EXPORT int lut_suche_plz(int such1,int such2,int *anzahl,int **start_idx,int **zweigstellen_base,int **base_name,int **blz_base)
24984
25072
  {
24985
-
24986
25073
  if(anzahl)*anzahl=0;
24987
25074
  if(such2 && such1>such2)return INVALID_SEARCH_RANGE;
24988
25075
  if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
@@ -24995,7 +25082,6 @@ DLL_EXPORT int lut_suche_plz(int such1,int such2,int *anzahl,int **start_idx,int
24995
25082
  /* Funktion lut_suche_regel() +���2 */
24996
25083
  DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,int **zweigstellen_base,int **base_name,int **blz_base)
24997
25084
  {
24998
-
24999
25085
  if(anzahl)*anzahl=0;
25000
25086
  if(such2 && such1>such2)return INVALID_SEARCH_RANGE;
25001
25087
  if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
@@ -25005,7 +25091,579 @@ DLL_EXPORT int lut_suche_regel(int such1,int such2,int *anzahl,int **start_idx,i
25005
25091
  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);
25006
25092
  }
25007
25093
 
25008
- #line 22710 "konto_check.lxx"
25094
+
25095
+ /* Funktion lut_suche_bic_h() +���2 */
25096
+ DLL_EXPORT int lut_suche_bic_h(char *such_name,int *anzahl,int **start_idx,int **zweigstellen_base,
25097
+ char ***base_name,int **blz_base)
25098
+ {
25099
+ if(anzahl)*anzahl=0;
25100
+ if((init_status&7)<7)return LUT2_NOT_INITIALIZED;
25101
+ if(lut_id_status==FALSE)return LUT1_FILE_USED;
25102
+ if(!bic_h)return LUT2_BIC_NOT_INITIALIZED;
25103
+ if(base_name)*base_name=bic_h;
25104
+ return suche_str(such_name,anzahl,start_idx,zweigstellen_base,blz_base,&bic_h,&sort_bic_h,qcmp_bic_h,LUT2_BIC_H_SORT);
25105
+ }
25106
+
25107
+ /* Funktion bic_info() +���2
25108
+ * Die Funktion bic_info() sucht Banken mit einem bestimmten BIC und gibt
25109
+ * die gefundene Anzahl sowie den Startindex in den internen Arrays zur�ck.
25110
+ * Sie ist f�r die Funktionsgruppe biq_* gedacht, falls mehrere Werte aus der
25111
+ * BLZ-Datei bestimmt werden sollen (z.B. verschiedene Felder oder Werte f�r
25112
+ * mehrere Zweigstellen einer Bank). So erspart man sich die relativ aufwendige
25113
+ * Suche; sie ist nur einmal notwendig.
25114
+ *
25115
+ * Parameter:
25116
+ * bic1: BIC zu dem die Banken bestimmt werden sollen (komplett oder teilweise)
25117
+ * mode: Suchmodus; er kann die folgenden Werte annehmen:
25118
+ * mode=1: Suche in allen BICs der BLZ-Datei (Haupt- und Nebenstellen)
25119
+ * mode=2: Suche nur in den BICs der Hauptstellen
25120
+ * mode=0: zun�chst Suche bei den Hauptstellen, dann bei Haupt- und Nebenstellen;
25121
+ * falls dann noch nichts gefunden wurde, werden die drei letzten Stellen
25122
+ * (Filialcode) mit XXX gef�llt und noch einmal eine Suche gemacht.
25123
+ * anzahl: in diesem Parameter wird die Anahl der gefundenen Banken zur�ckgegeben
25124
+ * start_idx: Startindex in den internen Arrays, positiv f�r das Hauptstellen-Array,
25125
+ * negativ f�r das allgemeine BIC-Array. Dieser Index wird als Parameter f�r
25126
+ * die Funktionsgruppe biq_* benutzt.
25127
+ */
25128
+ DLL_EXPORT int bic_info(char *bic1,int mode,int *anzahl,int *start_idx)
25129
+ {
25130
+ char *ptr,bic2[12];
25131
+ int *s_idx,retval,cnt;
25132
+
25133
+ switch(mode){
25134
+ case 0:
25135
+ default:
25136
+ retval=lut_suche_bic_h(bic1,&cnt,&s_idx,NULL,NULL,NULL);
25137
+ if(start_idx)*start_idx=(s_idx-sort_bic_h);
25138
+ if(!cnt){ /* Suche bei allen BICs (inklusive Nebenstellen) */
25139
+ retval=lut_suche_bic(bic1,&cnt,&s_idx,NULL,NULL,NULL);
25140
+ if(start_idx)*start_idx=(sort_bic-s_idx); /* negativer Startindex */
25141
+ }
25142
+ if(!cnt){ /* noch nichts gefunden, Zweigstellenteil des BIC mit XXX auff�llen (z.B. f�r Postbank) */
25143
+ memcpy(bic2,bic1,8); /* Hauptstellenteil kopieren */
25144
+ *(ptr=bic2+8)='X'; /* Nebenstellenteil mit 'X' f�llen */
25145
+ *++ptr='X';
25146
+ *++ptr='X';
25147
+ *++ptr=0;
25148
+ retval=lut_suche_bic(bic2,&cnt,&s_idx,NULL,NULL,NULL);
25149
+ if(retval>=OK)retval=OK_SHORT_BIC_USED;
25150
+ if(start_idx)*start_idx=(sort_bic-s_idx); /* negativer Startindex */
25151
+ }
25152
+ break;
25153
+ case 1:
25154
+ retval=lut_suche_bic(bic1,&cnt,&s_idx,NULL,NULL,NULL);
25155
+ if(start_idx)*start_idx=(sort_bic-s_idx); /* negativer Startindex */
25156
+ break;
25157
+ case 2:
25158
+ retval=lut_suche_bic_h(bic1,&cnt,&s_idx,NULL,NULL,NULL);
25159
+ if(start_idx)*start_idx=(s_idx-sort_bic_h);
25160
+ break;
25161
+ }
25162
+ if(anzahl)*anzahl=cnt;
25163
+ if(start_idx && !cnt)*start_idx=0;
25164
+ return retval;
25165
+ }
25166
+
25167
+ /* Funktion bic_\bic_*(), biq_* und iban_* +���2 */
25168
+ /* Diese Funktionen entsprechen weitgehend den Funktionen lut_*; sie k�nnen
25169
+ * benutzt werden, um Daten zu einem BIC oder einer IBAN zu bestimmen.
25170
+ *
25171
+ * Die Funktionen bic_*() bestimmen die Felder der BLZ-Datei zu einem BIC.
25172
+ * Der Parameter mode bestimmt dabei, wie der BIC gesucht wird (s.o. bei der
25173
+ * Funktion bic_info()). Zu einem BIC werden �blicherweise mehrere Banken gefunden;
25174
+ * diese werden nach BIC sortiert ausgegeben.
25175
+ *
25176
+ * Da der BIC nur ein sehr grobes Merkmal ist (bei der Postbank ist z.B. der Filialteil bei
25177
+ * allen Filialen auf XXX gesetzt, so da� alle Postbanken sich einen BIC teilen), wurden
25178
+ * zus�tzlich noch die Funktion iban_*() implementiert. Diese entsprechen den vorhergehenden
25179
+ * Funktionen, bestimmen allerdings aus der IBAN die BLZ und werten diese dann aus.
25180
+ */
25181
+ /* Funktion bic_aenderung(), biq_aenderung und iban_aenderung +���3 */
25182
+ /* ###############################################################################
25183
+ * # Diese Funktionen bestimmen das �nderungsflag zu einem BIC bzw. einer IBAN #
25184
+ * # #
25185
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25186
+ * ###############################################################################
25187
+ */
25188
+
25189
+ DLL_EXPORT int bic_aenderung(char *bic1,int mode,int filiale,int*retval)
25190
+ {
25191
+ return bic_fkt_c(bic1,mode,filiale,retval,aenderung);
25192
+ }
25193
+
25194
+ DLL_EXPORT int biq_aenderung(int idx,int*retval)
25195
+ {
25196
+ return biq_fkt_c(idx,retval,aenderung);
25197
+ }
25198
+
25199
+ DLL_EXPORT int iban_aenderung(char *iban,int filiale,int*retval)
25200
+ {
25201
+ return iban_fkt_c(iban,filiale,retval,lut_aenderung);
25202
+ }
25203
+
25204
+ /* Funktion bic_loeschung(), biq_loeschung und iban_loeschung +���3 */
25205
+ /* ###############################################################################
25206
+ * # Diese Funktionen bestimmen das L�schflag zu einem BIC bzw. einer IBAN #
25207
+ * # #
25208
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25209
+ * ###############################################################################
25210
+ */
25211
+
25212
+ DLL_EXPORT int bic_loeschung(char *bic1,int mode,int filiale,int*retval)
25213
+ {
25214
+ return bic_fkt_c(bic1,mode,filiale,retval,loeschung);
25215
+ }
25216
+
25217
+ DLL_EXPORT int biq_loeschung(int idx,int*retval)
25218
+ {
25219
+ return biq_fkt_c(idx,retval,loeschung);
25220
+ }
25221
+
25222
+ DLL_EXPORT int iban_loeschung(char *iban,int filiale,int*retval)
25223
+ {
25224
+ return iban_fkt_c(iban,filiale,retval,lut_loeschung);
25225
+ }
25226
+
25227
+ /* Funktion bic_iban_regel(), biq_iban_regel und iban_iban_regel +���3 */
25228
+ /* ###############################################################################
25229
+ * # Diese Funktionen bestimmen die IBAN-Regel zu einem BIC bzw. einer IBAN #
25230
+ * # #
25231
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25232
+ * ###############################################################################
25233
+ */
25234
+
25235
+ DLL_EXPORT int bic_iban_regel(char *bic1,int mode,int filiale,int*retval)
25236
+ {
25237
+ return bic_fkt_i(bic1,mode,filiale,retval,iban_regel);
25238
+ }
25239
+
25240
+ DLL_EXPORT int biq_iban_regel(int idx,int*retval)
25241
+ {
25242
+ return biq_fkt_i(idx,retval,iban_regel);
25243
+ }
25244
+
25245
+ DLL_EXPORT int iban_iban_regel(char *iban,int filiale,int*retval)
25246
+ {
25247
+ return iban_fkt_i(iban,filiale,retval,lut_iban_regel);
25248
+ }
25249
+
25250
+ /* Funktion bic_nachfolge_blz(), biq_nachfolge_blz und iban_nachfolge_blz +���3 */
25251
+ /* ###############################################################################
25252
+ * # Diese Funktionen bestimmen die Nachfolge-BLZ zu einem BIC bzw. einer IBAN #
25253
+ * # #
25254
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25255
+ * ###############################################################################
25256
+ */
25257
+
25258
+ DLL_EXPORT int bic_nachfolge_blz(char *bic1,int mode,int filiale,int*retval)
25259
+ {
25260
+ return bic_fkt_i(bic1,mode,filiale,retval,nachfolge_blz);
25261
+ }
25262
+
25263
+ DLL_EXPORT int biq_nachfolge_blz(int idx,int*retval)
25264
+ {
25265
+ return biq_fkt_i(idx,retval,nachfolge_blz);
25266
+ }
25267
+
25268
+ DLL_EXPORT int iban_nachfolge_blz(char *iban,int filiale,int*retval)
25269
+ {
25270
+ return iban_fkt_i(iban,filiale,retval,lut_nachfolge_blz);
25271
+ }
25272
+
25273
+ /* Funktion bic_nr(), biq_nr und iban_nr +���3 */
25274
+ /* ###############################################################################
25275
+ * # Diese Funktionen bestimmen die Laufende Nr. zu einem BIC bzw. einer IBAN #
25276
+ * # #
25277
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25278
+ * ###############################################################################
25279
+ */
25280
+
25281
+ DLL_EXPORT int bic_nr(char *bic1,int mode,int filiale,int*retval)
25282
+ {
25283
+ return bic_fkt_i(bic1,mode,filiale,retval,bank_nr);
25284
+ }
25285
+
25286
+ DLL_EXPORT int biq_nr(int idx,int*retval)
25287
+ {
25288
+ return biq_fkt_i(idx,retval,bank_nr);
25289
+ }
25290
+
25291
+ DLL_EXPORT int iban_nr(char *iban,int filiale,int*retval)
25292
+ {
25293
+ return iban_fkt_i(iban,filiale,retval,lut_nr);
25294
+ }
25295
+
25296
+ /* Funktion bic_pan(), biq_pan und iban_pan +���3 */
25297
+ /* ###############################################################################
25298
+ * # Diese Funktionen bestimmen den PAN zu einem BIC bzw. einer IBAN #
25299
+ * # #
25300
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25301
+ * ###############################################################################
25302
+ */
25303
+
25304
+ DLL_EXPORT int bic_pan(char *bic1,int mode,int filiale,int*retval)
25305
+ {
25306
+ return bic_fkt_i(bic1,mode,filiale,retval,pan);
25307
+ }
25308
+
25309
+ DLL_EXPORT int biq_pan(int idx,int*retval)
25310
+ {
25311
+ return biq_fkt_i(idx,retval,pan);
25312
+ }
25313
+
25314
+ DLL_EXPORT int iban_pan(char *iban,int filiale,int*retval)
25315
+ {
25316
+ return iban_fkt_i(iban,filiale,retval,lut_pan);
25317
+ }
25318
+
25319
+ /* Funktion bic_plz(), biq_plz und iban_plz +���3 */
25320
+ /* ###############################################################################
25321
+ * # Diese Funktionen bestimmen die PLZ der Bank zu einem BIC bzw. einer IBAN #
25322
+ * # #
25323
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25324
+ * ###############################################################################
25325
+ */
25326
+
25327
+ DLL_EXPORT int bic_plz(char *bic1,int mode,int filiale,int*retval)
25328
+ {
25329
+ return bic_fkt_i(bic1,mode,filiale,retval,plz);
25330
+ }
25331
+
25332
+ DLL_EXPORT int biq_plz(int idx,int*retval)
25333
+ {
25334
+ return biq_fkt_i(idx,retval,plz);
25335
+ }
25336
+
25337
+ DLL_EXPORT int iban_plz(char *iban,int filiale,int*retval)
25338
+ {
25339
+ return iban_fkt_i(iban,filiale,retval,lut_plz);
25340
+ }
25341
+
25342
+ /* Funktion bic_pz(), biq_pz und iban_pz +���3 */
25343
+ /* ###############################################################################
25344
+ * # Diese Funktionen bestimmen die Pr�fziffer zu einem BIC bzw. einer IBAN #
25345
+ * # #
25346
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25347
+ * ###############################################################################
25348
+ */
25349
+
25350
+ DLL_EXPORT int bic_pz(char *bic1,int mode,int filiale,int*retval)
25351
+ {
25352
+ return bic_fkt_i(bic1,mode,filiale,retval,pz_methoden);
25353
+ }
25354
+
25355
+ DLL_EXPORT int biq_pz(int idx,int*retval)
25356
+ {
25357
+ return biq_fkt_i(idx,retval,pz_methoden);
25358
+ }
25359
+
25360
+ DLL_EXPORT int iban_pz(char *iban,int filiale,int*retval)
25361
+ {
25362
+ return iban_fkt_i(iban,filiale,retval,lut_pz);
25363
+ }
25364
+
25365
+ /* Funktion bic_bic(), biq_bic und iban_bic +���3 */
25366
+ /* ###############################################################################
25367
+ * # Diese Funktionen bestimmen den BIC zu einem BIC bzw. einer IBAN #
25368
+ * # #
25369
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25370
+ * ###############################################################################
25371
+ */
25372
+
25373
+ DLL_EXPORT const char *bic_bic(char *bic1,int mode,int filiale,int*retval)
25374
+ {
25375
+ return bic_fkt_s(bic1,mode,filiale,retval,bic);
25376
+ }
25377
+
25378
+ DLL_EXPORT const char *biq_bic(int idx,int*retval)
25379
+ {
25380
+ return biq_fkt_s(idx,retval,bic);
25381
+ }
25382
+
25383
+ DLL_EXPORT const char *iban_bic(char *iban,int filiale,int*retval)
25384
+ {
25385
+ return iban_fkt_s(iban,filiale,retval,lut_bic);
25386
+ }
25387
+
25388
+ /* Funktion bic_bic_h(), biq_bic_h und iban_bic_h +���3 */
25389
+ /* ###############################################################################
25390
+ * # Diese Funktionen bestimmen den BIC der Hauptstelle zu einem BIC bzw. einer IBAN#
25391
+ * # #
25392
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25393
+ * ###############################################################################
25394
+ */
25395
+
25396
+ DLL_EXPORT const char *bic_bic_h(char *bic1,int mode,int filiale,int*retval)
25397
+ {
25398
+ return bic_fkt_s(bic1,mode,filiale,retval,bic_h);
25399
+ }
25400
+
25401
+ DLL_EXPORT const char *biq_bic_h(int idx,int*retval)
25402
+ {
25403
+ return biq_fkt_s(idx,retval,bic_h);
25404
+ }
25405
+
25406
+ DLL_EXPORT const char *iban_bic_h(char *iban,int filiale,int*retval)
25407
+ {
25408
+ return iban_fkt_s(iban,filiale,retval,lut_bic_h);
25409
+ }
25410
+
25411
+ /* Funktion bic_name(), biq_name und iban_name +���3 */
25412
+ /* ###############################################################################
25413
+ * # Diese Funktionen bestimmen den Name der Bank zu einem BIC bzw. einer IBAN #
25414
+ * # #
25415
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25416
+ * ###############################################################################
25417
+ */
25418
+
25419
+ DLL_EXPORT const char *bic_name(char *bic1,int mode,int filiale,int*retval)
25420
+ {
25421
+ return bic_fkt_s(bic1,mode,filiale,retval,name);
25422
+ }
25423
+
25424
+ DLL_EXPORT const char *biq_name(int idx,int*retval)
25425
+ {
25426
+ return biq_fkt_s(idx,retval,name);
25427
+ }
25428
+
25429
+ DLL_EXPORT const char *iban_name(char *iban,int filiale,int*retval)
25430
+ {
25431
+ return iban_fkt_s(iban,filiale,retval,lut_name);
25432
+ }
25433
+
25434
+ /* Funktion bic_name_kurz(), biq_name_kurz und iban_name_kurz +���3 */
25435
+ /* ###############################################################################
25436
+ * # Diese Funktionen bestimmen den Kurzname der Bank zu einem BIC bzw. einer IBAN#
25437
+ * # #
25438
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25439
+ * ###############################################################################
25440
+ */
25441
+
25442
+ DLL_EXPORT const char *bic_name_kurz(char *bic1,int mode,int filiale,int*retval)
25443
+ {
25444
+ return bic_fkt_s(bic1,mode,filiale,retval,name_kurz);
25445
+ }
25446
+
25447
+ DLL_EXPORT const char *biq_name_kurz(int idx,int*retval)
25448
+ {
25449
+ return biq_fkt_s(idx,retval,name_kurz);
25450
+ }
25451
+
25452
+ DLL_EXPORT const char *iban_name_kurz(char *iban,int filiale,int*retval)
25453
+ {
25454
+ return iban_fkt_s(iban,filiale,retval,lut_name_kurz);
25455
+ }
25456
+
25457
+ /* Funktion bic_ort(), biq_ort und iban_ort +���3 */
25458
+ /* ###############################################################################
25459
+ * # Diese Funktionen bestimmen den Ort einer Bank zu einem BIC bzw. einer IBAN #
25460
+ * # #
25461
+ * # Copyright (C) 2014 Michael Plugge <m.plugge@hs-mannheim.de> #
25462
+ * ###############################################################################
25463
+ */
25464
+
25465
+ DLL_EXPORT const char *bic_ort(char *bic1,int mode,int filiale,int*retval)
25466
+ {
25467
+ return bic_fkt_s(bic1,mode,filiale,retval,ort);
25468
+ }
25469
+
25470
+ DLL_EXPORT const char *biq_ort(int idx,int*retval)
25471
+ {
25472
+ return biq_fkt_s(idx,retval,ort);
25473
+ }
25474
+
25475
+ DLL_EXPORT const char *iban_ort(char *iban,int filiale,int*retval)
25476
+ {
25477
+ return iban_fkt_s(iban,filiale,retval,lut_ort);
25478
+ }
25479
+
25480
+ static int bic_fkt_c(char *bic1,int mode,int filiale,int*retval,char *base)
25481
+ {
25482
+ int cnt,start_idx,rv,ret1,ret2;
25483
+
25484
+ if((ret1=bic_info(bic1,mode,&cnt,&start_idx))<0){
25485
+ if(retval)*retval=ret1;
25486
+ return -1;
25487
+ }
25488
+ if(filiale>=cnt){
25489
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25490
+ return -1;
25491
+ }
25492
+ rv=biq_fkt_c(start_idx+filiale,&ret2,base);
25493
+ if(retval){
25494
+ if(ret2<0)
25495
+ *retval=ret2;
25496
+ else
25497
+ *retval=ret1;
25498
+ }
25499
+ return rv;
25500
+ }
25501
+
25502
+ static int biq_fkt_c(int idx,int*retval,char *base)
25503
+ {
25504
+ if(idx>0){
25505
+ if(idx>lut2_cnt){ /* der Test ist nur sehr grob, aber es gibt an dieser Stelle nicht mehr Infos */
25506
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25507
+ return -1;
25508
+ }
25509
+ if(retval)*retval=OK;
25510
+ return (int)base[sort_bic_h[idx]];
25511
+ }
25512
+ else{
25513
+ idx=-idx;
25514
+ if(idx>lut2_cnt){
25515
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25516
+ return -1;
25517
+ }
25518
+ if(retval)*retval=OK;
25519
+ return (int)base[sort_bic[idx]];
25520
+ }
25521
+ }
25522
+
25523
+ static int iban_fkt_c(char *iban,int filiale,int *retval,int(*fkt)(char*,int,int*))
25524
+ {
25525
+ char blz[9];
25526
+
25527
+ /* nur zwei kleine Tests */
25528
+ if((*iban!='d' && *iban!='D') || (iban[1]!='e' && iban[1]!='E')){
25529
+ if(retval)*retval= IBAN_ONLY_GERMAN;
25530
+ return -1;
25531
+ }
25532
+ if(strlen(iban)!=22){
25533
+ if(retval)*retval=INVALID_IBAN_LENGTH;
25534
+ return -1;
25535
+ }
25536
+
25537
+ memcpy(blz,iban+4,8);
25538
+ *(blz+8)=0;
25539
+ return fkt(iban,filiale,retval);
25540
+ }
25541
+
25542
+ static int bic_fkt_i(char *bic1,int mode,int filiale,int*retval,int *base)
25543
+ {
25544
+ int cnt,start_idx,rv,ret1,ret2;
25545
+
25546
+ if((ret1=bic_info(bic1,mode,&cnt,&start_idx))<0){
25547
+ if(retval)*retval=ret1;
25548
+ return -1;
25549
+ }
25550
+ if(filiale>=cnt){
25551
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25552
+ return -1;
25553
+ }
25554
+ rv=biq_fkt_i(start_idx+filiale,&ret2,base);
25555
+ if(retval){
25556
+ if(ret2<0)
25557
+ *retval=ret2;
25558
+ else
25559
+ *retval=ret1;
25560
+ }
25561
+ return rv;
25562
+ }
25563
+
25564
+ static int biq_fkt_i(int idx,int*retval,int *base)
25565
+ {
25566
+ if(idx>0){
25567
+ if(idx>lut2_cnt){ /* der Test ist nur sehr grob, aber es gibt an dieser Stelle nicht mehr Infos */
25568
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25569
+ return -1;
25570
+ }
25571
+ if(retval)*retval=OK;
25572
+ return base[sort_bic_h[idx]];
25573
+ }
25574
+ else{
25575
+ idx=-idx;
25576
+ if(idx>lut2_cnt){
25577
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25578
+ return -1;
25579
+ }
25580
+ if(retval)*retval=OK;
25581
+ return base[sort_bic[idx]];
25582
+ }
25583
+ }
25584
+
25585
+ static int iban_fkt_i(char *iban,int filiale,int *retval,int(*fkt)(char*,int,int*))
25586
+ {
25587
+ char blz[9];
25588
+
25589
+ /* nur zwei kleine Tests */
25590
+ if((*iban!='d' && *iban!='D') || (iban[1]!='e' && iban[1]!='E')){
25591
+ if(retval)*retval= IBAN_ONLY_GERMAN;
25592
+ return -1;
25593
+ }
25594
+ if(strlen(iban)!=22){
25595
+ if(retval)*retval=INVALID_IBAN_LENGTH;
25596
+ return -1;
25597
+ }
25598
+
25599
+ memcpy(blz,iban+4,8);
25600
+ *(blz+8)=0;
25601
+ return fkt(iban,filiale,retval);
25602
+ }
25603
+
25604
+ static const char *bic_fkt_s(char *bic1,int mode,int filiale,int*retval,char **base)
25605
+ {
25606
+ const char *rv;
25607
+ int cnt,start_idx,ret1,ret2;
25608
+
25609
+ if((ret1=bic_info(bic1,mode,&cnt,&start_idx))<0){
25610
+ if(retval)*retval=ret1;
25611
+ return NULL;
25612
+ }
25613
+ if(filiale>=cnt){
25614
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25615
+ return NULL;
25616
+ }
25617
+ rv=biq_fkt_s(start_idx+filiale,&ret2,base);
25618
+ if(retval){
25619
+ if(ret2<0)
25620
+ *retval=ret2;
25621
+ else
25622
+ *retval=ret1;
25623
+ }
25624
+ return rv;
25625
+ }
25626
+
25627
+ static const char *biq_fkt_s(int idx,int*retval,char **base)
25628
+ {
25629
+ if(idx>0){
25630
+ if(idx>lut2_cnt){ /* der Test ist nur sehr grob, aber es gibt an dieser Stelle nicht mehr Infos */
25631
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25632
+ return NULL;
25633
+ }
25634
+ if(retval)*retval=OK;
25635
+ return base[sort_bic_h[idx]];
25636
+ }
25637
+ else{
25638
+ idx=-idx;
25639
+ if(idx>lut2_cnt){
25640
+ if(retval)*retval=LUT2_INDEX_OUT_OF_RANGE;
25641
+ return NULL;
25642
+ }
25643
+ if(retval)*retval=OK;
25644
+ return base[sort_bic[idx]];
25645
+ }
25646
+ }
25647
+
25648
+ static const char *iban_fkt_s(char *iban,int filiale,int *retval,const char*(*fkt)(char*,int,int*))
25649
+ {
25650
+ char blz[9];
25651
+
25652
+ /* nur zwei kleine Tests f�r die IBAN, dann die BLZ kopieren und die Funktion aufrufen */
25653
+ if((*iban!='d' && *iban!='D') || (iban[1]!='e' && iban[1]!='E')){
25654
+ if(retval)*retval= IBAN_ONLY_GERMAN;
25655
+ return NULL;
25656
+ }
25657
+ if(strlen(iban)!=22){
25658
+ if(retval)*retval=INVALID_IBAN_LENGTH;
25659
+ return NULL;
25660
+ }
25661
+
25662
+ memcpy(blz,iban+4,8);
25663
+ *(blz+8)=0;
25664
+ return fkt(blz,filiale,retval);
25665
+ }
25666
+
25009
25667
 
25010
25668
  /* Funktion kto_check_set_default() und kto_check_set_default_bin() +���1 */
25011
25669
  /* ###########################################################################
@@ -25314,6 +25972,9 @@ DLL_EXPORT int kto_check_encoding(int mode)
25314
25972
 
25315
25973
  lut_encoding=encoding%10;
25316
25974
  switch(mode){
25975
+ case 0:
25976
+ return current_encoding;
25977
+
25317
25978
  case 1:
25318
25979
  case 'i':
25319
25980
  case 'I':
@@ -25659,7 +26320,7 @@ static int convert_encoding(char **data,UINT4 *len)
25659
26320
  DLL_EXPORT const char *pz2str(int pz,int *ret)
25660
26321
  {
25661
26322
  if(ret){
25662
- if(pz>=142)
26323
+ if(pz%1000>=142)
25663
26324
  *ret=NOT_DEFINED;
25664
26325
  else
25665
26326
  *ret=OK;
@@ -25807,228 +26468,190 @@ DLL_EXPORT const char *pz2str(int pz,int *ret)
25807
26468
  case 139: return "D9";
25808
26469
  case 140: return "E0";
25809
26470
  case 141: return "E1";
25810
- case 142: return "E2";
25811
- case 143: return "E3";
25812
- case 144: return "E4";
25813
- case 145: return "E5";
25814
- case 146: return "E6";
25815
- case 147: return "E7";
25816
- case 148: return "E8";
25817
- case 149: return "E9";
25818
- case 150: return "F0";
25819
- case 151: return "F1";
25820
- case 152: return "F2";
25821
- case 153: return "F3";
25822
- case 154: return "F4";
25823
- case 155: return "F5";
25824
- case 156: return "F6";
25825
- case 157: return "F7";
25826
- case 158: return "F8";
25827
- case 159: return "F9";
25828
- case 160: return "G0";
25829
- case 161: return "G1";
25830
- case 162: return "G2";
25831
- case 163: return "G3";
25832
- case 164: return "G4";
25833
- case 165: return "G5";
25834
- case 166: return "G6";
25835
- case 167: return "G7";
25836
- case 168: return "G8";
25837
- case 169: return "G9";
25838
- case 170: return "H0";
25839
- case 171: return "H1";
25840
- case 172: return "H2";
25841
- case 173: return "H3";
25842
- case 174: return "H4";
25843
- case 175: return "H5";
25844
- case 176: return "H6";
25845
- case 177: return "H7";
25846
- case 178: return "H8";
25847
- case 179: return "H9";
25848
- case 180: return "I0";
25849
- case 181: return "I1";
25850
- case 182: return "I2";
25851
- case 183: return "I3";
25852
- case 184: return "I4";
25853
- case 185: return "I5";
25854
- case 186: return "I6";
25855
- case 187: return "I7";
25856
- case 188: return "I8";
25857
- case 189: return "I9";
25858
- case 190: return "J0";
25859
- case 191: return "J1";
25860
- case 192: return "J2";
25861
- case 193: return "J3";
25862
- case 194: return "J4";
25863
- case 195: return "J5";
25864
- case 196: return "J6";
25865
- case 197: return "J7";
25866
- case 198: return "J8";
25867
- case 199: return "J9";
25868
- case 200: return "K0";
25869
- case 201: return "K1";
25870
- case 202: return "K2";
25871
- case 203: return "K3";
25872
- case 204: return "K4";
25873
- case 205: return "K5";
25874
- case 206: return "K6";
25875
- case 207: return "K7";
25876
- case 208: return "K8";
25877
- case 209: return "K9";
25878
- case 210: return "L0";
25879
- case 211: return "L1";
25880
- case 212: return "L2";
25881
- case 213: return "L3";
25882
- case 214: return "L4";
25883
- case 215: return "L5";
25884
- case 216: return "L6";
25885
- case 217: return "L7";
25886
- case 218: return "L8";
25887
- case 219: return "L9";
25888
- case 220: return "M0";
25889
- case 221: return "M1";
25890
- case 222: return "M2";
25891
- case 223: return "M3";
25892
- case 224: return "M4";
25893
- case 225: return "M5";
25894
- case 226: return "M6";
25895
- case 227: return "M7";
25896
- case 228: return "M8";
25897
- case 229: return "M9";
25898
- case 230: return "N0";
25899
- case 231: return "N1";
25900
- case 232: return "N2";
25901
- case 233: return "N3";
25902
- case 234: return "N4";
25903
- case 235: return "N5";
25904
- case 236: return "N6";
25905
- case 237: return "N7";
25906
- case 238: return "N8";
25907
- case 239: return "N9";
25908
- case 240: return "O0";
25909
- case 241: return "O1";
25910
- case 242: return "O2";
25911
- case 243: return "O3";
25912
- case 244: return "O4";
25913
- case 245: return "O5";
25914
- case 246: return "O6";
25915
- case 247: return "O7";
25916
- case 248: return "O8";
25917
- case 249: return "O9";
25918
- case 250: return "P0";
25919
- case 251: return "P1";
25920
- case 252: return "P2";
25921
- case 253: return "P3";
25922
- case 254: return "P4";
25923
- case 255: return "P5";
25924
- case 256: return "P6";
25925
- case 257: return "P7";
25926
- case 258: return "P8";
25927
- case 259: return "P9";
25928
- case 260: return "Q0";
25929
- case 261: return "Q1";
25930
- case 262: return "Q2";
25931
- case 263: return "Q3";
25932
- case 264: return "Q4";
25933
- case 265: return "Q5";
25934
- case 266: return "Q6";
25935
- case 267: return "Q7";
25936
- case 268: return "Q8";
25937
- case 269: return "Q9";
25938
- case 270: return "R0";
25939
- case 271: return "R1";
25940
- case 272: return "R2";
25941
- case 273: return "R3";
25942
- case 274: return "R4";
25943
- case 275: return "R5";
25944
- case 276: return "R6";
25945
- case 277: return "R7";
25946
- case 278: return "R8";
25947
- case 279: return "R9";
25948
- case 280: return "S0";
25949
- case 281: return "S1";
25950
- case 282: return "S2";
25951
- case 283: return "S3";
25952
- case 284: return "S4";
25953
- case 285: return "S5";
25954
- case 286: return "S6";
25955
- case 287: return "S7";
25956
- case 288: return "S8";
25957
- case 289: return "S9";
25958
- case 290: return "T0";
25959
- case 291: return "T1";
25960
- case 292: return "T2";
25961
- case 293: return "T3";
25962
- case 294: return "T4";
25963
- case 295: return "T5";
25964
- case 296: return "T6";
25965
- case 297: return "T7";
25966
- case 298: return "T8";
25967
- case 299: return "T9";
25968
- case 300: return "U0";
25969
- case 301: return "U1";
25970
- case 302: return "U2";
25971
- case 303: return "U3";
25972
- case 304: return "U4";
25973
- case 305: return "U5";
25974
- case 306: return "U6";
25975
- case 307: return "U7";
25976
- case 308: return "U8";
25977
- case 309: return "U9";
25978
- case 310: return "V0";
25979
- case 311: return "V1";
25980
- case 312: return "V2";
25981
- case 313: return "V3";
25982
- case 314: return "V4";
25983
- case 315: return "V5";
25984
- case 316: return "V6";
25985
- case 317: return "V7";
25986
- case 318: return "V8";
25987
- case 319: return "V9";
25988
- case 320: return "W0";
25989
- case 321: return "W1";
25990
- case 322: return "W2";
25991
- case 323: return "W3";
25992
- case 324: return "W4";
25993
- case 325: return "W5";
25994
- case 326: return "W6";
25995
- case 327: return "W7";
25996
- case 328: return "W8";
25997
- case 329: return "W9";
25998
- case 330: return "X0";
25999
- case 331: return "X1";
26000
- case 332: return "X2";
26001
- case 333: return "X3";
26002
- case 334: return "X4";
26003
- case 335: return "X5";
26004
- case 336: return "X6";
26005
- case 337: return "X7";
26006
- case 338: return "X8";
26007
- case 339: return "X9";
26008
- case 340: return "Y0";
26009
- case 341: return "Y1";
26010
- case 342: return "Y2";
26011
- case 343: return "Y3";
26012
- case 344: return "Y4";
26013
- case 345: return "Y5";
26014
- case 346: return "Y6";
26015
- case 347: return "Y7";
26016
- case 348: return "Y8";
26017
- case 349: return "Y9";
26018
- case 350: return "Z0";
26019
- case 351: return "Z1";
26020
- case 352: return "Z2";
26021
- case 353: return "Z3";
26022
- case 354: return "Z4";
26023
- case 355: return "Z5";
26024
- case 356: return "Z6";
26025
- case 357: return "Z7";
26026
- case 358: return "Z8";
26027
- case 359: return "Z9";
26028
- default: return "??";
26471
+ case 1013: return "13a";
26472
+ case 1049: return "49a";
26473
+ case 1050: return "50a";
26474
+ case 1051: return "51a";
26475
+ case 1052: return "52a";
26476
+ case 1053: return "53a";
26477
+ case 1057: return "57a";
26478
+ case 1061: return "61a";
26479
+ case 1063: return "63a";
26480
+ case 1066: return "66a";
26481
+ case 1068: return "68a";
26482
+ case 1069: return "69a";
26483
+ case 1073: return "73a";
26484
+ case 1074: return "74a";
26485
+ case 1075: return "75a";
26486
+ case 1076: return "76a";
26487
+ case 1077: return "77a";
26488
+ case 1080: return "80a";
26489
+ case 1081: return "81a";
26490
+ case 1082: return "82a";
26491
+ case 1083: return "83a";
26492
+ case 1084: return "84a";
26493
+ case 1085: return "85a";
26494
+ case 1086: return "86a";
26495
+ case 1087: return "87a";
26496
+ case 1089: return "89a";
26497
+ case 1090: return "90a";
26498
+ case 1091: return "91a";
26499
+ case 1093: return "93a";
26500
+ case 1096: return "96a";
26501
+ case 1098: return "98a";
26502
+ case 1102: return "A2a";
26503
+ case 1103: return "A3a";
26504
+ case 1104: return "A4a";
26505
+ case 1105: return "A5a";
26506
+ case 1106: return "A6a";
26507
+ case 1107: return "A7a";
26508
+ case 1108: return "A8a";
26509
+ case 1109: return "A9a";
26510
+ case 1110: return "B0a";
26511
+ case 1111: return "B1a";
26512
+ case 1112: return "B2a";
26513
+ case 1113: return "B3a";
26514
+ case 1114: return "B4a";
26515
+ case 1115: return "B5a";
26516
+ case 1116: return "B6a";
26517
+ case 1117: return "B7a";
26518
+ case 1118: return "B8a";
26519
+ case 1119: return "B9a";
26520
+ case 1120: return "C0a";
26521
+ case 1121: return "C1a";
26522
+ case 1122: return "C2a";
26523
+ case 1123: return "C3a";
26524
+ case 1124: return "C4a";
26525
+ case 1125: return "C5a";
26526
+ case 1127: return "C7a";
26527
+ case 1128: return "C8a";
26528
+ case 1129: return "C9a";
26529
+ case 1130: return "D0a";
26530
+ case 1132: return "D2a";
26531
+ case 1133: return "D3a";
26532
+ case 1135: return "D5a";
26533
+ case 1136: return "D6a";
26534
+ case 1138: return "D8a";
26535
+ case 1139: return "D9a";
26536
+ case 2013: return "13b";
26537
+ case 2049: return "49b";
26538
+ case 2050: return "50b";
26539
+ case 2051: return "51b";
26540
+ case 2052: return "52b";
26541
+ case 2053: return "53b";
26542
+ case 2057: return "57b";
26543
+ case 2061: return "61b";
26544
+ case 2063: return "63b";
26545
+ case 2066: return "66b";
26546
+ case 2068: return "68b";
26547
+ case 2069: return "69b";
26548
+ case 2073: return "73b";
26549
+ case 2074: return "74b";
26550
+ case 2075: return "75b";
26551
+ case 2076: return "76b";
26552
+ case 2077: return "77b";
26553
+ case 2080: return "80b";
26554
+ case 2081: return "81b";
26555
+ case 2082: return "82b";
26556
+ case 2083: return "83b";
26557
+ case 2084: return "84b";
26558
+ case 2085: return "85b";
26559
+ case 2086: return "86b";
26560
+ case 2087: return "87b";
26561
+ case 2089: return "89b";
26562
+ case 2090: return "90b";
26563
+ case 2091: return "91b";
26564
+ case 2093: return "93b";
26565
+ case 2096: return "96b";
26566
+ case 2098: return "98b";
26567
+ case 2102: return "A2b";
26568
+ case 2103: return "A3b";
26569
+ case 2104: return "A4b";
26570
+ case 2105: return "A5b";
26571
+ case 2106: return "A6b";
26572
+ case 2107: return "A7b";
26573
+ case 2108: return "A8b";
26574
+ case 2109: return "A9b";
26575
+ case 2110: return "B0b";
26576
+ case 2111: return "B1b";
26577
+ case 2112: return "B2b";
26578
+ case 2113: return "B3b";
26579
+ case 2114: return "B4b";
26580
+ case 2115: return "B5b";
26581
+ case 2116: return "B6b";
26582
+ case 2117: return "B7b";
26583
+ case 2118: return "B8b";
26584
+ case 2119: return "B9b";
26585
+ case 2120: return "C0b";
26586
+ case 2121: return "C1b";
26587
+ case 2122: return "C2b";
26588
+ case 2123: return "C3b";
26589
+ case 2124: return "C4b";
26590
+ case 2125: return "C5b";
26591
+ case 2127: return "C7b";
26592
+ case 2128: return "C8b";
26593
+ case 2129: return "C9b";
26594
+ case 2130: return "D0b";
26595
+ case 2132: return "D2b";
26596
+ case 2133: return "D3b";
26597
+ case 2135: return "D5b";
26598
+ case 2136: return "D6b";
26599
+ case 2138: return "D8b";
26600
+ case 2139: return "D9b";
26601
+ case 3051: return "51c";
26602
+ case 3057: return "57c";
26603
+ case 3068: return "68c";
26604
+ case 3073: return "73c";
26605
+ case 3075: return "75c";
26606
+ case 3080: return "80c";
26607
+ case 3081: return "81c";
26608
+ case 3083: return "83c";
26609
+ case 3084: return "84c";
26610
+ case 3085: return "85c";
26611
+ case 3086: return "86c";
26612
+ case 3087: return "87c";
26613
+ case 3089: return "89c";
26614
+ case 3090: return "90c";
26615
+ case 3091: return "91c";
26616
+ case 3093: return "93c";
26617
+ case 3096: return "96c";
26618
+ case 3104: return "A4c";
26619
+ case 3108: return "A8c";
26620
+ case 3118: return "B8c";
26621
+ case 3125: return "C5c";
26622
+ case 3127: return "C7c";
26623
+ case 3128: return "C8c";
26624
+ case 3132: return "D2c";
26625
+ case 3135: return "D5c";
26626
+ case 3136: return "D6c";
26627
+ case 3139: return "D9c";
26628
+ case 4051: return "51d";
26629
+ case 4057: return "57d";
26630
+ case 4073: return "73d";
26631
+ case 4080: return "80d";
26632
+ case 4083: return "83d";
26633
+ case 4084: return "84d";
26634
+ case 4085: return "85d";
26635
+ case 4086: return "86d";
26636
+ case 4087: return "87d";
26637
+ case 4090: return "90d";
26638
+ case 4091: return "91d";
26639
+ case 4093: return "93d";
26640
+ case 4104: return "A4d";
26641
+ case 4108: return "A8d";
26642
+ case 4125: return "C5d";
26643
+ case 4135: return "D5d";
26644
+ case 5051: return "51e";
26645
+ case 5073: return "73e";
26646
+ case 5084: return "84e";
26647
+ case 5087: return "87e";
26648
+ case 5090: return "90e";
26649
+ case 5104: return "A4e";
26650
+ case 6051: return "51f";
26651
+ case 6090: return "90f";
26652
+ default: return "???";
26029
26653
  }
26030
26654
  }
26031
- #line 23376 "konto_check.lxx"
26032
26655
 
26033
26656
  /* Funktion lut_keine_iban_berechnung() +���1 */
26034
26657
  /*
@@ -26223,6 +26846,7 @@ XI lut_filialen(char *b,int *retval)EXCLUDED
26223
26846
  XI dump_lutfile(char *outputname,UINT4 *required)EXCLUDED
26224
26847
  XI dump_lutfile_p(char *outputname,UINT4 felder)EXCLUDED
26225
26848
  XI lut_blz(char *b,int zweigstelle)EXCLUDED
26849
+ XI lut_blz_i(int b,int zweigstelle);
26226
26850
  XCC lut_name(char *b,int zweigstelle,int *retval)EXCLUDED_S
26227
26851
  XCC lut_name_i(int b,int zweigstelle,int *retval)EXCLUDED_S
26228
26852
  XCC lut_name_kurz(char *b,int zweigstelle,int *retval)EXCLUDED_S
@@ -26248,6 +26872,45 @@ XI lut_nachfolge_blz_i(int b,int zweigstelle,int *retval)EXCLUDED
26248
26872
  XI lut_iban_regel(char *b,int zweigstelle,int *retval)EXCLUDED
26249
26873
  XI lut_iban_regel_i(int b,int zweigstelle,int *retval)EXCLUDED
26250
26874
  XI lut_cleanup(void)EXCLUDED
26875
+ XI bic_aenderung(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26876
+ XI biq_aenderung(int idx,int*retval)EXCLUDED
26877
+ XI iban_aenderung(char *iban,int filiale,int*retval)EXCLUDED
26878
+ XI bic_loeschung(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26879
+ XI biq_loeschung(int idx,int*retval)EXCLUDED
26880
+ XI iban_loeschung(char *iban,int filiale,int*retval)EXCLUDED
26881
+ XI bic_iban_regel(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26882
+ XI biq_iban_regel(int idx,int*retval)EXCLUDED
26883
+ XI iban_iban_regel(char *iban,int filiale,int*retval)EXCLUDED
26884
+ XI bic_nachfolge_blz(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26885
+ XI biq_nachfolge_blz(int idx,int*retval)EXCLUDED
26886
+ XI iban_nachfolge_blz(char *iban,int filiale,int*retval)EXCLUDED
26887
+ XI bic_nr(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26888
+ XI biq_nr(int idx,int*retval)EXCLUDED
26889
+ XI iban_nr(char *iban,int filiale,int*retval)EXCLUDED
26890
+ XI bic_pan(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26891
+ XI biq_pan(int idx,int*retval)EXCLUDED
26892
+ XI iban_pan(char *iban,int filiale,int*retval)EXCLUDED
26893
+ XI bic_plz(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26894
+ XI biq_plz(int idx,int*retval)EXCLUDED
26895
+ XI iban_plz(char *iban,int filiale,int*retval)EXCLUDED
26896
+ XI bic_pz(char *bic_name,int mode,int filiale,int*retval)EXCLUDED
26897
+ XI biq_pz(int idx,int*retval)EXCLUDED
26898
+ XI iban_pz(char *iban,int filiale,int*retval)EXCLUDED
26899
+ XCC bic_bic(char *bic_name,int mode,int filiale,int*retval)EXCLUDED_S
26900
+ XCC biq_bic(int idx,int*retval)EXCLUDED_S
26901
+ XCC iban_bic(char *iban,int filiale,int*retval)EXCLUDED_S
26902
+ XCC bic_bic_h(char *bic_name,int mode,int filiale,int*retval)EXCLUDED_S
26903
+ XCC biq_bic_h(int idx,int*retval)EXCLUDED_S
26904
+ XCC iban_bic_h(char *iban,int filiale,int*retval)EXCLUDED_S
26905
+ XCC bic_name(char *bic_name,int mode,int filiale,int*retval)EXCLUDED_S
26906
+ XCC biq_name(int idx,int*retval)EXCLUDED_S
26907
+ XCC iban_name(char *iban,int filiale,int*retval)EXCLUDED_S
26908
+ XCC bic_name_kurz(char *bic_name,int mode,int filiale,int*retval)EXCLUDED_S
26909
+ XCC biq_name_kurz(int idx,int*retval)EXCLUDED_S
26910
+ XCC iban_name_kurz(char *iban,int filiale,int*retval)EXCLUDED_S
26911
+ XCC bic_ort(char *bic_name,int mode,int filiale,int*retval)EXCLUDED_S
26912
+ XCC biq_ort(int idx,int*retval)EXCLUDED_S
26913
+ XCC iban_ort(char *iban,int filiale,int*retval)EXCLUDED_S
26251
26914
  XI kto_check_encoding(int mode)EXCLUDED
26252
26915
  XI keep_raw_data(int mode)EXCLUDED
26253
26916
  XCC kto_check_encoding_str(int mode)EXCLUDED_S
@@ -26258,6 +26921,7 @@ XCC kto_check_retval2dos(int retval)EXCLUDED_S
26258
26921
  XCC kto_check_retval2utf8(int retval)EXCLUDED_S
26259
26922
  XI rebuild_blzfile(char *inputname,char *outputname,UINT4 set)EXCLUDED
26260
26923
  XI ci_check(char *ci)EXCLUDED
26924
+ XI bic_check(char *search_bic,int *cnt)EXCLUDED
26261
26925
  XI iban_check(char *iban,int *retval)EXCLUDED
26262
26926
  XCC iban2bic(char *iban,int *retval,char *blz,char *kto)EXCLUDED_S
26263
26927
  XC iban_gen(char *kto,char *blz,int *retval)EXCLUDED_S