Eens een wiskunde vraagje, voor de verandering
Ik had de voorbije week een discussie met iemand die een bankkaart postte in een FB groep met enkel de laatste 4 cijfers van het rekeningnummer afgedekt, en de persoon wilde niet geloven dat ik dan ipv 10,000 combinaties, er slechts 100 moet nakijken om het juiste nummer te reconstrueren, wat ik dan ook bewezen heb.
Enfin, dat bracht me in een rabbit hole van "hoe zijn rekeningnummers gestructureerd".
Zoals ik al wist, zijn IBAN nummers opgebouwd uit de landcode, het controlegetal (een bewerking met mod97), en dan het nationale rekeningnummer.
Voor Belgie is dat in het formaat <BEcc nnnn nnnn nnmm>, waarbij "c"= controlegetal, en "n"=nationaal nummer, met nog een nationaal controlegetal ingebouwd, dat we hier effe "m" zullen noemen.
Om de mod97 hiervan te berekenen, breng je het eerste blokje naar achter, vervang je de letters door hun cijferwaarde (A=10,B=11,etc), en zet je het controlegetal op "00"; dan wordt de structuur <nnnn nnnn nnmm 111400>.
Van dat getal trek je dan een mod97, en die trek je dan af van 98, om je controlegetal te krijgen.
Alleen kan je van een nummer van die lengte niet zomaar in excel een mod97 trekken, want excel houdt blijkbaar niet van lange getallen in een modulus.
Gelukkig vond ik online een blog die beschreef hoe je (bij een BE rekeningnummer) een soort "shortcut" kunt maken.
Ipv van het ganse getal <nnnn nnnn nnmm 111400> een mod97 te trekken, kan je een truc toepassen:
Neem het nationale controlegetal 2x, daarachter de landcode en de 00, en trek daar de mod97 van.
Dan werk je met een veel kleiner getal <mmmm111400>. Dat blijkt te werken.
Een praktisch voorbeeldje, met het fictieve rekeningnummer 000-1234567-mm.
Dat nummer krijg met een simpele mod97 het controlegetal 48, om in zijn geheel 000-1234567-48 te vormen.
De IBAN moet je dan als volgt berekenen: 98 - mod97(000123456748111400).
Maar het werkt dus ook als je gewoon dit doet: 98 - mod97(4848111400).
Beide geven als controlgetal 11, voor een IBAN: <BE11 0001 2345 6748>.
Nu is mijn vraag: *Waarom* werkt dat?
De blog in kwestie sprak er niet over; en heeft maar 2 entries, die allebei 15 jaar oud zijn.
Wat is de wiskundige reden dat je hier gewoon 2x het nationale controlegetal mag nemen ipv het volledige nationale rekeningnummer, en de deling identiek blijft?
Ter referentie, de blog:
https://thebasementgeek.wordpress.com/2 ... nt-number/
Wiskunde vraagje: mod97 op rekeningnummers
-
ITnetadmin
- userbase crew

- Berichten: 9821
- Lid geworden op: 28 jan 2012, 18:22
- Uitgedeelde bedankjes: 273 keer
- Bedankt: 811 keer
- Splitter
- Elite Poster

