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