Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [Prog] IBAN-nummer berekenen (https://forum.scholieren.com/showthread.php?t=1111816)

Martin 23-02-2005 14:20

[VBA] IBAN-nummer berekenen
 
IBAN = International Bank Account Number

Ik wil met VBA een IBAN-nummer kunnen "berekenen". Op zich is dit niet zo moeilijk, want:

NL91 ABNA 0417 1643 00

NL = ISO landcode, in dit geval altijd NL
91 = controlegetal
ABNA = naamcode bank, moet altijd ABNA zijn in dit geval
0417164300 = bankrekeningnummer, is ook bekend

Als ik een ABN AMRO-bankrekeningnummer invoer moet hij automatisch dit maken:

NL** ABNA 0417 1643 00

Dat is geen probleem, maar ik moet het controlegetal uitrekenen wat op de plek van de sterretjes moet staan. Maar hoe bereken ik in godsnaam dit controlegetal? Dit kan ik namelijk helaas nergens vinden... Iemand een idee?

dafelix 23-02-2005 15:42

lees de JS van deze pagina uit :)

http://www.rietumu.com/eng.nsf/page?...256E9400268F24

fosje 23-02-2005 15:52

die staat dus hier: http://www.rietumu.lv/iban2.js

Martin 23-02-2005 17:16

Citaat:

dafelix schreef op 23-02-2005 @ 16:42 :
lees de JS van deze pagina uit :)

http://www.rietumu.com/eng.nsf/page?...256E9400268F24

Heb al heel wat scripts doorgespit op Internet, maar kon eerlijk gezegd níet de functie vinden die het controlegetal maakt :(

fosje 23-02-2005 17:50

zoals ik al zei, wat jij zoekt staat op http://www.rietumu.lv/iban2.js in de code van de webpagina is namelijk hetvolgende te vinden:

<script language="JavaScript1.2" src="http://www.rietumu.lv/iban2.js"></script>

src staat voor source als ik het goed heb, hiermee wordt de code in iban2.js behandeld alsof hij in de pagina staat maar op deze manier kun je heel makkelijk een ander uiterlijk plaatsen zonder lappen code te hoeven kopieren bijvoorbeeld.

ps. mocht je het daar nog niet vinden, ergens onderaan function ChecksumIBAN(iban)

Martin 23-02-2005 18:22

Hmm, ik probeer nu deze functions te ontleden om deze om te kunnen zetten naar VBA, maar kom er niet echt uit... :s

PHP-code:

function capital2digits(ch){
  var 
capitals "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  for (var 
0capitals.length; ++i)
    if (
ch == capitals.charAt(i))
      break;
  return 
10;
}

function 
mod97(digit_string){
  var 
0;
  for (var 
0digit_string.length; ++i)
    
= (10 parseInt(digit_string.charAt(i))) % 97;
  return 
m;


De eerste functie zet letters om naar cijfers, maar hoe ze dat doen is mij een raadsel, hetzelfde geldt voor de tweede function.

Hmmz, zou dit eigenlijk niet in JS-topic moeten? Hoewel ik me afvraa g of dat wel handig is aangezien het gaat om het omzetten naar VBA-code...

bartjenl 24-02-2005 12:35

volgens http://www.ecbs.org/Download/EBS204_V3.2.pdf

Gebruik als voorbeeld:

NL91 ABNA 0417 1643 00

91 wil je berekenen.

je hebt ABNA (bankcode) en 0417 1643 00 (rekeningnummer) en je weet dat je in NL (Nederland) zit.

eerste stap:
maak een "kunstmatig" IBAN-nummer bestaande uit landcode + "00" + bankcode + bankrekeningnummer, dus
NL00ABNA0417164300

stap 2:
zet de eerste vier karakters naar het einde:
ABNA0417164300NL00

stap 3:
zet de letters om naar cijfers volgens de methode: A=10, B=11, C=12 ... Z=35:
101123100417164300232100

stap 4:
Bereken de modulo van dat getal met 97 en trek het resultaat daarvan af van 98. Als je dan een getal van één cijfer overhoudt, plak er dan een 0 voor.

modulo van 101123100417164300232100 met 97 = 7. Trek dat af van 98 --> 91.

Daar is je controlegetal.

Martin 25-02-2005 08:54

Probeer nu met VBA de modulo te berekenen met de operator Mod, maar deze geeft als foutmelding: "Overloop":

PHP-code:

Modulo 335097073232100# Mod 97 

EDIT: ^^^Er zit een bugje in de PHP-parser volgens mij ;)

Citaat:

Overloop (Fout 6)

U krijgt een overloop als u probeert een toewijzing te maken die de grens van het toewijzingsdoel overschrijdt. Voor deze fout zijn de volgende oorzaken en oplossingen mogelijk:

Het resultaat van een toewijzing, een berekening of een gegevenstypeconversie is zo groot dat het niet kan worden weergegeven binnen het bereik van waarden die zijn toegestaan voor dat type variabele.
Wijs de waarde toe aan een variabelentype dat een groter bereik van waarden kan bevatten.

Een toewijzing aan een eigenschap is groter dan de maximale waarde die de eigenschap kan ontvangen.
Zorg dat de toewijzing binnen het bereik valt van de eigenschap waarvoor deze is bedoeld.

U probeert een getal in een berekening te gebruiken en dat getal moet een integer zijn, maar het resultaat is groter dan een integer. Bijvoorbeeld:
Dim x As Long
x = 2000 * 365 ' Error: Overflow
U kunt dit probleem omzeilen door het getal als volgt te typen:

Dim x As Long
x = CLng(2000) * 365
Selecteer voor aanvullende informatie het desbetreffende item en druk op F1 (in Windows) of op HELP (op de Macintosh).


Zoals gezegt kan dit worden veroorzaakt doordat het getal in de berekening groter is dan een integer. Ik heb het gegeven advies gevolgt, maar toch krijg ik weer de melding "Overloop". Wie heeft er een work-a-round?


Alle tijden zijn GMT +1. Het is nu 14:48.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.