- Berichten: 6450
- Lid geworden op: 10 maa 2010, 12:30
- Uitgedeelde bedankjes: 70 keer
- Bedankt: 660 keer
- Recent bedankt: 9 keer
heeft als ik me niet vergis idd als reden dat het belgische rekeningnummer reeds mod97 gebruikte, en je dus eigenlijk het getal zelf kan samenvatten met het mod97 resultaat.
dus je doet dan eigenlijk:
98 (want iban zegt dat elk geldig rekeningnummer mod97 1 moet zijn)
MIN
48 (wat het nummer zelf voorstelt) + 48 (wat het controlegetal is) + 111400 (want BE en nog geen controlegetal)
dus eigenlijk zijn de belgische rekeningnummers vrij goed te controleren:
- het nationaal rekeningnummer heeft een controle in de laatste 2 cijfers (mod97)
- het iban formaat begint daarbovenop ook nog een mod97 die je kan controleren
- en het gehele nummer moet altijd 1 zijn
dus in jouw voorbeeld:
000-1234567 = nationaal rekeningnummer
48 = mod97 resultaat (en belangrijk is dan ook dat alles voor 97 zichzelf als waarde heeft, 97 0 is, 98 = 1, ....)
je iban is dan dus idd BE11 0001 2345 6748 en als je daar opnieuw de mod97 van trekt (dus op 000123456748111411 ),
dan zal dat 1 zijn.
maar dit werkt dus enkel als het getal dat je omzet, reeds met mod97 opgebouwd is.
(fun fact: ook de easyswitch nummers om van abbo te veranderen zijn, normaalgezien, allemaal met mod97 opgebouwd)
dus je doet dan eigenlijk:
98 (want iban zegt dat elk geldig rekeningnummer mod97 1 moet zijn)
MIN
48 (wat het nummer zelf voorstelt) + 48 (wat het controlegetal is) + 111400 (want BE en nog geen controlegetal)
dus eigenlijk zijn de belgische rekeningnummers vrij goed te controleren:
- het nationaal rekeningnummer heeft een controle in de laatste 2 cijfers (mod97)
- het iban formaat begint daarbovenop ook nog een mod97 die je kan controleren
- en het gehele nummer moet altijd 1 zijn
dus in jouw voorbeeld:
000-1234567 = nationaal rekeningnummer
48 = mod97 resultaat (en belangrijk is dan ook dat alles voor 97 zichzelf als waarde heeft, 97 0 is, 98 = 1, ....)
je iban is dan dus idd BE11 0001 2345 6748 en als je daar opnieuw de mod97 van trekt (dus op 000123456748111411 ),
dan zal dat 1 zijn.
maar dit werkt dus enkel als het getal dat je omzet, reeds met mod97 opgebouwd is.
(fun fact: ook de easyswitch nummers om van abbo te veranderen zijn, normaalgezien, allemaal met mod97 opgebouwd)
-
ITnetadmin
- userbase crew

- Berichten: 9821
- Lid geworden op: 28 jan 2012, 18:22
- Uitgedeelde bedankjes: 273 keer
- Bedankt: 811 keer
Thanks voor het extra wiskundige inzicht.
Weer iets bijgeleerd vandaag
Weer iets bijgeleerd vandaag
- heist_175
- Moderator

- Berichten: 17582
- Lid geworden op: 07 okt 2010, 09:35
- Locatie: Kempen
- Uitgedeelde bedankjes: 531 keer
- Bedankt: 1273 keer
- Recent bedankt: 1 keer
Heeft dus geen bal met wiskunde van doen, wel met BBAN vs IBAN (BBAN = Belgian Bank Account Number, IBAN = International Bank Account Number).
De laatste 2cijfers van een BBAN of IBAN afdekken heeft dus ook geen enkele zin, want het is gewoon 1 berekening (geen 100, laat staan 10K).
Zo is een BBAN opgebouwd: https://nl.wikipedia.org/wiki/Rekeningnummer
En zo maak je van een BBAN een IBAN: https://nl.wikipedia.org/wiki/Internati ... unt_Number
https://www.ibanbic.be/
Kan je heel gemakkelijk zelf in Excel zelf maken.
Idem met rijksregisternummers: https://nl.wikipedia.org/wiki/Rijksregi ... enstelling
En idem met identiteitskaartnummers:
Een bekende phisingtruc is:
- vraag eerst de geboortedatum
- vraag dan de laatste 5 cijfers van het RR, zogezegd om het niet helemaal te weten te komen
Als je beide combineert, heb je het volledige RR.
Je kan zelfs, als phisher, controleren of het wel juist is, wat de persoon u net gegeven heeft.
Wat een achterlijkheid om iets van identificeerbare gegevens op het internet te posten.
Ik zie ik Whatsapp-groepen van de klas foto's van de volledige bankkaart: rekeningnummer, kaartnummer, soms incl klantennummer.
Zucht.
De laatste 2cijfers van een BBAN of IBAN afdekken heeft dus ook geen enkele zin, want het is gewoon 1 berekening (geen 100, laat staan 10K).
Zo is een BBAN opgebouwd: https://nl.wikipedia.org/wiki/Rekeningnummer
En zo maak je van een BBAN een IBAN: https://nl.wikipedia.org/wiki/Internati ... unt_Number
https://www.ibanbic.be/
Kan je heel gemakkelijk zelf in Excel zelf maken.
Idem met rijksregisternummers: https://nl.wikipedia.org/wiki/Rijksregi ... enstelling
En idem met identiteitskaartnummers:
Een bekende phisingtruc is:
- vraag eerst de geboortedatum
- vraag dan de laatste 5 cijfers van het RR, zogezegd om het niet helemaal te weten te komen
Als je beide combineert, heb je het volledige RR.
Je kan zelfs, als phisher, controleren of het wel juist is, wat de persoon u net gegeven heeft.
Bij zoiets denk ik altijd: zalig de armen van geest, aan hen behoort het Rijk Gods (Mt, 5:3 12).ITnetadmin schreef: 3 maanden geleden een discussie met iemand die een bankkaart postte in een FB groep met enkel de laatste 2 cijfers van het rekeningnummer afgedekt
Wat een achterlijkheid om iets van identificeerbare gegevens op het internet te posten.
Ik zie ik Whatsapp-groepen van de klas foto's van de volledige bankkaart: rekeningnummer, kaartnummer, soms incl klantennummer.
Zucht.
-
ITnetadmin
- userbase crew

