Inleiding
De verschillende procedures die we in de hoofdstukken Play with Strings en Raar maar waar hebben opgebouwd laten ons toe om ook complexe vraagstukken te behandelen.
Een nummer van een bankrekening (‘International Bank Account Number (IBAN)’ genaamd) bevat een controlegetal waardoor kan worden nagegaan of het nummer al dan niet correct is. De berekening van dit controlegetal is een complexe opeenvolging van stappen. De structuur van een rekeningnummer wordt voor elk land vastgelegd.
In volgende tabel wordt de IBAN-structuur voor Nederlandse en voor Belgische rekeningnummers gedefinieerd:
| Land | IBAN | Voorbeeld |
|---|---|---|
| België | BEkk BBBn nnnn nnxx | BE45 1234 1234 1234 |
| Nederland | NLkk BBBB nnnn nnnn nn | NL02 ABNA 0123 4567 89 |
Een Belgisch rekeningnummer bestaat uit 16 tekens en start steeds met de letters ‘BE‘. Een Nederlands rekeningnummer bestaat uit 18 tekens en begint met de letters ‘NL‘.
De letters ‘kk‘ in de IBAN-structuur verwijzen naar het controlegetal. Dit getal zullen we berekenen in deze les.
De letters ‘B‘ verwijzen naar de bank waartoe de rekening behoort. In België zijn hiervoor drie cijfers gereserveerd, in Nederland worden hiervoor 4 letters gebruikt.
De letters ‘n‘ verwijzen naar het nummer van de rekening binnen de bank.
De letters ‘x‘ verwijzen dan naar het controlegetal van het rekeningnummer binnen de bank.
In deze les zijn wij enkel geïnteresseerd in de berekening van het controlegetal ‘kk‘.
Algoritme
Het algoritme om het controlegetal ‘kk‘ te berekenen bestaat uit 5 opeenvolgende stappen:
- Verwijder alle spaties uit het IBAN-nummer;
- Vervang elke letter in het IBAN-nummer door de volgorde van de letter in het alfabet startend vanaf 10. De letter ‘A’ wordt 10, de letter ‘B’ wordt 11, de letter ‘C’ wordt 12, de letter ‘D’ wordt 13, de letter ‘E’ wordt 14…’L’ wordt 21…’N’ wordt 23… Dus ‘ABNA’ wordt ‘10112310’, ‘NL’ wordt ‘2321’, ‘BE’ wordt ‘1014’;
- Verplaatst de landcode (‘2321’, ‘1014’) achteraan het banknummer (bankcode (B)+nationaal rekeningnummer (n)) en voeg twee nullen eraan toe. Het Nederlandse nummer wordt dan ‘101123100123456789232100’ en het Belgische nummer wordt ‘123412341234101400’;
- Bereken de restwaarde van het bekomen getal door deling met het getal 97 (modulo 97);
- Trek de bekomen restwaarde af van het getal 98. Voeg eventueel een 0 vooraan toe om twee posities te bekomen. Dit wordt dan het controlegetal (kk). kk wordt dan voor het Nederlandse IBAN-nummer ’02’ en voor het Belgische rekeningnummer bekomen we ’45’.
Indien de berekende waarde gelijk is aan de kk in het IBAN-nummer (posities 3 en 4) dan is dit een geldig IBAN-nummer.
Stap 1: Verwijder alle spaties

De trimall-procedure, ontwikkeld in het hoofdstuk Play with strings, kan worden gebruikt om alle spaties uit het IBAN-nummer te verwijderen. De variabele resultaat, geleverd door de trimall-procedure, bevat het IBAN-nummer zonder spaties. De inhoud van de variabele resultaat wordt nadien overgeplaatst naar de variabele bankrekening. De variabele bankrekening zal worden gebruikt om de geconverteerde bankrekening te bevatten.
Vanuit de variabele bankrekening wordt ook het ingebrachte controlegetal kk opgehaald. Hiervoor wordt de substring-procedure gebruikt. Bemerk dat het controlegetal kk zich bevindt op positie 3 en 4 van IBAN.
De procedures trimall en substring worden hier nog even afgedrukt. Bemerk dat we nu de variabele resultaat hebben gebruikt om het eindresultaat van een procedure te bewaren.


Stap 2: Vervang elke letter door de volgorde van de letter in het alfabet startend vanaf 10

De procedure vervangLetters is nog niet beschikbaar. Voor deze procedure moeten we alle karakters in het IBAN-nummer overlopen. Als het karakter een letter is dan moeten we de plaats bepalen van deze letter in het alfabet. Deze plaats wordt dan met 9 verhoogd (plaats 1 (letter A) wordt 10, plaats 2 (letter B) wordt 11,…). Tevens wordt de letter vervangen door de berekende plaats. Als het karakter een cijfer of een ander karakter is dan blijft het oorspronkelijke teken in de string behouden.
In pseudocode zou volgend programma moeten worden ontwikkeld:
Vul de variabele alfabet met de letters "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
Maak de variabele resultaat leeg
Plaats de variabele positie op 1
Repeat voor alle tekens in tekst
If het teken in tekst(positie) voorkomt in alfabet
zoekPlaats van tekst(positie) in alfabet (resultaat bevindt zich in 'plaats')
verhoog plaats met 9
Voeg plaats toe bij resultaat
Else
Voeg tekst(positie) toe bij resultaat
End If
verhoog positie met 1
End Repeat
De procedure vervangLetters in Scratch:

In vervangLetters gebruiken we de nieuwe functie
. Deze functie biedt de mogelijkheid om te controleren of een karakter al dan niet in een string aanwezig is.
In de procedure vervangLetters gebruiken we de procedure zoekPlaats. Deze procedure gebruikt het actieve karakter om de plaats op te zoeken van dit teken in de variabele alfabet. De positie waarop dit teken wordt gevonden wordt bijgehouden in de variabele plaats. De variabele plaats wordt in de procedure vervangLetters daarna met 9 verhoogd.
Volgende afbeelding toont de procedure zoekPlaats in Scratch:

Stap 3: Verplaats de landcode achteraan het geconverteerde nummer en voeg twee nullen toe
Deze stap kan gemakkelijk worden uitgevoerd gebruikmakend van de procedure substring die we hebben ontwikkeld in het hoofdstuk Play with Strings.

De eerste substring neemt alle cijfers startend vanaf positie 7 (4 cijfers voor de landcode en 2 cijfers voor het controlegetal gaan vooraf) tot en met het laatste karakter in de string. Het resultaat van deze substring wordt bewaard in de variabele bankrekening.
De tweede substring neemt dan de eerste vier cijfers (de vier cijfers voor de geconverteerde landcode) van de oorspronkelijke tekst en voegt die achteraan toe aan de variabele bankrekening. De variabele bankrekening wordt dan verder nog aangevuld met twee nullen. Op het einde van de procedure verplaatsLandcode bevat de variabele bankrekening het aangepaste rekeningnummer klaar om de modulo bewerking in de volgende stap uit te voeren. De procedure verplaatsLandcode ziet er als volgt uit:

Stap 4: Bereken de restwaarde door de variabele bankrekening te delen door 97 (modulo 97)

Na stap 3 is de variabele bankrekening een getal bestaande uit meer dan 16 cijfers. Zoals we reeds weten uit hoofdstuk Raar Maar Waar leidt dit getal tot verkeerde resultaten als we hierop een modulo bewerking zouden uitvoeren. Onze mod-procedure, ontwikkeld in het hoofdstuk Raar maar waar, kan in dit geval redding brengen:
De restwaarde van de mod-procedure hebben we opgeslagen in de variabele rest.
Om de leesbaarheid van deze opeenvolgende bewerkingen te behouden, drukken we hier ook nog even de mod-procedure af:

Stap 5: Trek de bekomen restwaarde af van het getal 98. Indien het resultaat van deze bewerking slechts uit één positie bestaat, voeg dan vooraan een nul toe aan het resultaat
Deze eenvoudige bewerking werd uitgewerkt in de procedure berekenControlegetal.

De variabele controlegetal bevat nu het resultaat van al deze complexe bewerkingen.
Het volledig Scratch-programma ziet er nu als volgt uit:

De variabele controlegetal kan nu worden vergeleken met de kk-waarde opgehaald in stap 1. Indien controlegetal gelijk is aan kk dan is IBAN correct. Indien dit echter niet het geval is dan is IBAN foutief. Op deze manier kan je controleren of het nummer van een bankrekening correct is.