konto_check 5.2.1 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
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