Wiskunde vraagje: mod97 op rekeningnummers

Onderwerpen die nergens anders thuis horen en toch eerder technisch van aard zijn? Post ze hier!
Plaats reactie
ITnetadmin
userbase crew
userbase crew
Berichten: 9821
Lid geworden op: 28 jan 2012, 18:22
Uitgedeelde bedankjes: 273 keer
Bedankt: 811 keer

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/
EotT
Crew support
Crew support
Berichten: 745
Lid geworden op: 13 sep 2010, 13:11
Uitgedeelde bedankjes: 206 keer
Bedankt: 324 keer
Provider
Te Koop forum

Chatgpt geeft me volgende uitleg:
(Ik wil niet blindelings op chatgpt vertrouwen, maar het lijkt op het eerste zicht wel aannemelijk)

Afbeelding
Gebruikersavatar
Splitter
Elite Poster
Elite Poster
Berichten: 6450
Lid geworden op: 10 maa 2010, 12:30
Uitgedeelde bedankjes: 70 keer
Bedankt: 660 keer
Recent bedankt: 9 keer
Provider
Te Koop forum

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)
ITnetadmin
userbase crew
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 :-)
Gebruikersavatar
heist_175
Moderator
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.
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
Bij zoiets denk ik altijd: zalig de armen van geest, aan hen behoort het Rijk Gods (Mt, 5:3 12).
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
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.
Gebruikersavatar
Joe de Mannen
Elite Poster
Elite Poster
Berichten: 7442
Lid geworden op: 22 feb 2005, 12:46
Uitgedeelde bedankjes: 550 keer
Bedankt: 719 keer
Recent bedankt: 1 keer
Provider

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.
Ik ben alleen verantwoordelijk voor mij eigen uitspraken, niet voor wat anderen ervan maken of aan toevoegen...
ITnetadmin
userbase crew
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.
Gebruikersavatar
heist_175
Moderator
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 :).
ITnetadmin
userbase crew
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 :bang:
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.
Gebruikersavatar
Joe de Mannen
Elite Poster
Elite Poster
Berichten: 7442
Lid geworden op: 22 feb 2005, 12:46
Uitgedeelde bedankjes: 550 keer
Bedankt: 719 keer
Recent bedankt: 1 keer
Provider

Ah, nu is het inderdaad een ander verhaal... :)

J.
Ik ben alleen verantwoordelijk voor mij eigen uitspraken, niet voor wat anderen ervan maken of aan toevoegen...
Gebruikersavatar
heist_175
Moderator
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.
ITnetadmin
userbase crew
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
Premium Member
Berichten: 553
Lid geworden op: 29 nov 2008, 16:26
Uitgedeelde bedankjes: 20 keer
Bedankt: 48 keer
Recent bedankt: 2 keer

heist_175 schreef: 3 maanden geleden Daarom hebben grotere banken ook meerdere prefixen, met 1mio rekeningnummers spring je niet ver.
Moet dat niet 9.9 mio zijn ?
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
Gebruikersavatar
heist_175
Moderator
Moderator
Berichten: 17582
Lid geworden op: 07 okt 2010, 09:35
Locatie: Kempen
Uitgedeelde bedankjes: 531 keer
Bedankt: 1273 keer
Recent bedankt: 1 keer

rmag schreef: 3 maanden geleden Moet dat niet 9.9 mio zijn ?
Ja, 9'999'999 = 10mio.
In de realiteit zal het ietske minder zijn, omdat bepaalde nummers "0000000" niet worden vrijgegeven.
Plaats reactie

Terug naar “Allerlei”