- Berichten: 9821
- Lid geworden op: 28 jan 2012, 18:22
- Uitgedeelde bedankjes: 273 keer
- Bedankt: 811 keer
Uiteraard heeft het feit dat je een getal kan vervangen door zijn mod97 value in deze berekening, wel met wiskunde te doen.
Ik snap je uitspraak dan ook niet goed?
Ik volg ook niet dat je maar 1 berekening zou moeten doen, om 2 missende cijfertjes te vinden, ipv 100?
Je moet wel degelijk de laatste 4 cijfers vinden die voldoen aan het iban controlegetal; hoewel er maar 100 mogelijkheden zijn, moet je de juiste wel vinden uit die 100 opties; de vlotste manier lijkt me gewoon om ze allemaal te berekenen en de match er uit te halen.
Ik snap je uitspraak dan ook niet goed?
Ik volg ook niet dat je maar 1 berekening zou moeten doen, om 2 missende cijfertjes te vinden, ipv 100?
Je moet wel degelijk de laatste 4 cijfers vinden die voldoen aan het iban controlegetal; hoewel er maar 100 mogelijkheden zijn, moet je de juiste wel vinden uit die 100 opties; de vlotste manier lijkt me gewoon om ze allemaal te berekenen en de match er uit te halen.
- Joe de Mannen
- Elite Poster

- Berichten: 7442
- Lid geworden op: 22 feb 2005, 12:46
- Uitgedeelde bedankjes: 550 keer
- Bedankt: 719 keer
- Recent bedankt: 1 keer
Die 2 laatste cijfers bij bvb een Belgisch rekeningnummer zijn toch gewoon de rest na deling van de eerste cijfers door 97. Dus als je de 2 laatste niet hebt, bereken je die toch gewoon. 1 berekening en klaar.
J.
J.
Ik ben alleen verantwoordelijk voor mij eigen uitspraken, niet voor wat anderen ervan maken of aan toevoegen...
-
ITnetadmin
- userbase crew

- Berichten: 9821
- Lid geworden op: 28 jan 2012, 18:22
- Uitgedeelde bedankjes: 273 keer
- Bedankt: 811 keer
Klopt, en dat is wiskunde; maar als je de laatste 4 niet hebt, dan moet je eerst de 100 mogelijkheden van de eerste 2 daarvan opsommen, daar dan telkens de laatste 2 bij berekenen, en dan van het resultaat nog ns de iban versie ook berekenen, en die vergelijken met het iban controlegetal dat je wel hebt.
Om met het bovenstaande voorbeeld te werken:
in dit geval was het gegeven nummer <BE11 0001 2345 nncc>.
Om "nncc" te kennen, moet je voor alle mogelijkheden van "nn" de "cc" waarde berekenen, en dan het gehele getal checken als geldig IBAN.
Om met het bovenstaande voorbeeld te werken:
in dit geval was het gegeven nummer <BE11 0001 2345 nncc>.
Om "nncc" te kennen, moet je voor alle mogelijkheden van "nn" de "cc" waarde berekenen, en dan het gehele getal checken als geldig IBAN.
- heist_175
- Moderator

