29. september 2005 - 09:40
Der er
11 kommentarer og
1 løsning
Program til CPR nummer
er der nogen der kan hjælpe mig med at finde eller lave et program der kontrollere om et CPR nummer er sandt eller falskt?
Argumentet til constructor’en er en string, der indeholder et cprnummer på formen dag, måned, år, bindestreg, løbenummer og checkciffer, f.eks. 130743-0289, hvor checkcifferet er 9.
Returværdien fra check funktionen skal angive, om cprnummeret er korrekt eller ej. Hvis ikke, skal det af det fremgå af errorMsg, hvori fejlen består.
29. september 2005 - 10:40
#4
#include <stdio.h>
#include <string.h>
#include <ctype.h>
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;
}
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));
}
int main()
{
test("123456-1234");
test("111111-1118");
return 0;
}