Avatar billede fly3r Nybegynder
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.
Avatar billede scheea2000 Nybegynder
29. september 2005 - 09:45 #1
sprog?
Avatar billede scheea2000 Nybegynder
29. september 2005 - 09:48 #2
Avatar billede fly3r Nybegynder
29. september 2005 - 09:59 #3
jeg skal bruge et program i c++ og jeg skal bruge filerne programmet er kompileret på
Avatar billede arne_v Ekspert
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;
}
Avatar billede erikjacobsen Ekspert
29. september 2005 - 10:42 #5
Du skal også lige vide at kontrolciffer-beregningen en dag bliver ophævet, så der vil blive uddelt personnumre, der vil være lovlige, men ikke opfylde ovenstående. Det bør dit program forberedes for: http://www.cpr.dk/Index/dokumenter.asp?o=11&n=0&d=393&s=4
Avatar billede fly3r Nybegynder
29. september 2005 - 10:48 #6
arne, har du de filer du includer?
Avatar billede arne_v Ekspert
29. september 2005 - 10:59 #7
de kommer med din C compiler
Avatar billede fly3r Nybegynder
29. september 2005 - 11:01 #8
ahh lækkert! nu laver den kun en fejl.. den siger Call to undefined function 'atoi' in function isvalid(char *).... er det en jeg mangler at definere?
Avatar billede arne_v Ekspert
29. september 2005 - 11:02 #9
prøv og tilføj

#include <stdlib.h>
Avatar billede fly3r Nybegynder
29. september 2005 - 11:04 #10
helt sikkert! tak for hjælpen! smider du oige et svar?
Avatar billede fly3r Nybegynder
29. september 2005 - 11:05 #11
*lige
Avatar billede arne_v Ekspert
29. september 2005 - 11:06 #12
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester