18. oktober 2004 - 15:47
Der er
6 kommentarer og 1 løsning
C++ funktion som kontrolerer CPR-nummer
Hey håber i kan hjælpe mig med følgende; Jeg skal, som overskriften siger, bruge en c++ funktion som tester cpr-nummer af formen ddmmyy-xxxx. På forhånd tak 8)
Annonceindlæg fra Conscia
18. oktober 2004 - 19:14
#2
Du skal bruge modulus 11 til det, så vidt jeg husker. Jeg har en klasse liggende som jeg selv har skrevet i Java, kan du bruge det til noget?
18. oktober 2004 - 19:17
#4
Du kunne starte med noget i stil med nedenstående og så teste for rigtig antal dage i måneden og checket fra jakobdo's link. #include <iostream> #include <sstream> #include <string> bool ToUInt(unsigned int &aNr, const std::string &aStr) { std::stringstream ss(aStr); return ss >> aNr; } bool IsCpr(std::string &aCpr) { unsigned int T; if(aCpr.size() == 11 && ToUInt(T, aCpr.substr(0, 2)) && T <= 31 && ToUInt(T, aCpr.substr(2, 2)) && T <= 12 && ToUInt(T, aCpr.substr(4, 2)) && aCpr[6] == '-' && ToUInt(T, aCpr.substr(7))) { return true; } return false; } int main() { std::string CPR; std::cout << "Indtast CPR nummer: "; std::cout.flush(); std::getline(std::cin, CPR); std::cout << (IsCpr(CPR) ? "Ok" : "Fejl") << std::endl; }
18. oktober 2004 - 19:29
#5
Mit bud: #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; }