webForumDet fria alternativet

Personnummer :)

2 svar · 299 visningar · startad av fluff

fluffMedlem sedan juli 200268 inlägg
#1

God morgon ! :birp

Jag hittade den här tråden -> http://www.webforum.nu/showthread.php?s=&threadid=37525

Och tänkte att jag skulle roa mig med att försöka översätta den till c++ (eftersom jag just börjat med det), trodde att det inte skulle vara sååå stor skillnad på php / c++.

Hursomhelst så lyckades jag inte alls, snöade bara in på säkert helt fel saker.. :-I

Iaf, Hur gör man? :)

ViktorMedlem sedan aug. 20021 752 inlägg
#2

Det var ju roligt att börja med C++ igen efter några månader utan, svårt var det också att kom in i det :)

Men tillslut så gick det och här är resultatet, provat med 2 riktiga och många felaktiga personnummer och då fungerar den,

void CPnrDlg::OnBnClickedButton1()
{
	if(checkPnr("7505051234"))
	{
		MessageBox("Korrekt personnummer");
	}
	else
	{
		MessageBox("Felaktigt personnummer");
	}
}

bool CPnrDlg::checkPnr(char* pnr)
{
	if(strlen(pnr)==10)
	{
		int n(2);
		int tmp(0);
		int sum(0);
		char ch;
		for(int i=0;i<9;i++)
		{
			ch=pnr[i];
			tmp=atoi((char*)&ch)*n;
			tmp>9?sum+=1+(tmp%10):sum+=tmp;
			n==2?n=1:n=2;
		}
		return!((sum + atoi(&pnr[9]))% 10);
	}
	return false;
}

/Viktor

Sang-draxMedlem sedan juli 2002581 inlägg
#3

Viktor skrev:


ch=pnr[i];
tmp=atoi((char*)&ch)*n;

Det där är farliga saker som ger svårhittade buggar

bättre att skriva så här:

tmp = ch - '0';

eller om 100% portabilitet önskas

char ch[2];
ch[1] = '\0';
....
ch[0] = pnr[i];
tmp = atoi(ch)*n;
126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)