hjælp til skudår i c++ cpr tjek
Hej.Jeg har denne string i c++ til at tjekke gyldigheden af Cpr-numre. Jeg har fået den til at tjekke ved skudår vha. %4. Mit problem ligger i at et cpr nummer med cinfrene (ex) 290200-xxxx kan være 2 forskellige datoer;
29.02.1900 eller 29.02.2000
Men 29.02.1900 er ugyldig da 1900 ikke var skudår, men 29.02.2000 derimod er et skudår. Nogen der kan hjælpe? Det haster 8)
Her er min string:
#include <vcl>
#include <stdio>
#include <string>
#include <iostream>
#include <ctype>
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
#pragma argsused
static int ix[] = { 0, 1, 2, 3, 4, 5, 7, 8, 9, 10 };
static int c[] = { 4, 3, 2, 7, 6, 5, 4, 3, 2, 1 };
int isvalid(char *number)
{
int i,d,m,y,temp;
char buf[3];
if (strlen(number) != 11)
{
return 0;
}
if (number[6] != '-')
{
return 0;
}
for (i = 0; i < 10; i++)
{
if (!isdigit(number[ix[i]]))
{
return 0;
}
}
strncpy(buf,number,2);
buf[2]='\0';
d=atoi(buf);
strncpy(buf,number+2,2);
buf[2]='\0';
m=atoi(buf);
strncpy(buf,number+4,2);
buf[2]='\0';
y=atoi(buf);
if (d > 31)
{
return 0;
}
if (m > 12)
{
return 0;
}
if ((m == 4, 9, 6, 11) && (d > 30))
{
return 0;
}
if (y == 0)
{
if (( m == 02) && (d >= 29))
{
return 0;
}
}
if (y % 4 == 0)
{
if ((m == 02) && (d > 29))
{
return 0;
}
}
temp=0;
for (i = 0; i < 10; i++)
{
temp = temp + c[i] * (number[ix[i]] - '0');
}
return ((temp % 11) == 0);
}
void test(char *s)
{
printf("%s -> %d\n",s,isvalid(s));
}
main()
{
test("123456-1234");
test("111111-1118"); //korrekt cpr
test("test12-2545");
test("989889-647");
test("99-345");
test("");
cin >> c;
}