Just nu i M3-nätverket
Gå till innehåll

10-modulmetoden (checksiffra)


mongomatte

Rekommendera Poster

Hej!

För er som inte vet används 10-modulmetoden ofta, personnummer, OCR-nummer bankgironummer mm. Man använder det för att minimera risken för fel. Exempelvis om man betalar räkningar på internet och skriver en siffra fel på OCR-nummret så går betalningen inte igenom. Den sista siffran är checksiffra och bygger på de föregående. Med hjälp av alla siffror utom den sista kan man alltså beräkna den sista.

 

1. Ta tex ditt personnummer, multiplicera näst sista siffran med 2, blir talet större än 10, addera de båda siffrorna i talet.

2. Multiplicera tredje sista siffran med 1.

3. Gör punkt 1 med fjärde sista siffran.

4. Gör punkt 2 med femte sista siffran.

5. Fortsätt tills alla siffror är klara, summera all dessa tal (som nu är mindre än 10) och få ett värde, avrunda upp till nästa tiotal och subtrahera detta tiotal med värdet så har du sista siffran i personnummret.

 

Är det någon som kan förklara för mig varför tex 10-modulmetoden är så säker? Jag förstår att om man bara skriver en siffra fel, så stämmer inte checksiffran. Men vad jag har förstått blir det osannolikt att checksiffran stämmer även om man skriver två siffror fel. Det måste finnas något jag inte förstår i själva förfarandet med att multiplicera med 2,1,2,1,2.. osv. Skulle man kunna göra på något annat sätt som också blir hyfsat säkert?

 

[inlägget ändrat 2007-02-01 10:27:11 av mongomatte]

Länk till kommentar
Dela på andra webbplatser

Är det någon som kan förklara för mig varför tex 10-modulmetoden är så säker?

Nja. Egentligen är det väl inte säkrare än att addera alla siffror och ta sista siffran som kontroll. Dvs om du vill kontrollera för oavsiktliga felskrivningar. Det är fortfarande 1/10 chans att en dubbell-felskrivning kommer att ge rätt kontrollsiffra.

 

Fördelen är naturligtvis att det beter sig väldigt oregelbundet och att det är svårare att medvetet hitta de kombinationer som ger rätt checksumma. Dvs det är en bra kontroll mot folk som försöker att fejka siffror i" huvudet". Men om du slumpvis skulle ändra 2 siffror så kommer fortfarande 1/10 att bli rätt.

 

Om vi t.ex antar att någon har det okristna födelsenumret

660606

med personnumret 666

så kommer ju kontrollsiffran att bli 7 (synd, det var nästan snyggt)

660606-6667 (Undrar om det är ett verkligt personnummer? Om det finns så hoppas jag att hon är svartrockare eller nåt)

 

Om du håller födelsenummret och den första siffran i personnumret konstant och slumpvis ändrar de 2 sista siffrorna i själva personnumret

660606-6xx(7) så kommer du att upptäcka att ca 10% av alla dina frammslumpade nummer kommer att ge kontrolsiffran 7

Men att manuellt ta fram listan:

 

09, 14, 28, 33, 47, 52, 66, 71, 85, 90

utan att gå igenom alla 100 varianter kräver att du kan räkna med de oregelbunda mod funktionerna.

 

För att öka säkerheten mot slumpfel måste man helt enkelt jobba med fler kontrollsiffror om minska chansen att kontrollsiffran blir rätt. För att minska risken för medvetna manipulationer så måste du göra funktionen ännu oregelbundnare.

 

 

****Ed***

Ändrade några dumheter. hoppas ingen såg...

 

[inlägget ändrat 2007-02-01 13:01:06 av MH2]

Länk till kommentar
Dela på andra webbplatser

Egentligen är det väl inte säkrare än att addera alla siffror och ta sista siffran som kontroll. Dvs om du vill kontrollera för oavsiktliga felskrivningar. Det är fortfarande 1/10 chans att en dubbell-felskrivning kommer att ge rätt kontrollsiffra.

Fast när man råkar skriva fel så är det vissa fel som är vanligare, dels att man skriver ett steg åt sidan, dvs 5 blir 6, och dels att man kastar om siffror. Om man bara adderar siffrorna så klarar man inte av att upptäcka en omkastning, det gör däremot metoden där varannan siffra multipliceras med 2.

 

Edit:rättelse

 

[inlägget ändrat 2007-02-01 15:02:24 av Cecilia]

Länk till kommentar
Dela på andra webbplatser

Joo, det är ju sant. Det jag skrev gäller ju bara rent slumpmässiga fel. Kan säkert förbättras ytterligare genom att införa ännu större oregelbundenhet i ekvationen. Exempelvis någon del som är helt beroende av positionen, inte bara Jämn/ojämn position.

 

Med tanke på hur det numeriska tangenbordet ser ut så är felskrivningar på +-3 steg säkert överrepresenterade. Det borde gå att konstruera checksumman så att den är extra intorelant mot det också (vette tusan hur).

 

Länk till kommentar
Dela på andra webbplatser

Tackar för exemplet! Nu förstod jag bättre. Men om man nu mot förmodan slår TVÅ siffror fel, tex på sin räknings OCR-nummer, så är de 10 % av kombinationerna som ger rätt checksiffra ändå väldigt oregelbundna, precis som du visar.

 

Länk till kommentar
Dela på andra webbplatser

  • 10 months later...

Så här ser functionen ut i C#

 

public static long ReturnChecksum(string strNumber)

{

long lngSum;

long lngTemp;

long CheckNumber;

 

lngSum = 0;

for (int lngPos = 0; lngPos < strNumber.Length; lngPos++)

{

lngTemp = long.Parse(strNumber.Substring(lngPos, 1)) * (((lngPos + 1) % 2) + 1);

if (lngTemp > 9)

{

lngTemp = lngTemp - 9;

}

lngSum = lngSum + lngTemp;

}

CheckNumber = 10 - (lngSum % 10);

return CheckNumber;

}

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...