IBAN szám ellenőrzése Delphi -vel
You are Reading..
IBAN szám ellenőrzése Delphi -vel
Az eredeti ellenőrző algoritmust nem nagyon írtam át, csak beletettem az országkódokat.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | function ChangeAlpha(input: string ): string ; var a: Char ; begin Result := input; for a := 'A' to 'Z' do begin Result := StringReplace(Result, a, IntToStr(Ord(a) - 55 ), [rfReplaceAll]); end ; end ; function CalculateDigits(iban: string ): Integer ; var v, l: Integer ; alpha: string ; number: Longint ; rest: Integer ; begin iban := UpperCase(iban); if Pos( 'IBAN' , iban) > 0 then Delete(iban, Pos( 'IBAN' , iban), 4 ); iban := iban + Copy(iban, 1 , 4 ); Delete(iban, 1 , 4 ); iban := ChangeAlpha(iban); v := 1 ; l := 9 ; rest := 0 ; alpha := '' ; try while v <= Length(iban) do begin if l > Length(iban) then l := Length(iban); alpha := alpha + Copy(iban, v, l); number := StrToInt(alpha); rest := number mod 97 ; v := v + l; alpha := IntToStr(rest); l := 9 - Length(alpha); end ; except rest := 0 ; end ; Result := rest; end ; function IndexOf(stringArray: array of string ; partString: String ): integer ; var i: Integer ; begin Result := - 1 ; for i:= 0 to Length(stringArray) do begin if stringArray[i] = partString then begin Result := i; break; end ; end ; end ; function CheckIBAN(iban: string ; justcountrycode: boolean ): Boolean ; const countrycodes: array [ 1..54 ] of string = ( 'AD' , 'AE' , 'AL' , 'AT' , 'BA' , 'BE' , 'BG' , 'CH' , 'CY' , 'CZ' , 'DE' , 'DK' , 'EE' , 'ES' , 'FI' , 'FO' , 'FR' , 'GB' , 'GE' , 'GI' , 'GL' , 'GR' , 'HR' , 'HU' , 'IE' , 'IL' , 'IS' , 'IT' , 'KW' , 'KZ' , 'LB' , 'LI' , 'LT' , 'LU' , 'LV' , 'MC' , 'ME' , 'MK' , 'MR' , 'MT' , 'MU' , 'NL' , 'NO' , 'PL' , 'PT' , 'RO' , 'RS' , 'SA' , 'SE' , 'SI' , 'SK' , 'SM' , 'TN' , 'TR' ); begin Result := true ; iban := StringReplace(iban, ' ' , '' , [rfReplaceAll]); iban := StringReplace(iban, '-' , '' , [rfReplaceAll]); if IndexOf(countrycodes, Copy(iban, 1 , 2 )) < 0 then begin Result := false ; Exit; end ; if justcountrycode then Exit; if CalculateDigits(iban) = 1 then Result := True else Result := False ; end ; |