skriv in ett giltigt personnummer
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
/* delar upp personnr från FUNKTION 1*/
int uppdelning(int year[], int month[], int day[], int number[], char str[]){
int len= 0;
len = strlen(str);
if(len==10){ //ååmmddxxxx
year[0] = 1;
year[1] = 9;
year[2] = str[0] - 48;
year[3] = str[1] - 48;
month[0]=str[2] -48;
month[1]=str[3] -48;
day[0]=str[4] -48;
day[1]=str[5] -48;
number[0]=str[6] -48;
number[1]=str[7] -48;
number[2]=str[8] -48;
number[3]=str[9] -48;
}
else if (len==12){ //ååååmmddxxxx
year[0] = str[0] - 48;
year[1] = str[1] - 48;
year[2] = str[2] - 48;
year[3] = str[3] - 48;
month[0]=str[4] -48;
month[1]=str[5] -48;
day[0]=str[6] -48;
day[1]=str[7] -48;
number[0]=str[8] -48;
number[1]=str[9] -48;
number[2]=str[10] -48;
number[3]=str[11] -48;
}
else if (len==11){ //ååmmdd-xxxx eller ååmmdd+xxxx
if (str[6]=='-'){ //om tecken [6] är ett minus '-'
if ((str[0]-48)==0){ // och [0] är 0
year[0] = 2; // är man född på 2000-talet
year[1] = 0;
}
else {
year[0] = 1; //om [0] är 1 eller högre är man född på 1900-talet
year[1] = 9;
}
}
else { //om tecken [6] är ett plus '+'
if ((str[0]-48) == 0){
year[0] = 1;
year[1] = 9;
}
else {
year[0] = 1;
year[1] = 8;
}
}
year[2] = str[0] - 48;
year[3] = str[1] - 48;
month[0]=str[2] -48;
month[1]=str[3] -48;
day[0]=str[4] -48;
day[1]=str[5] -48;
number[0]=str[7] -48;
number[1]=str[8] -48;
number[2]=str[9] -48;
number[3]=str[10] -48;
}
else if (len==13){ //ååååmmdd-xxxx
year[0] = str[0] - 48;
year[1] = str[1] - 48;
year[2] = str[2] - 48;
year[3] = str[3] - 48;
month[0]=str[4] -48;
month[1]=str[5] -48;
day[0]=str[6] -48;
day[1]=str[7] -48;
number[0]=str[9] -48;
number[1]=str[10] -48;
number[2]=str[11] -48;
number[3]=str[12] -48;
}
}
int readpersonnummer(int year[], int month[], int day[], int number[], char str[]) {
char nr[20];
int i = 0;
int valid = 1;
int len;
int sked;
do{ printf("%s\n", str); //skriv in ett giltigt personnummer
scanf("%s",nr); // läses in som 'nr'
i++; // variabeln 'i' räknar upp (till 10)
len = strlen(nr); //strlen tar reda på längden på det vi läst in (nr)...
kontroll=checkValid1(nr, len); //skickar nr till funktion 1 för att jämföras med personnummersmodeller
if (kontroll==0) { // om '0' returneras
kontroll=checkValid2(nr, len); // kollar vi vidare i funktion 2
if (sked==0){ // om '0' returneras
kontroll=checkValid3(nr, len); // kollar vi vidare i funktion 3
}
}
if (kontroll==1){
uppdelning(year, month, day, number, nr);
}
} while (kontroll==0 && i<10);
return kontroll;
}
//******* FUNKTION 1 ******//
int checkValid1(char nr[], int len) { //funktion som kollar om personnr stämmer överrens med
int i; // exemplena ååmmddxxxx eller ååååmmddxxxx
char temp[2];
temp[1]='\0';
if (len==10 || len==12) //om nr-längden är 10 lr 12 loopar vi:
{
for (i = 0; i < len; i++) {
temp[0]=nr[i];
int tal = atoi(temp);
if (tal > 9) // "ASCII to integrate", kollar om det är siffror.
return 0; // bokstaven A skulle t.ex. får värdet 65 och funktionen skulle
} // returnera värdet 0 (falskt). Men 5 --> 5
}else
return 0;
return 1;
}
//******* FUNKTION 2 ******//
int checkValid2(char nr[], int len) { //funktion som kollar om personnr stämmer överrens med
int i; // exemplena ååmmdd-xxxx eller ååmmdd+xxxx
char temp[2];
temp[1]='\0';
if (len==11) //om nr-längden är 11 loopar vi:
{
if (!(nr[6]=='+' || nr[6]=='-')) return 0;
for (i = 0; i <6 ; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9) // "ASCII to integrate", kollar om det är siffror.
return 0; // bokstaven A skulle t.ex. få värdet 65 och funktionen skulle
} // returnera värdet 0 (falskt). Men 5 --> 5
for (i = 7; i <=10 ; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9)
return 0;
}
return 1;
} else
return 0;
}
//******* FUNKTION 3 ******//
int checkValid3(char nr[], int len) { //funktion som kollar om personnr stämmer överrens med
int i; // exemplet ååååmmdd-xxxx
char temp[2];
temp[1]='\0';
if (len==13 && nr[8]=='-') //om nr-längden är 13 och tecken 9='-' loopar vi:
{
for (i = 0; i <= 7; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9) // "ASCII to integrate", är tecken 1-8 siffror?
return 0;
}
for (i = 9; i <= 12; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9)
return 0;
}
return 1;
} else
return 0;
}
void printIntArray(int a[], int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main(void){
int year[4];
int month [2];
int day [2];
int number[4];
char *str = "skriv in ett giltigt personnummer";
readpersonnummer(year,month,day,number,str);
printIntArray(year, 4);
printIntArray(month, 2);
printIntArray(day, 2);
printIntArray(number, 4);
getch();
return 0;
}
#include<conio.h>
#include<string.h>
#include<stdlib.h>
/* delar upp personnr från FUNKTION 1*/
int uppdelning(int year[], int month[], int day[], int number[], char str[]){
int len= 0;
len = strlen(str);
if(len==10){ //ååmmddxxxx
year[0] = 1;
year[1] = 9;
year[2] = str[0] - 48;
year[3] = str[1] - 48;
month[0]=str[2] -48;
month[1]=str[3] -48;
day[0]=str[4] -48;
day[1]=str[5] -48;
number[0]=str[6] -48;
number[1]=str[7] -48;
number[2]=str[8] -48;
number[3]=str[9] -48;
}
else if (len==12){ //ååååmmddxxxx
year[0] = str[0] - 48;
year[1] = str[1] - 48;
year[2] = str[2] - 48;
year[3] = str[3] - 48;
month[0]=str[4] -48;
month[1]=str[5] -48;
day[0]=str[6] -48;
day[1]=str[7] -48;
number[0]=str[8] -48;
number[1]=str[9] -48;
number[2]=str[10] -48;
number[3]=str[11] -48;
}
else if (len==11){ //ååmmdd-xxxx eller ååmmdd+xxxx
if (str[6]=='-'){ //om tecken [6] är ett minus '-'
if ((str[0]-48)==0){ // och [0] är 0
year[0] = 2; // är man född på 2000-talet
year[1] = 0;
}
else {
year[0] = 1; //om [0] är 1 eller högre är man född på 1900-talet
year[1] = 9;
}
}
else { //om tecken [6] är ett plus '+'
if ((str[0]-48) == 0){
year[0] = 1;
year[1] = 9;
}
else {
year[0] = 1;
year[1] = 8;
}
}
year[2] = str[0] - 48;
year[3] = str[1] - 48;
month[0]=str[2] -48;
month[1]=str[3] -48;
day[0]=str[4] -48;
day[1]=str[5] -48;
number[0]=str[7] -48;
number[1]=str[8] -48;
number[2]=str[9] -48;
number[3]=str[10] -48;
}
else if (len==13){ //ååååmmdd-xxxx
year[0] = str[0] - 48;
year[1] = str[1] - 48;
year[2] = str[2] - 48;
year[3] = str[3] - 48;
month[0]=str[4] -48;
month[1]=str[5] -48;
day[0]=str[6] -48;
day[1]=str[7] -48;
number[0]=str[9] -48;
number[1]=str[10] -48;
number[2]=str[11] -48;
number[3]=str[12] -48;
}
}
int readpersonnummer(int year[], int month[], int day[], int number[], char str[]) {
char nr[20];
int i = 0;
int valid = 1;
int len;
int sked;
do{ printf("%s\n", str); //skriv in ett giltigt personnummer
scanf("%s",nr); // läses in som 'nr'
i++; // variabeln 'i' räknar upp (till 10)
len = strlen(nr); //strlen tar reda på längden på det vi läst in (nr)...
kontroll=checkValid1(nr, len); //skickar nr till funktion 1 för att jämföras med personnummersmodeller
if (kontroll==0) { // om '0' returneras
kontroll=checkValid2(nr, len); // kollar vi vidare i funktion 2
if (sked==0){ // om '0' returneras
kontroll=checkValid3(nr, len); // kollar vi vidare i funktion 3
}
}
if (kontroll==1){
uppdelning(year, month, day, number, nr);
}
} while (kontroll==0 && i<10);
return kontroll;
}
//******* FUNKTION 1 ******//
int checkValid1(char nr[], int len) { //funktion som kollar om personnr stämmer överrens med
int i; // exemplena ååmmddxxxx eller ååååmmddxxxx
char temp[2];
temp[1]='\0';
if (len==10 || len==12) //om nr-längden är 10 lr 12 loopar vi:
{
for (i = 0; i < len; i++) {
temp[0]=nr[i];
int tal = atoi(temp);
if (tal > 9) // "ASCII to integrate", kollar om det är siffror.
return 0; // bokstaven A skulle t.ex. får värdet 65 och funktionen skulle
} // returnera värdet 0 (falskt). Men 5 --> 5
}else
return 0;
return 1;
}
//******* FUNKTION 2 ******//
int checkValid2(char nr[], int len) { //funktion som kollar om personnr stämmer överrens med
int i; // exemplena ååmmdd-xxxx eller ååmmdd+xxxx
char temp[2];
temp[1]='\0';
if (len==11) //om nr-längden är 11 loopar vi:
{
if (!(nr[6]=='+' || nr[6]=='-')) return 0;
for (i = 0; i <6 ; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9) // "ASCII to integrate", kollar om det är siffror.
return 0; // bokstaven A skulle t.ex. få värdet 65 och funktionen skulle
} // returnera värdet 0 (falskt). Men 5 --> 5
for (i = 7; i <=10 ; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9)
return 0;
}
return 1;
} else
return 0;
}
//******* FUNKTION 3 ******//
int checkValid3(char nr[], int len) { //funktion som kollar om personnr stämmer överrens med
int i; // exemplet ååååmmdd-xxxx
char temp[2];
temp[1]='\0';
if (len==13 && nr[8]=='-') //om nr-längden är 13 och tecken 9='-' loopar vi:
{
for (i = 0; i <= 7; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9) // "ASCII to integrate", är tecken 1-8 siffror?
return 0;
}
for (i = 9; i <= 12; i++) {
temp[0]=nr[i];
if (atoi(temp) > 9)
return 0;
}
return 1;
} else
return 0;
}
void printIntArray(int a[], int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main(void){
int year[4];
int month [2];
int day [2];
int number[4];
char *str = "skriv in ett giltigt personnummer";
readpersonnummer(year,month,day,number,str);
printIntArray(year, 4);
printIntArray(month, 2);
printIntArray(day, 2);
printIntArray(number, 4);
getch();
return 0;
}
Kommentarer
Trackback