Moduluskontroll
Modulus-kontroll er verifisering og generering av kontrollsiffer på viktige nummer, som fx. fødselsnummer, kontonummer og KID. Kalles også CDV: Check Digit Verification.
Modulus 11 (Mod11)
Modulus 11 er i bruk i flere sammenhenger: Fødselsnummer, kontonummer, KID, m.fl. Mod11 kan gi kontrollsiffer 0-9, samt '-' i tilfelle kontrollsifferet beregnes til 10.
Fødselsnummer
Fødselsnummer består av seks siffer som representerer fødselsnummer, deretter tre siffer som er et løpenummer, og til slutt to kontrontrollsiffer. Første kontrollsiffer bruker Mod11-algoritmen, med med et helt spesielt sett med multiplikasjonsfaktorer, mens siste kontrollsiffer er helt standard Mod11. Dersom noen av kontrollsifferne beregnes til '-', så forkastes fødselsnummeret - det vil da ikke bli utstedt.
Forbehold: Det er kun kontrollsifferne (2 siste siffer) som sjekkes i forhold til resten av fødselsnummeret. Det foretas ingen sjekk av om datoen er en gyldig dato, eller om individnummeret (7.-9. siffer) er mulig for den angitte datoen.
Les mer om fødselsnummer på Skatteetaten sine sider.
Generer kontrollsiffer til fødselsnummer
Kontonummer
Kontonummer bruker helt standard Mod11, i tillegg er det krav om de fire første sifferne representerer riktig bank og at kontonummeret er på 11 tegn. Dersom kontrollsifferet blir '-', så forkastes kontonummeret og brukes ikke.
Forbehold: Det er kun kontrollsifferet (siste siffer) som sjekkes i forhold til resten av kontonummeret. Det foretas ingen sjekk av om bankregisternummeret (4 første siffer) er gyldig. I tillegg til sjekk av kontrollsiffer, så verifiseres det at kontonummeret er 11 tegn langt.
Sjekk av Orgnr, KID, ISBN, strekkoder etc. (MOD11)
Beregning av kontrollsiffer - MOD11
Modulus10 (Mod10)
Modulus10 kalles Luhn's algoritme, og er en annen algoritme enn Modulus11, og brukes fx. til validering av KID-nr på bankgiroer. Les mer på Wikipedia. Jeg har laget VBA-kode for dette, og den er implementer i et Excel-dokument også.
Sjekk av KID etc. (MOD10)
Beregning av kontrollsiffer - MOD10
Eksempel med fødselsnummer
I eksemplet her bruker jeg som et eksempel fødselsnummeret 26059765131.
Beregning av 1. kontrollsiffer
Man tar utgangspunkt i de 9 første sifferne (her 260597651). Først multipliserer man siffer for siffer med følgende tallrekke: 3, 7, 6, 1, 8, 9, 4, 5 og 2. Deretter summerer man resultatene. Så finner første kontrollsiffer ved å trekke "resten" man får når man deler dette på 11 (herav navnet modulus11-kontroll), og trekker denne "resten" fra 11. Hvis kontrollsifferet blir 11, så settes det til 0, og hvis det blir 10, så er det ikke gyldig (da må det genereres et nytt individnummer).
Eksempel: Fødselnummeret er 26059765131. De første 9 sifferne, som danner utgangspunktet for å beregne kontrollsifferet, er 260597651. Nedenfor vises regnestykket:
Siffer nr. | Siffer | Multiplikator | Multiplum |
---|---|---|---|
1 | 2 | 3 | 6 |
2 | 6 | 7 | 42 |
3 | 0 | 6 | 0 |
4 | 5 | 1 | 5 |
5 | 9 | 8 | 72 |
6 | 7 | 9 | 63 |
7 | 6 | 4 | 24 |
8 | 5 | 5 | 25 |
9 | 1 | 2 | 2 |
Sum: | 239 |
Denne summen deler man på 11, og får da en "rest" på 8 (11x21=231, 239-231=8). Dette trekker vi fra 11, og får da 3 (11-8=3).
Første kontrollsiffer skal være 3, og det stemmer i vårt tilfelle.
Beregning av 2. kontrollsiffer
Framgangsmåten er tilsvarende som for 1. kontrollsiffer, men man tar utgangspunkt i de 10 første sifferne (her 2605976513), og tallrekken er annerledes: 5, 4, 3, 2, 7, 6, 5, 4, 3 og 2. Egentlig er tallrekken 2 til 7 bakenifra, og man begynner på 2 igjen på det syvende sifferet bakenifra.
Dette er også måten å finne kontrollsifferet til kontonummer på, da de har kun et kontrollsiffer.
Eksempel: Fødselsnummeret (eller like gjerne kontonummeret) er 26059765131. De første 10 sifferne, som danner utgangspunktet for å beregne kontrollsifferet, er 2605976513. Nedenfor vises regnestykket:
Siffer nr. | Siffer | Multiplikator | Multiplum |
---|---|---|---|
1 | 2 | 5 | 10 |
2 | 6 | 4 | 24 |
3 | 0 | 3 | 0 |
4 | 5 | 2 | 10 |
5 | 9 | 7 | 63 |
6 | 7 | 6 | 42 |
7 | 6 | 5 | 30 |
8 | 5 | 4 | 20 |
9 | 1 | 3 | 3 |
10 | 3 | 2 | 6 |
Sum: | 208 |
Denne summen deler man på 11, og får da en "rest" på 10 (11x18=198, 208-198=10). Dette trekker vi fra 11, og får da 1 (11-10=1).
Andre kontrollsiffer skal være 1, og det stemmer i vårt tilfelle.
Eksempel med KID og Mod10
Man starter med utgangspunktet, som kan være et tall med hvilket som helst lengde, innenfor rimelighetens grenser... og tallrekken er annerledes: 1 og 2 om hverandre, og man starter med 2 bakfra. Dersom multiplikasjonen gir et resultat som er større enn eller lik 10, så trekkes ifra 9.
Eksempel: KID er 3000924872. De første 9 (i dette tilfellet) sifferne, som danner utgangspunktet for å beregne kontrollsifferet, er 300092487. Nedenfor vises regnestykket:
Siffer nr. | Siffer | Multiplikator | Multiplum | Multiplum justert |
---|---|---|---|---|
1 | 3 | 2 | 6 | 6 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 2 | 0 | 0 |
4 | 0 | 1 | 0 | 0 |
5 | 9 | 2 | 18 | 9 (18-9) |
6 | 2 | 1 | 2 | 2 |
7 | 4 | 2 | 8 | 8 |
8 | 8 | 1 | 8 | 8 |
9 | 7 | 2 | 14 | 5 (14-9) |
Sum: | 38 |
Denne summen (38) deler man på 10, og får da en "rest" på 8. Dette trekker vi fra 10, og får da 2.
Kontrollsifferet skal være 2, og det stemmer i vårt tilfelle.
Copyright © Alf Kåre Lefdal.