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;
}


Kommentarer

Kommentera inlägget här:

Namn:
Kom ihåg mig?

E-postadress: (publiceras ej)

URL/Bloggadress:

Kommentar:

Trackback
RSS 2.0