webForumDet fria alternativet

C++ Kontrollsiffra i personnummer hur?

C/C++

2 svar · 2 008 visningar · startad av fusion

Medlem sedan okt. 20013 inlägg
Frågan#1

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;
}
----------------------------------------------------------------------
------------**

Medlem sedan aug. 2001723 inlägg
#2

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

Medlem sedan sep. 200162 inlägg
#3

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]

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
114 ms — ändringar (db)