Ga naar inhoud

Controle algorithme


Aanbevolen berichten

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
Link naar reactie
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
Link naar reactie
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
Link naar reactie
[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.
Link naar reactie
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 ]
Link naar reactie
[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.
Link naar reactie
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 ]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...