BSN-nummers controleren?
Arnout van Kempen over rommelen in een digitale wereld.
Op GitHub heb ik een bestandje gezet, BSN.txt met daarin 999 regels, random gegenereerd door Excel. Iedere regel heeft hetzelfde formaat: een driecijferig regelnummer, een bsn-nummer van het formaat xxxx-xx-xxx en een code van vijf hoofdletters. Die drie velden zijn van elkaar gescheiden door spaties of tabs. De uitdaging voor de liefhebbers is: schoon dit bestand op, door alle regels eruit te halen waar een ongeldig bsn-nummer staat, en zet de resterende regels in een bestand BSN-clean.txt met alle goede regels, met de velden gescheiden door één spatie. Zet op het scherm alle regelnummers waar een ongeldig bsn-nummer in staat.
De oplossing staat op GitHub onder de naam 025-bsn.c
Wie het zelf wil proberen, inclusief het zoeken naar zaken die nog niet besproken zijn in deze rubriek moet nu stoppen met verder lezen. Succes!
Voor wie wel nog hulp wil bij de nieuwe onderwerpen:
De geldigheid van een bsn-nummer kan worden bepaald door ieder cijfer uit het nummer te vermenigvuldigen met de positie van het nummer, dat te sommeren, met als uitzondering het laatste cijfer dat niet met 1 maar met -1 moet worden vermenigvuldigd, en dat resultaat te delen door 11. Als het deelbaar is door 11, is het een geldig bsn-nummer.
Het openen van een bestand om te schrijven werkt hetzelfde als het openen om te lezen, alleen krijgt het nu als attribuut een 'w' mee, in plaats van een 'r', dus FILE * fopen(<bestand>,”w”);
Het lezen van een regel uit een bestand kan met fgets(<string>,<lengte string>,* FILE). Als dat een NULL oplevert is het einde van het bestand bereikt.
De functie char * strtok(<string>,” \t”) levert een string op naar het eerste veld in een string, tot een scheidingsteken, in dit geval spatie of tab. Door <string> te vervangen door NULL krijg je het volgende veld, en dat kan je herhalen.
Als char c = '5' dan is int i=c-'0' het getal 5.
5/2==2 (want 5 en 2 zijn int). 5%2=1. % levert je dus de 'rest' van een deling van ints.
Schrijven naar een bestand werkt exact hetzelfde als printen naar het scherm, met een kleine aanpassing: je gebruikt fprintf(FILE *,…) in plaats van printf(…)
Succes!
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op www.github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
![](/siteassets/accountant.nl/afbeeldingen-440x300/ict-technologie-cybersecurity-toekomst/moederbord-440x300.jpg)
Wat is het verschil tussen een computer en pen en papier?
Arnout van Kempen over rommelen in een digitale wereld.
![](/siteassets/accountant.nl/afbeeldingen-440x300/ict-technologie-cybersecurity-toekomst/moederbord-440x300.jpg)
Wat is het verschil tussen een computer en een wasmachine?
Arnout van Kempen over rommelen in een digitale wereld.
![](/siteassets/accountant.nl/afbeeldingen-440x300/ict-technologie-cybersecurity-toekomst/moederbord-440x300.jpg)
Wat is het verschil tussen een computer en een mens?
Arnout van Kempen over rommelen in een digitale wereld.
![](/siteassets/accountant.nl/afbeeldingen-440x300/ict-technologie-cybersecurity-toekomst/moederbord-440x300.jpg)
Wat alle accountants zouden moeten weten over computers
Arnout van Kempen over rommelen in een digitale wereld.