---
title: "C++ Kontrollsiffra i personnummer hur?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/28116-c-kontrollsiffra-i-personnummer-hur"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "fusion"
published: "2001-10-22T13:44:00.000Z"
updated: "2001-11-04T13:15:00.000Z"
replies: 2
views: 2035
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/28116-c-kontrollsiffra-i-personnummer-hur"
---

# C++ Kontrollsiffra i personnummer hur?

## #1 — fusion, 2001-10-22T13:44Z

Någon här som vet hur man beräknar den rätta kontrollsiffran i ett 
personnummer från följande kod ? 

Jag vill alltså kunna räkna ut den rätta kontrollsiffran för personnummret om 
personnummret de slagit in är felaktig. 

Skriv gärna in koden i programmet med en lämplig kommentar. 

\----------------------------------------------------------------------
\------------- 
\#include \<iostream\> 
using namespace std; 
\#include \<iomanip\> 

char persNr\[12\]; 
int summa=0,check,tal; 

void main() 

{ 
cout\<\<"Person Nummer kontroll"\<\<endl\<\<endl\<\<"Detta program kontrollerar om ett 
personnummer är riktigt" 
\<\<endl\<\<"Skriv in ett personnummer pa formen 770614-2051" 
\<\<endl\<\<"\> "; 
cin.getline(persNr,12); 
for(int i=0 ; i\<=10 ; i++) 
{ 
tal=0; 
if(i==6) i++; 
check=i; 
if(i\>=7) check--; 
if( ( (check+2) %2 )==0 ) tal=(persNr*\-48)\*2; 
else tal=persNr*\-48; 
if( tal\>=10 ) tal=(tal-10)+1; 
summa+=tal; 
} 
check=summa/10; 
check\*=10; 
if(summa==check) 
{ 
cout\<\<endl\<\<"Kontrollsiffran är rätt"\<\<endl; 
} 
else 
cout\<\<endl\<\<"Kontrollsiffran felaktig, rätt siffra är " \<\<endl; 
} 
\----------------------------------------------------------------------
\------------**

Permalänk: https://www.webforum.nu/p/28116

## #2 — Fridolf, 2001-10-23T09:49Z

ratt_siffra = 10 - ((summa - tal) % 10);
if (ratt_siffra == 10) ratt_siffra = 0;
tror jag...

Permalänk: https://www.webforum.nu/p/401315

## #3 — fnolis, 2001-11-04T13:15Z

Inte hur man räknar ut den sista men hur man kontrollerar att den sista är rätt:
\<font size="1" face="Verdana, Arial, Helvetica, sans-serif"\>Kod:\<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"\>
bool mod10(const string validate)
{   
   vector\<int\> numbers;
        
   for( int i=0; validate != '\\0'; i++ )
   {   
      if ( validate \- '0' \>= 0  && validate \- '0' \< 10 )
        numbers.push_back( validate \- '0' );
   }
        
   int weight = (!(numbers.size()%2))?(2):(1);
   int digit, value, sum = 0;
            
   for (int j = 0; j \< numbers.size(); j++)
   {       
      digit = numbers\[j\];
      value = digit \* weight;
      if (value \> 9)
         value -= 9;
      sum += value;
      weight = (weight == 1) ? 2 : 1;
   }
   return ((sum % 10) == 0) ? true : false;
}

hoppas att det kan vara till någon hjälp...

en mod10 check är även det som görs på de flesta kontokort =D

\[Redigerat av fnolis den 04 nov 2001\]

Permalänk: https://www.webforum.nu/p/401316

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/28116-c-kontrollsiffra-i-personnummer-hur
