Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

Controle algorithme

Anoniem
None
21 antwoorden
  • Hallo,

    Ik ben op zoek naar twee programmatjes die het volgende doen:
    Het ene programma controleert of een bankrekeningnummer correct is. (Ik dacht dat dat iets in de vorm van een nine-proof was, weet niet zeker)
    Het andere programma controleert de correctheid van een sofi-nummer. Hiermee bedoel ik dus niet de lengte of, of er bepaalde waardes aanwezig zijn. Maar de controle of het een correcte invoer betreft. (Dit bevat natuurlijk wel ook lengte en vorm)

    Ik hoef niet echt een programma te krijgen, alleen de controle methode of documentatie daarover is goed genoeg.

    Bedankt,
    Marcel
  • Volgens mij kan je hier weinig anders aan doen dan de lengte checken…
  • FISCAAL NUMMER


    Sinds de zomer van 1985 weten alle Nederlanders dat zij een
    fiscaal nummer hebben, een nummcr waaronder ze bij de be-
    lastingdienst bekend zijn. Daarvoor hadden ze ook al een num-
    mer, maar dat was niet openbaar.
    Iedereen krijgt op zijn vijftiende jaar, of zodra hij eeen bedrijf
    begint, een nummer toegewezen van de belastingdienst. Alles
    wat en iedereen die maar een beetje belastingplichtig zou kun-
    nen zijn, krijgt een fiscaal nummer. Dat nummer is volstrekt
    willekeurig; er valt niets uit af te lezen - noch de geboorteda-
    tum, noch het geslacht, of wat dan ook.
    Het getal lijkt uit negen cijfers te bestaan, maar het zijn er
    maar acht: hct laatste is weer een 'controlecijfer' zoals dat ook
    wordt gebruikt bij BANKBILJETTEN en STREEPJESCODE. Hier-
    mee wordt de kans verkleind dat mens of machine een fout
    maakt bij het inlezen of intikken van het fiscale nummer. Het
    systeem gaat volgens de zogeheten 11-modulus.
    Vermenigvuldig het eerste cijfer van het getal met 9, het
    tweede met 8, het derde met 7 enzovoort tot en met het achtste
    cijfer met 2. Tel de uitkomsten van al deze produkten by elkaar
    op, en deel door elf. De rest is het negende cijfer van het fiscale
    nummer.
    Bij voorbeeld het fiscale nummer 063 796 363 (de O telt mee;
    vroeger bestond het fiscale nummer uit acht, nu uit negen cij-
    fers): O x 9 = 0; 6 x 8 = 48; 3 x 7 = 21; 7 x 6 = 42; 9 x
    5 = 45; 6 x 4 = 24; 3 x 3 = 9 en 6 x 2 = 12.
    Som: 201. Deling van 201 door 11 levert als rest 3, dat is het
    laatste cijfer van het fiscale nummer. De rest is nooit 10, daar is
    wel op gelet bij het maken van de nummers. Dus het fiscale
    nummer 063 795 36x bestaat niet, want dat zou een controle-
    som 197 opleveren en een rest van 10.
    Maar voor het overige zijn de fiscale nummers volstrekt wil-
    lekeurig. Ze zijn op de groei gemaakt: de cijfers lopen in princi-
    pe van 010 000 021 tot 999 999 999 (wie heeft het laagste num-
    mer?) terwijl er de komende tijd niet meer dan zes miljoen be-
    lastingplichtigen zullen zijn.
    Het fiscaal nummer is ook het nummer waaronder u bij de so-
    ciale diensten en bij de loonbelasting bekend bent - vandaar de
    benaming sofinummer: sociaal-fiscaal nummer. Achter het
    loonbelastingnummer staat soms nog een L met een getal; het
    getal geeft voor de werkgever aan in welk van zijn ondernemin-
    gen u werkzaam bent.

    Bron: ministerie van financiën

    _______________________________________


    Sofinummers en bankrekeningnummers (dit geldt overigens *niet* voor
    gironummers) moeten aan de 11-proef voldoen.

    Je vermenigvuldigt alle cijfers met een factor. Voor het laatste
    cijfer is deze factor 1, voor ieder voorgaand cijfer is de factor
    steeds 1 hoger.
    De som van de vermenigvuldigingen moet uiteindelijk een veelvoud van
    11 zijn.

    Voorbeeld: stel je sofinummer is 456123784.
    4 5 6 1 2 3 7 8 4 sofinr
    9 8 7 6 5 4 3 2 1 factor
    36 40 42 6 10 12 21 16 4 vermenigvuldigd

    De som is dan 36+40+42+6+10+12+21+16+4=187

    187 / 11 = 17 rest 0.

    Het nummer voldoet dus aan de 11-proef en is derhalve bestaanbaar.

    Al deze wijsheid en meer is hier te vinden:
    http://groups.google.com/groups?q=sofinummer+controleren&hl=nl
  • Je leert nog eens wat anders in dit forum :smile:
  • inderdaad :smile:

    De onderste oplossing werkt trouwens niet! Het totaal/11 moet niet op 0 uitkomen, maar er moet precies het laatste getal overblijven. Dit zou moeten werken..

    [code:1:29e0270330]
    function elevenCheck(n)
    {
    var totaal = 0;
    var factor = 2;
    if(n.length==8) n = '0' + n;

    for(i = n.length-1; i > 0; i–,factor++)
    totaal += n.substring(i-1,i) * factor;

    var rest = totaal % 11;
    if(rest >= 10) return false;
    return (rest == n.substr(n.length-1)) ? true : false;
    }
    [/code:1:29e0270330]

    dit stukje zou het moeten controleren
  • En voor een bankrekening nummer geld het zelfde:
    http://cgi.dit.nl/bank.cgi
  • Wederom: bedankt voor alle hulp!

    Marcel
  • [quote:e01c8739e7]
    Op 03-05-2002 10:43 schreef Jurriaan R:
    inderdaad :smile:

    De onderste oplossing werkt trouwens niet! Het totaal/11 moet niet op 0 uitkomen, maar er moet precies het laatste getal overblijven. Dit zou moeten werken..

    [code:1:e01c8739e7]
    function elevenCheck(n)
    {
    var totaal = 0;
    var factor = 2;
    if(n.length==8) n = '0' + n;

    for(i = n.length-1; i > 0; i–,factor++)
    totaal += n.substring(i-1,i) * factor;

    var rest = totaal % 11;
    if(rest >= 10) return false;
    return (rest == n.substr(n.length-1)) ? true : false;
    }
    [/code:1:e01c8739e7]

    dit stukje zou het moeten controleren
    [/quote:e01c8739e7]
    Uhm, nog even een opmerking ik heb namelijk het idee dat jij het anders bedoelt.

    (Alle 9 getallen) / 11 geeft een rest van 0.
    (Eerste 8 getallen) / 11 geeft een rest van het laatste getal.
  • Nog een kleine vraag:
    Ergens staat er een opmerking over gironummers dat dit niet werkt.
    Is hier wel iets voor?

    Marcel
  • met google kwam ik wat tegen, probeer zelf even, maar volgens mij zijn dat gewoon oplopendee nummers zonder controle cijfer.

    [quote:8dff320bf4]
    Gironummers, zoals je waarschijnlijk al wist, hebben niet altijd even
    veel cijfers, en beginnen gewoon bij 1. Gironummers kan je alleen
    controleren door de naam van de houder te vergelijken.[/quote:8dff320bf4]
    http://groups.google.com/groups?q=gironummers+controleren&hl=nl&selm=4lqir9%24eau%40news.IAEhv.nl&rnum=2

    staat trouwens hierboven ook al ergens:
    [quote:8dff320bf4]


    Bron: ministerie van financiën

    _______________________________________


    Sofinummers en bankrekeningnummers [b:8dff320bf4](dit geldt overigens *niet* voor
    gironummers)[/b:8dff320bf4] moeten aan de 11-proef voldoen.

    Je vermenigvuldigt alle cijfers met een factor. Voor het laatste
    cijfer is deze factor 1, voor ieder voorgaand cijfer is de factor
    steeds 1 hoger.

    [/quote:8dff320bf4]

    [ Dit bericht is bewerkt door: mvwinger op 2002-05-03 17:20 ]
  • [quote:669984359e]
    Uhm, nog even een opmerking ik heb namelijk het idee dat jij het anders bedoelt.

    (Alle 9 getallen) / 11 geeft een rest van 0.
    (Eerste 8 getallen) / 11 geeft een rest van het laatste getal.
    [/quote:669984359e]

    Inderdaad, allebei de oplossingen worden gegeven. Alleen ze zijn niet hetzelfde… als ik mijn bankrekening invul in de eerste.. dan krijg ik true.
    Vul ik hem in op de 2e manier.. dan wordt het false. Andersom met een geldig sofinummer. Dan werkt de eerste methode niet, maar de 2e wel.

    "(Eerste 8 getallen) / 11 geeft een rest van het laatste getal" lijkt alleen voor het sofinummer te gelden en komt uit de handleiding van de belastingsdienst,
    "(Alle 9 getallen) / 11 geeft een rest van 0" lijkt te werken voor banknummers, maar niet voor sofinummers.
  • Volgens mij heeft Jurriaan inderdaad gelijk ik heb het ook uit zitten proberen met enkele sofi en bank nummers.

    P.S. ik vond ook nog dat de Rabobank nummers van 10 cijfers kan hebben. Dus misschien verstandig om tot tien te controleren.

    Bedankt!
  • Sorry, denk foutje, ben bezig met php scriptje om te checken.

    Tien cijferige nummers van de rabobank zijn spaarrekeningen.
  • Hmm, één manier werkt wel altijd als je met absoluten waarde gaat werken.

    Live te zien:
    http://membres.lycos.fr/mvwing/nummer.php?nummer= met daarachter het nummer.

    [code:1:a003101e1e]
    <?PHP
    error_reporting(E_ALL);
    if (isset($_GET['nummer'])){
    echo "<B>".$nummer."</B><BR>";
    $totaal = 0;
    $len = strlen($_GET['nummer']);
    $val = $len;
    if ($len == 9 || $len == 10){
    for ($a = 0; $a < $len; $a++){
    $num = substr($_GET['nummer'],$a,1);
    if ($num != ".";){
    $totaal = $totaal + ($num * $val);
    $val–;
    }
    if ($a == ($len - 2)){
    $check = (($totaal/11)-(round($totaal/11)))*11;
    echo "Checkvalue = <B>".$check."</B><BR>";
    if (substr($_GET['nummer'],8,1) == (string)$check && $len == 9){
    $type = "Sofinummer";
    }
    }
    if ($a == ($len-1) && ((round($totaal/11)-($totaal/11))*11) == 0){
    $type = "Bankrekeningnummer";
    }
    }
    if (!isset($type)) $type = "invalid";
    }
    echo "Dit is een ".$type;
    } else {
    echo "Roep aan met <I>nummer.php?nummer=rekeningnummer</I> ofn<BR> <I>nummer.php?nummer=sofinummer</I> om te checken.";
    }
    ?>[/code:1:a003101e1e]

    EDIT: Nieuwe code ondersteund ook 10 cijferige nummers.

    [ Dit bericht is bewerkt door: mvwinger op 2002-05-03 19:17 ]
  • Mooie parse error :wink:
  • was even bezig :razz:
  • Iets betere controler misschien…

    [quote:d61ba6fc42]
    13080744

    Warning: Undefined variable: type in nummer.php on line 35
    Dit is een
    [/quote:d61ba6fc42]
  • Is al weg ik controleerde alleen op isset() maar nu ook op != ""

    Bij mij doet hij het nou.

    [ Dit bericht is bewerkt door: mvwinger op 2002-05-03 19:40 ]
  • En daar is dan weer de functie empty() voor..

    die combineert isset() en !=""

    dus:

    if(!empty($type))
  • Note: empty() is a language construct.

    Maar ik lees daar alleen maar negatieve verhalen, maar nu werkt het, en de volgende keer zal ik het niet meer vergeten en mischien zelfs empty() gebruiken.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.