- Berichten: 17582
- Lid geworden op: 07 okt 2010, 09:35
- Locatie: Kempen
- Uitgedeelde bedankjes: 531 keer
- Bedankt: 1273 keer
- Recent bedankt: 1 keer
In de openingspost gaat het toch over "de laatste 2 cijfers van het rekeningnummer afgedekt"?
Als je meer afdekt, moet je beginnen rekenen natuurlijk.
Als je wat handig bent met Excel, zal het ook met fors minder berekeningen kunnen
.
Als je meer afdekt, moet je beginnen rekenen natuurlijk.
Als je wat handig bent met Excel, zal het ook met fors minder berekeningen kunnen
-
ITnetadmin
- userbase crew

- Berichten: 9821
- Lid geworden op: 28 jan 2012, 18:22
- Uitgedeelde bedankjes: 273 keer
- Bedankt: 811 keer
Bedankt om een pijnlijke en zeer relevante typo op te merken 
Dat moest dus 4 zijn; 4 cijfers afgedekt.
Nu snap ik de verwarring.
Ik moet dat ingewisseld hebben met het "slechts 2 cijfers te zoeken, de rest bereken je wel" deel van het verhaal.
Dat moest dus 4 zijn; 4 cijfers afgedekt.
Nu snap ik de verwarring.
Ik moet dat ingewisseld hebben met het "slechts 2 cijfers te zoeken, de rest bereken je wel" deel van het verhaal.
- Joe de Mannen
- Elite Poster

- Berichten: 7442
- Lid geworden op: 22 feb 2005, 12:46
- Uitgedeelde bedankjes: 550 keer
- Bedankt: 719 keer
- Recent bedankt: 1 keer
Ah, nu is het inderdaad een ander verhaal... 
J.
J.
Ik ben alleen verantwoordelijk voor mij eigen uitspraken, niet voor wat anderen ervan maken of aan toevoegen...
- heist_175
- Moderator

- Berichten: 17582
- Lid geworden op: 07 okt 2010, 09:35
- Locatie: Kempen
- Uitgedeelde bedankjes: 531 keer
- Bedankt: 1273 keer
- Recent bedankt: 1 keer
Strikt genomen is het rekeningnummer bij een bank ook maar de "7" in 3-7-2:
- de eerste 3 cijfers zijn de prefix van de bank
- de 7 is het rekeningnummer
- de laatste 2 is het controlegetal (MOD97)
En met IBAN plak je er nog BE en een MOD97 voor.
Daarom hebben grotere banken ook meerdere prefixen, met 1mio rekeningnummers spring je niet ver.
En sommige banken splitsen die "7" ook nog eens op in productcategoriën of - lang geleden - in regionaal uitgegeven rekeningnummers.
- de eerste 3 cijfers zijn de prefix van de bank
- de 7 is het rekeningnummer
- de laatste 2 is het controlegetal (MOD97)
En met IBAN plak je er nog BE en een MOD97 voor.
Daarom hebben grotere banken ook meerdere prefixen, met 1mio rekeningnummers spring je niet ver.
En sommige banken splitsen die "7" ook nog eens op in productcategoriën of - lang geleden - in regionaal uitgegeven rekeningnummers.
-
ITnetadmin
- userbase crew

- Berichten: 9821
- Lid geworden op: 28 jan 2012, 18:22
- Uitgedeelde bedankjes: 273 keer
- Bedankt: 811 keer
Klopt, klopt. Ik had voor de eenvoud de minder relevante technische details weggelaten, waaronder het onderscheid tussen bankprefix en werkelijk rekeningnummer.
-
rmag
- Premium Member

- Berichten: 553
- Lid geworden op: 29 nov 2008, 16:26
- Uitgedeelde bedankjes: 20 keer
- Bedankt: 48 keer
- Recent bedankt: 2 keer
Moet dat niet 9.9 mio zijn ?heist_175 schreef: 3 maanden geleden Daarom hebben grotere banken ook meerdere prefixen, met 1mio rekeningnummers spring je niet ver.
Wat met Wise ?
Alle klanten krijgen een BE-rekening, van zodra dat ze een EUR overschrijving doen. Wise heeft 4 bank prefix (903, 904, 905 and 967, dacht ik)
Wise heeft 20 mio klanten
