// Für seit dem 6.
Dezember 2004 neu zugelassene Bankleitzahlen sind Kreditinstitute // P.S. var BLZ_, PRFZ_: TStringlist; fehler: boolean = false; Datei: string = 'blz_20060605.txt'; {http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php} procedure TForm1.FormCreate(Sender: TObject); var x: integer; hlp: TStringlist; begin if not fileexists(datei) then begin fehler := true; showmessage('Datei mit Bankleitzahlen nicht gefunden') end else begin hlp := TStringlist.create; BLZ_ := TStringlist.create; PRFZ_ := TStringlist.create; hlp.loadfromfile(datei); for x := 0 to hlp.count - 1 do begin if hlp[x][9] = '1' then begin BLZ_.add(copy(hlp[x], 1, 8)); PRFZ_.add(copy(hlp[x], 151, 2)); end; end; hlp.free; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin if not fehler then begin PRFZ_.free; BLZ_.free; end; end; function quer(i: integer): integer; var s: string; x: integer; begin s := inttostr(i); result := 0; for x := 1 to length(s) do result := result + strtoint(s[x]); end; function trans(KTO: string): integer; const ta: array[0..3, 0..9] of integer = ((0, 1, 5, 9, 3, 7, 4, 8, 2, 6), (0, 1, 7, 6, 9, 8, 3, 2, 5, 4), (0, 1, 8, 4, 6, 2, 9, 5, 7, 3), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); var x, z: integer; begin result := 0; z := 0; for x := 9 downto 1 do begin result := result + ta[z, strtoint(KTO[x])]; inc(z); if z = 4 then z := 0; end; end; function p87(KTO: string): boolean; const TAB1: array[0..4] of integer = (0, 4, 3, 2, 6); TAB2: array[0..4] of integer = (7, 1, 5, 9, 8); var i, C2, D2, A5, P: integer; begin result := false; i := 4; while KTO[i] = '0' do inc(i); C2 := i mod 2; D2 := 0; A5 := D2; while i < 10 do begin case KTO[i] of '0': KTO[i] := '5'; '1': KTO[i] := '6'; '5': KTO[i] := 'A'; '6': KTO[i] := '1'; end; if C2 = D2 then begin if strtoint('$' + KTO[i]) > 5 then begin if (C2 = 0) and (D2 = 0) then begin C2 := 1; D2 := C2; A5 := A5 + 6 - (strtoint('$' + KTO[i]) - 6); end else begin C2 := 0; D2 := C2; A5 := A5 + strtoint('$' + KTO[i]); end; end else begin if (C2 = 0) and (D2 = 0) then begin C2 := 1; A5 := A5 + strtoint('$' + KTO[i]); end else begin C2 := 0; A5 := A5 + strtoint('$' + KTO[i]); end; end; end else begin if strtoint('$' + KTO[i]) > 5 then begin if C2 = 0 then begin C2 := 1; D2 := 0; A5 := A5 - 6 + (strtoint('$' + KTO[i]) - 6); end else begin C2 := 0; D2 := 1; A5 := A5 - strtoint('$' + KTO[i]); end; end else begin if C2 = 0 then begin C2 := 1; A5 := A5 - strtoint('$' + KTO[i]); end else begin C2 := 0; A5 := A5 - strtoint('$' + KTO[i]); end end; end; inc(i); end; while (A5 < 0) or (A5 > 4) do if A5 > 4 then A5 := A5 - 5 else A5 := A5 + 5; if D2 = 0 then P := TAB1[A5] else P := TAB2[A5]; if P = strtoint('$' + KTO[10]) then result := true else begin if KTO[4] = '0' then begin if P > 4 then P := P - 5 else P := P + 5; if P = strtoint('$' + KTO[10]) then result := true; end; end; end; function prf(BLZ, KTO: string): byte; const k1: array[0..2] of integer = (3, 1, 7); k4: array[0..8] of integer = (2, 3, 4, 5, 6, 7, 2, 3, 4); k5: array[0..2] of integer = (7, 1, 3); k18: array[0..3] of integer = (9, 3, 1, 7); k30: array[0..8] of integer = (2, 0, 0, 0, 0, 1, 2, 1, 2); k52: array[0..11] of integer = (2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4); k55: array[0..8] of integer = (2, 3, 4, 5, 6, 7, 8, 7, 8); k64: array[0..5] of integer = (9, 10, 5, 8, 4, 2); k66: array[0..7] of integer = (2, 3, 4, 5, 6, 0, 0, 7); k77: array[0..4] of integer = (5, 4, 3, 4, 5); k91: array[0..5] of integer = (2, 4, 8, 5, 10, 9); KB9: array[0..6] of integer = (1, 3, 2, 1, 3, 2, 1); var kz, x, y, z, lg, m: integer; hlp: int64; function rechtrans: integer; begin result := 10 - trans(KTO) mod 10; if result = 10 then result := 0; end; procedure w21(von, bis: integer); var x: integer; begin for x := von downto bis do if odd(x) then y := y + quer(strtoint(KTO[x]) * 2) else y := y + strtoint(KTO[x]); end; procedure w75(von, bis: integer); var x: integer; begin for x := von to bis do if odd(x) then y := y + quer(strtoint(KTO[x]) * 2) else y := y + strtoint(KTO[x]); end; procedure xm11(von, bis: integer); var x: integer; begin for x := von downto bis do y := y + strtoint(KTO[x]) * (11 - x); end; function b01(prf: integer): boolean; begin y := y mod 11; if y in [0, 1] then result := KTO[prf] = '0' else result := KTO[prf] = inttostr(11 - y); end; function mdl10(prf: integer): boolean; begin y := 10 - y mod 10; if y = 10 then y := 0; result := inttostr(y) = KTO[prf]; end; function mdl11: boolean; begin if y = 1 then result := false else begin if y = 0 then result := KTO[10] = '0' else result := inttostr(11 - y) = KTO[10]; end; end; function is19: integer; begin y := 27; xm11(9, 2); result := ord(not b01(10)); end; function f5253(KTO: string): integer; var x: integer; begin z := strtoint(KTO[6]); while copy(KTO, 7, 1) = '0' do delete(KTO, 7, 1); KTO := copy(KTO, 1, 12); KTO[6] := '0'; lg := length(KTO); for x := lg downto 1 do begin if x = 6 then m := k52[lg - x]; y := y + strtoint(KTO[x]) * k52[lg - x]; end; y := y mod 11; x := -1; repeat inc(x); lg := (y + x * m) mod 11; until (lg = 10); result := ord(x <> z); end; function a51: integer; begin y := 0; xm11(9, 3); result := ord(not b01(10)); if result <> 0 then begin y := 0; xm11(9, 1); result := ord(not b01(10)); end; end; function ym7: integer; begin y := y mod 7; if y = 0 then result := ord(not (KTO[10] = '0')) else result := ord(not (KTO[10] = inttostr(7 - y))); end; procedure fk4(von, bis: integer); var x: integer; begin for x := von downto bis do y := y + strtoint(KTO[x]) * k4[von - x]; end; function f93: integer; var x: integer; begin if copy(KTO, 1, 4) = '0000' then begin xm11(9, 5); result := ord(not b01(10)); end else begin for x := 5 downto 1 do y := y + strtoint(KTO[x]) * (7 - x); result := ord(not b01(6)); end; if result = 0 then exit; y := 0; if copy(KTO, 1, 4) = '0000' then begin for x := 9 downto 5 do y := y + strtoint(KTO[x]) * (11 - x); result := ym7; end else begin for x := 5 downto 1 do y := y + strtoint(KTO[x]) * (7 - x); y := y mod 7; if y = 0 then result := ord(not (KTO[6] = '0')) else result := ord(not (KTO[6] = inttostr(7 - y))); end; end; function nm3(bis: integer): integer; var x: integer; begin for x := 9 downto bis do if odd(x) then y := y + strtoint(KTO[x]) * 2 else y := y + strtoint(KTO[x]); result := ord(not mdl10(10)); end; function f5: integer; var x: integer; begin for x := 9 downto 1 do y := y + strtoint(KTO[x]) * k5[x mod 3]; result := ord(not mdl10(10)); end; function f2: integer; begin xm11(9, 2); y := (y + strtoint(KTO[1]) * 2) mod 11; result := ord(not mdl11); end; function f53: integer; begin result := 1; if KTO[1] = '9' then begin result := is19; exit; end; if KTO[1] <> '0' then exit; KTO := copy(KTO, 2, 9); KTO := copy(BLZ, 5, 2) + KTO[2] + BLZ[8] + KTO[1] + copy(KTO, 3, maxint); if length(KTO) < 6 then exit; result := f5253(KTO); end; function f01(bis: integer): integer; var x: integer; begin for x := 9 downto bis do y := y + strtoint(KTO[x]) * k1[x mod 3]; result := ord(not mdl10(10)); end; function fB9: integer; begin if y >= 10 then dec(y, 10); result := ord(not (KTO[10] = inttostr(y))); if result = 0 then exit; inc(y, 5); if y >= 10 then dec(y, 10); result := ord(not (KTO[10] = inttostr(y))); end; function f52(KTO: string): integer; begin result := 1; if KTO[1] = '9' then begin result := is19; exit; end; KTO := copy(KTO, 3, 8); KTO := copy(BLZ, 5, 4) + KTO; if length(KTO) < 6 then exit; result := f5253(KTO); end; function f17: integer; begin w75(2, 7); y := pred(y) mod 11; if y = 0 then result := ord(not (KTO[8] = '0')) else result := ord(not (KTO[8] = inttostr(10 - y))); end; function f22: integer; var x: integer; begin for x := 9 downto 1 do begin if odd(x) then z := strtoint(KTO[x]) * 3 else z := strtoint(KTO[x]); y := y + z mod 10; end; result := ord(not (KTO[10] = inttostr(10 - (y mod 10)))); end; begin result := 255; if fehler then exit; BLZ := stringreplace(BLZ, #32, '', [rfreplaceall]); KTO := stringreplace(KTO, #32, '', [rfreplaceall]); result := 2; if length(BLZ) <> 8 then exit; x := BLZ_.indexof(BLZ); if x < 0 then exit; kz := strtoint('$' + PRFZ_[x]); result := 1; if (length(KTO) > 10) or (kz = $68) and (KTO[1] = '0') then exit; while length(KTO) < 10 do KTO := '0' + KTO; for x := 1 to 10 do if not (KTO[x] in ['0'..'9']) then exit; y := 0; case kz of $00, $08, $59, $60, $62: begin if (kz = 8) and (strtoint64(KTO) < 60000) then exit; if (kz = $59) and (copy(KTO, 1, 2) = '00') then result := 0 else begin w21(9 - ord(kz = $62) * 2, 1 + ord(kz = $60) * 2 + ord(kz = $62) * 2); result := ord(not mdl10(10 - ord(kz = $62) * 2)); end; end; $01, $92: begin if kz = $01 then z := 1 else z := 4; result := f01(z); end; $02: result := f2; $03: result := nm3(1); $04: begin fk4(9, 1); y := y mod 11; result := ord(not mdl11); end; $05: begin result := f5; end; $06, $70: begin if (kz = $70) and ((KTO[4] = '5') or (copy(KTO, 4, 2) = '69')) then z := 4 else z := 1; fk4(9, z); result := ord(not b01(10)); end; $07: begin xm11(9, 1); y := y mod 11; result := ord(not mdl11); end; $09: result := 0; $10: begin xm11(9, 1); result := ord(not b01(10)); end; $11: begin xm11(9, 1); y := y mod 11; if y = 10 then result := ord(not (KTO[10] = '9')) else if y = 0 then result := ord(not (KTO[10] = '0')) else result := ord(not (KTO[10] = inttostr(11 - y))); end; $12: result := 3; $13: begin w21(7, 2); result := ord(not mdl10(8)); if result <> 0 then begin if (copy(KTO, 9, 2) = '00') or (copy(KTO, 1, 2) <> '00') then exit; KTO := copy(KTO, 3, 8) + '00'; y := 0; w21(7, 2); result := ord(not mdl10(8)); end; end; $14: begin xm11(9, 4); y := y mod 11; result := ord(not mdl11); end; $15: begin xm11(9, 6); result := ord(not b01(10)); end; $16: begin fk4(9, 1); y := y mod 11; if y = 1 then result := ord(not (KTO[9] = KTO[10])) else begin if y = 0 then result := ord(not (KTO[10] = '0')) else result := ord(not (KTO[10] = inttostr(11 - y))); end; end; $17: result := f17; $18: begin for x := 9 downto 1 do y := y + strtoint(KTO[x]) * k18[x mod 4]; result := ord(not mdl10(10)); end; $19, $20: begin y := strtoint(KTO[1]); if kz = $20 then y := y * 3; xm11(9, 2); result := ord(not b01(10)); end; $21: begin w21(9, 1); while y > 9 do y := quer(y); result := ord(not (strtoint(KTO[10]) = 10 - y)); end; $22: result := f22; $23: begin fk4(6, 1); y := y mod 11; if y = 0 then result := ord(not (KTO[7] = '0')) else if y = 1 then result := ord(not (KTO[6] = KTO[7])) else result := ord(not (KTO[7] = inttostr(11 - y))); end; $24: begin if KTO[1] in ['3'..'6'] then KTO[1] := '0'; if KTO[1] = '9' then KTO := '000' + copy(KTO, 4, 7); z := 1; x := 1; while KTO[x] = '0' do inc(x); while x < 10 do begin y := y + (strtoint(KTO[x]) * z + z) mod 11; inc(x); inc(z); if z = 4 then z := 1; end; result := ord(not (KTO[10] = inttostr(y mod 10))); end; $25: if KTO[1] = '0' then begin xm11(9, 2); y := y mod 11; if y = 0 then result := ord(not (KTO[10] = '0')) else if y = 1 then result := ord(not ((KTO[10] = '0') and ((KTO[2] = '8') or (KTO[2] = '9')))) else result := ord(not (KTO[10] = inttostr(11 - y))); end; $26: begin if copy(KTO, 1, 2) = '00' then KTO := copy(KTO, 3, 8) + '00'; fk4(7, 1); result := ord(not b01(8)); end; $27: if strtoint64(KTO) < 1000000000 then begin w21(9, 1); result := ord(not mdl10(10)); end else result := ord(not (KTO[10] = inttostr(rechtrans))); $28: begin for x := 7 downto 1 do y := y + strtoint(KTO[x]) * (9 - x); result := ord(not b01(8)); end; $29: result := ord(not (KTO[10] = inttostr(rechtrans))); $30: begin for x := 1 to 9 do y := y + strtoint(KTO[x]) * k30[x - 1]; result := ord(not mdl10(10)); end; $31: begin for x := 9 downto 1 do y := y + strtoint(KTO[x]) * x; y := y mod 11; if y = 0 then result := ord(not (KTO[10] = '0')) else if y <> 10 then result := ord(not (y = strtoint(KTO[10]))); end; $32, $81: begin if (kz = $81) and (KTO[3] = '9') then result := a51 else begin xm11(9, 4); result := ord(not b01(10)); end; end; $33, $82: begin if (kz = $82) and (copy(KTO, 3, 2) = '99') then z := 1 else z := 5; xm11(9, z); result := ord(not b01(10)); end; $34: begin for x := 7 downto 1 do y := y + strtoint(KTO[x]) * k52[7 - x]; result := ord(not b01(8)); end; $35: begin xm11(9, 1); y := y mod 11; if y = 10 then result := ord(not (KTO[9] = KTO[10])) else result := ord(not (KTO[10] = inttostr(y))); end; $36, $37, $38, $39, $40: begin for x := 9 downto 6 - ord(kz = $37) - ord(kz = $38) * 2 - ord(kz = $39) * 3 - ord(kz = $40) * 5 do y := y + strtoint(KTO[x]) * k52[9 - x]; result := ord(not b01(10)); end; $41: begin if KTO[4] = '9' then z := 4 else z := 1; w21(9, z); result := ord(not mdl10(10)); end; $42: begin xm11(9, 2); result := ord(not b01(10)); end; $43: begin for x := 9 downto 1 do y := y + strtoint(KTO[x]) * (10 - x); result := ord(not mdl10(10)); end; $44: begin for x := 9 downto 5 do y := y + strtoint(KTO[x]) * k52[9 - x]; result := ord(not b01(10)); end; $45: if (KTO[1] = '0') or (KTO[5] = '1') then result := 0 else begin w21(9, 1); result := ord(not mdl10(10)); end; $46: begin for x := 7 downto 3 do y := y + strtoint(KTO[x]) * (9 - x); result := ord(not b01(8)); end; $47, $48: begin for x := 8 downto 4 - ord(kz = $48) do y := y + strtoint(KTO[x]) * (10 - x); result := ord(not b01(9)); end; $49: begin w21(9, 1); result := ord(not mdl10(10)); if result <> 0 then begin y := 0; result := f01(1); end; end; $50: begin for x := 6 downto 1 do y := y + strtoint(KTO[x]) * (8 - x); result := ord(not b01(7)); if result <> 0 then begin if copy(KTO, 1, 3) <> '000' then exit; KTO := copy(KTO, 4, 7) + '000'; y := 0; for x := 6 downto 1 do y := y + strtoint(KTO[x]) * (8 - x); result := ord(not b01(7)); end; end; $51: begin xm11(9, 4); result := ord(not b01(10)); if result <> 0 then begin y := 0; xm11(9, 5); result := ord(not b01(10)); end; if result <> 0 then begin if KTO[10] in ['7'..'9'] then exit; if KTO[3] = '9' then result := a51 else begin y := 0; xm11(9, 5); result := ym7; end; end; end; $52: if copy(KTO, 1, 2) = '00' then result := f52(KTO); $53: result := f53; $54: begin if copy(KTO, 1, 2) <> '49' then exit; fk4(9, 3); y := y mod 11; if y in [0, 1] then exit; result := ord(not (KTO[10] = inttostr(11 - y))); end; $55: begin for x := 9 downto 1 do y := y + strtoint(KTO[x]) * k55[9 - x]; result := ord(not b01(10)); end; $56: begin fk4(9, 1); y := 11 - y mod 11; if y in [10, 11] then begin if KTO[1] <> '9' then exit; dec(y, 3); end; result := ord(not (KTO[10] = inttostr(y))); end; $57: begin if (strtoint(copy(KTO, 1, 2)) in [0..50, 91, 96..99]) or (copy(KTO, 1, 6) = '777777') or (copy(KTO, 1, 6) = '888888') then begin result := 0; exit; end; for x := 1 to 9 do if odd(x) then y := y + strtoint(KTO[x]) else y := y + quer(strtoint(KTO[x]) * 2); result := ord(not mdl10(10)); end; $58: begin if copy(KTO, 1, 5) = '00000' then exit; xm11(9, 5); y := y mod 11; result := ord(not mdl11); end; $61: begin z := strtoint(KTO[8]); if KTO[9] = '8' then begin delete(KTO, 8, 1); m := 9; end else m := 7; w21(m, 1); y := 10 - y mod 10; if y = 10 then y := 0; result := ord(not z = y); end; $63: begin if KTO[1] <> '0' then exit; if copy(KTO, 1, 3) = '000' then m := 9 else m := 7; w21(m, m - 5); result := ord(not mdl10(m + 1)); end; $64: begin for x := 1 to 6 do y := y + strtoint(KTO[x]) * k64[x - 1]; result := ord(not b01(7)); end; $65: if KTO[9] = '9' then begin z := strtoint(KTO[8]); delete(KTO, 8, 1); w21(9, 1); y := 10 - y mod 10; if y = 10 then y := 0; result := ord(not z = y); end else begin w21(7, 1); result := ord(not mdl10(8)); end; $66: begin if KTO[1] <> '0' then exit; for x := 9 downto 2 do y := y + strtoint(KTO[x]) * k66[9 - x]; y := y mod 11; if y in [0, 1] then y := 1 xor y else y := 11 - y; result := ord(not (inttostr(y) = KTO[10])); end; $67: begin w21(7, 1); result := ord(not mdl10(8)); end; $68: if (KTO[1] <> '0') then begin if (KTO[4] <> '9') then exit; w21(9, 4); result := ord(not mdl10(10)); end else begin if (strtoint64(KTO) >= 400000000) and (strtoint64(KTO) <= 499999999) then begin result := 0; exit; end; w21(9, 2); result := ord(not mdl10(10)); if result <> 0 then begin y := 0; delete(KTO, 3, 2); w21(7, 2); result := ord(not mdl10(10)); end; end; $69: begin if (strtoint64(KTO) >= 9300000000) and (strtoint64(KTO) <= 9399999999) then begin result := 0; exit; end; if (strtoint64(KTO) >= 9700000000) and (strtoint64(KTO) <= 9799999999) then begin result := ord(not (KTO[10] = inttostr(rechtrans))); exit; end; for x := 7 downto 1 do y := y + strtoint(KTO[x]) * (9 - x); result := ord(not b01(8)); if result <> 0 then begin y := 0; result := ord(not (KTO[10] = inttostr(rechtrans))); end; end; $71: begin for x := 2 to 7 do y := y + strtoint(KTO[x]) * (8 - x); y := y mod 11; if y in [0, 1] then result := ord(not (KTO[10] = inttostr(y))) else result := ord(not (KTO[10] = inttostr(11 - y))); end; $72, $73: begin if (kz = $73) and (KTO[3] = '9') then begin result := a51; exit; end; w21(9, 4); result := ord(not mdl10(10)); if (result <> 0) and (kz = $73) then begin y := 0; w21(9, 5); result := ord(not mdl10(10)); if result <> 0 then begin y := 0; w21(9, 5); result := ym7; end; end; end; $74: begin if copy(KTO, 1, 4) = '0000' then begin w21(9, 5); z := y; result := ord(not mdl10(10)); if result <> 0 then begin y := 5 - z mod 5; result := ord(not (KTO[10] = inttostr(y))); end; end else begin w21(9, 1); result := ord(not mdl10(10)); end; end; $75: begin if (KTO[1] <> '0') or (copy(KTO, 1, 2) = '00') and (KTO[3] <> '0') then exit; if copy(KTO, 1, 3) = '000' then begin w75(5, 9); result := ord(not mdl10(10)); end else begin if KTO[2] = '9' then begin w75(3, 7); result := ord(not mdl10(8)); end else begin for x := 2 to 6 do if not odd(x) then y := y + quer(strtoint(KTO[x]) * 2) else y := y + strtoint(KTO[x]); result := ord(not mdl10(7)); end; end; end; $76: begin for m := 0 to 1 do begin if not (KTO[1] in ['0', '4', '6'..'9']) then exit; z := 2; for x := 2 to 3 do if KTO[x] = '0' then inc(z); for x := 7 downto z do y := y + strtoint(KTO[x]) * (9 - x); y := y mod 11; if y = 10 then result := 0 else result := ord(not (KTO[8] = inttostr(y))); if (result = 0) or (copy(KTO, 1, 2) <> '00') then break; KTO := copy(KTO, 3, 8) + '00'; y := 0; end; end; $77: begin for x := 6 to 10 do y := y + strtoint(KTO[x]) * (x - 5); y := y mod 11; if y = 0 then result := 0 else begin y := 0; for x := 6 to 10 do y := y + strtoint(KTO[x]) * k77[x - 6]; y := y mod 11; if y <> 0 then exit; result := 0; end; end; $78: if (copy(KTO, 1, 2) = '00') and (KTO[3] <> '0') then result := 0 else begin w21(9, 1); result := ord(not mdl10(10)); end; $79: begin case KTO[1] of '0': exit; '3'..'8': begin w21(9, 1); result := ord(not mdl10(10)); end; else begin for x := 8 downto 1 do if not odd(x) then y := y + quer(strtoint(KTO[x]) * 2) else y := y + strtoint(KTO[x]); result := ord(not mdl10(9)); end; end; end; $80: begin w21(9, 5); result := ord(not mdl10(10)); if result <> 0 then begin if KTO[3] = '9' then result := a51 else begin y := 0; w21(9, 5); result := ym7; end; end; end; $83: if copy(KTO, 3, 2) = '99' then begin xm11(9, 3); y := y mod 11; if y in [0, 1] then result := 0 else result := ord(not (KTO[10] = inttostr(11 - y))); end else begin for z := 4 to 5 do begin xm11(9, z); result := ord(not b01(10)); if result = 0 then exit; y := 0; end; if KTO[10] in ['7'..'9'] then result := 1 else begin xm11(9, 5); result := ym7; end; end; $84: begin xm11(9, 5); result := ord(not b01(10)); if result <> 0 then begin if KTO[3] = '9' then result := a51 else begin y := 0; xm11(9, 5); result := ym7; end; end; end; $85: begin for z := 4 to 5 do begin xm11(9, z); result := ord(not b01(10)); if result = 0 then exit; y := 0; end; if KTO[10] in ['7'..'9'] then exit; if copy(KTO, 3, 2) = '99' then begin xm11(9, 3); y := y mod 11; result := ord(not mdl11); end else begin xm11(9, 5); result := ym7; end; end; $86: begin w21(9, 4); result := ord(not mdl10(10)); if result <> 0 then begin if KTO[3] = '9' then result := a51 else begin y := 0; xm11(9, 4); result := ord(not b01(10)); end; end; end; $87: if KTO[3] = '9' then result := a51 else begin result := ord(not p87(KTO)); if result <> 0 then begin y := 0; xm11(9, 5); result := ord(not b01(10)); if result <> 0 then begin y := 0; xm11(9, 5); result := ym7; end; end; end; $88: begin if KTO[3] = '9' then z := 3 else z := 4; xm11(9, z); result := ord(not b01(10)); end; $89: begin if (KTO[1] <> '0') or (copy(KTO, 1, 4) = '0000') then result := 0 else if copy(KTO, 1, 3) = '000' then begin for x := 9 downto 4 do y := y + quer(strtoint(KTO[x]) * (11 - x)); result := ord(not b01(10)); end else begin xm11(9, 1); result := ord(not b01(10)); end; end; $90: if KTO[3] = '9' then begin xm11(9, 3); result := ord(not b01(10)); end else begin xm11(9, 4); result := ord(not b01(10)); if result <> 0 then begin y := 0; xm11(9, 5); z := y; result := ord(not b01(10)); if result <> 0 then begin if KTO[10] in ['7'..'9'] then result := 1 else begin y := z; result := ym7; end; end; if result <> 0 then begin if KTO[10] = '9' then result := 1 else begin y := z mod 9; if y = 0 then result := ord(not (KTO[10] = '0')) else result := ord(not (KTO[10] = inttostr(9 - y))); end; if result <> 0 then begin y := 0; result := nm3(5); end; end; end; end; $91: begin for x := 6 downto 1 do y := y + strtoint(KTO[x]) * (8 - x); result := ord(not b01(7)); if result = 0 then exit; y := 0; for x := 6 downto 1 do y := y + strtoint(KTO[x]) * (x + 1); result := ord(not b01(7)); if result = 0 then exit; z := strtoint(KTO[7]); delete(KTO, 7, 1); y := 0; xm11(9, 1); y := y mod 11; if y in [0, 1] then result := ord(not (z = 0)) else result := ord(not (z = 11 - y)); if result = 0 then exit; y := 0; for x := 6 downto 1 do y := y + strtoint(KTO[x]) * k91[6 - x]; y := y mod 11; if y in [0, 1] then result := ord(not (z = 0)) else result := ord(not (z = 11 - y)); end; $93: result := f93; $94: begin for x := 9 downto 1 do if not odd(x) then y := y + quer(strtoint(KTO[x]) * 2) else y := y + strtoint(KTO[x]); result := ord(not mdl10(10)); end; $95: begin hlp := strtoint64(KTO); if (hlp >= 1) and (hlp <= 1999999) or (hlp >= 9000000) and (hlp <= 25999999) or (hlp >= 396000000) and (hlp <= 499999999) or (hlp >= 700000000) and (hlp <= 799999999) then result := 0 else begin fk4(9, 1); result := ord(not b01(10)); end; end; $96: begin y := strtoint(KTO[1]); xm11(9, 2); result := ord(not b01(10)); if result = 0 then exit; y := 0; w21(9, 1); result := ord(not mdl10(10)); if result = 0 then exit; hlp := strtoint64(KTO); if (hlp >= 1300000) and (hlp <= 99399999) then result := 0 else result := 1; end; $97: begin if strtoint(copy(KTO, 1, 6)) = 0 then exit; z := strtoint(copy(KTO, 1, 9)); y := (z div 11) * 11; y := z - y; if y = 10 then result := ord(not (KTO[10] = '0')) else result := ord(not (KTO[10] = inttostr(y))); end; $98: begin for x := 9 downto 3 do y := y + strtoint(KTO[x]) * k1[9 - x]; result := ord(not mdl10(10)); if result = 0 then exit; y := 0; xm11(9, 4); result := ord(not b01(10)); end; $99: if (strtoint64(KTO) >= 396000000) and (strtoint64(KTO) <= 499999999) then result := 0 else begin fk4(9, 1); result := ord(not b01(10)); end; $A0: if strtoint(copy(KTO, 1, 7)) = 0 then result := 0 else begin for x := 9 downto 5 do y := y + strtoint(KTO[x]) * k91[9 - x]; result := ord(not b01(10)); end; $A1: if (copy(KTO, 1, 2) = '00') and (KTO[3] <> '0') or (KTO[1] <> '0') then begin w21(9, 3); result := ord(not mdl10(10)); end; $A2: begin w21(9, 1); result := ord(not mdl10(10)); if result = 0 then exit; y := 0; fk4(9, 1); y := y mod 11; result := ord(not mdl11); end; $A3: begin w21(9, 1); result := ord(not mdl10(10)); if result = 0 then exit; y := 0; xm11(9, 1); result := ord(not b01(10)); end; $A4: if copy(KTO, 3, 2) = '99' then begin fk4(9, 5); result := ord(not b01(10)); if result = 0 then exit; y := 0; result := f93; end else begin fk4(9, 4); result := ord(not b01(10)); if result = 0 then exit; y := 0; xm11(9, 4); result := ym7; if result = 0 then exit; y := 0; result := f93; end; $A5: begin w21(9, 1); result := ord(not mdl10(10)); if result = 0 then exit; if KTO[1] = '9' then exit; y := 0; xm11(9, 1); result := ord(not b01(10)); end; $A6: if KTO[2] = '8' then begin w21(9, 1); result := ord(not mdl10(10)); end else result := f01(1); $A7: begin w21(9, 1); result := ord(not mdl10(10)); if result = 0 then exit; y := 0; result := nm3(1); end; $A8: begin fk4(9, 4); result := ord(not b01(10)); if result = 0 then exit; if KTO[3] = '9' then result := a51 else begin y := 0; w21(9, 4); result := ord(not mdl10(10)); end; end; $A9: begin result := f01(1); if result = 0 then exit; y := 0; fk4(9, 1); result := ord(not b01(10)); end; $B0: begin if (KTO[1] = '0') or (KTO[1] = '8') then exit; if KTO[8] in ['1'..'3', '6'] then result := 0 else begin fk4(9, 1); result := ord(not b01(10)); end; end; $B1: begin result := f5; if result = 0 then exit; y := 0; result := f01(1); end; $B2: begin if KTO[1] in ['0'..'7'] then result := f2 else begin w21(9, 1); result := ord(not mdl10(10)); end; end; $B3: begin if KTO[1] in ['0'..'8'] then xm11(9, 4) else fk4(9, 1); result := ord(not b01(10)); end; $B4: begin if KTO[1] = '9' then begin w21(9, 1); result := ord(not mdl10(10)); end else result := f2; end; $B5: begin for x := 9 downto 1 do y := y + strtoint(KTO[x]) * k5[x mod 3]; result := ord(not mdl10(10)); if result = 0 then exit; if KTO[1] in ['8', '9'] then exit; y := 0; w21(9, 1); result := ord(not mdl10(10)); end; $B6: begin if KTO[1] in ['1'..'9'] then begin y := strtoint(KTO[1]) * 3; xm11(9, 2); result := ord(not b01(10)); end else result := f53; end; $B7: begin hlp := strtoint64(KTO); if (hlp >= 1000000) and (hlp <= 5999999) or (hlp >= 700000000) and (hlp <= 899999999) then result := f01(1) else result := 0; end; $B8: begin y := strtoint(KTO[1]) * 3; xm11(9, 2); result := ord(not b01(10)); if result = 0 then exit; result := ord(not (KTO[10] = inttostr(rechtrans))); end; $B9: begin if (copy(KTO, 1, 4) = '0000') or (copy(KTO, 1, 2) <> '00') then exit; if (copy(KTO, 1, 3) = '000') then begin for x := 9 downto 4 do y := y + strtoint(KTO[x]) * (10 - x); y := y mod 11; result := fB9; end else begin for x := 9 downto 3 do y := y + (strtoint(KTO[x]) * kb9[9 - x] + kb9[9 - x]) mod 11; y := y mod 10; result := fB9; end; end; $C0: begin if (copy(KTO, 1, 2) = '00') and (KTO[3] <> '0') then begin result := f52(KTO); if result = 0 then exit; end; y := strtoint(KTO[1]) * 3; xm11(9, 2); result := ord(not b01(10)); end; $C1: if KTO[1] <> '5' then result := f17 else begin for x := 1 to 9 do if not odd(x) then y := y + quer(strtoint(KTO[x]) * 2) else y := y + strtoint(KTO[x]); y := pred(y) mod 11; if y <> 0 then y := 10 - y; result := ord(not (KTO[10] = inttostr(y))); end; $C2: begin result := f22; if result = 0 then exit; y := 0; w21(9, 1); result := ord(not mdl10(10)); end; else result := 4; end; end; // Beispielaufruf procedure TForm1.Button2Click(Sender: TObject); begin case prf('20750000', '539290858') of 0: showmessage('OK'); 1: showmessage('Konto-Nr. falsch'); 2: showmessage('Falsche BLZ'); 3: showmessage('Prüfverfahren nicht anwendbar'); 4: showmessage('Prüfverfahren nicht implementiert'); else showmessage('Unerwarteter Fehler'); end; end; |
Zugriffe seit 6.9.2001 auf Delphi-Ecke