Omschrijving

Deze functie controleert een bankrekeningnummer met behulp van de zogenaamde 11-proef. De oorspronkelijke code is te vinden op deze link, maar wegens een ernstig gebrek aan overzicht en een overschot aan variabelen en code die niet nodig is compleet herschreven.



Voorbeeld

Code:
// 52.88.33.211 is een foutief banknummer, alles opgeteld blijft er 3
// over als je door 11 deelt...
if not ElfProef('52.88.33.211') then
  ShowMessage('Dit bankrekeningnummer is incorrect!');


Code

Code:
function ElfProef(const Banknummer: String): Boolean;
var
  sFiltered:      String;
  iCount:         Integer;
  iChar:          Integer;
  iValue:         Integer;

begin
  Result  := False;

  // Controleer minimum lengte
  if Length(Banknummer) >= 9 then begin
    // Filter alle niet-getallen
    SetLength(sFiltered, Length(Banknummer));
    iCount  := 0;

    for iChar := 1 to Length(Banknummer) do
      if Banknummer[iChar] in ['0'..'9'] then begin
        Inc(iCount);
        sFiltered[iCount] := Banknummer[iChar];
      end;

    SetLength(sFiltered, iCount);

    // Controleer nieuwe lengte
    if Length(sFiltered) = 9 then begin
      iCount  := 0;

      // Tel alle getallen op
      //
      //   Elfproef theorie:
      //      Getal1 * 9 + Getal2 * 8 + Getal3 * 7, enz. moet deelbaar
      //      zijn door 11...
      for iChar := 1 to Length(sFiltered) do begin
        iValue  := Ord(sFiltered[iChar]) - Ord('0');
        iCount  := iCount + (iValue * (10 - iChar));
      end;

      // Elfproef
      if (iCount mod 11) = 0 then
        Result  := True;
    end;
  end;
end;