algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Numer dowodu osobistego - Implementacja w C/C++
Ocena użytkownikóww: *****  / 5
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 02 marca 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

do.c:
// www.algorytm.org
// walidacja numeru dowodu osobistego
// Tomasz Lubinski (c) 2008

#include "stdio.h"

char *letterValues = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int letterValuesLen = 36;

int getLetterValue(char letter)
{
   int i;
   for (i=0; i<letterValuesLen; i++)
   {
      if (letter == letterValues[i])
      {
         return i;
      }
   }
   return -1;
}

int main()
{
   char id[100];
   int i=0;
   int checkSum;

   //pobierz numer dowodu osobistego
   printf("Podaj numer dowodu osobistego (bez spacji, myslinkow, itp)\n");
   scanf("%s", id);

   //sprawdz dlugosc podanego numeru
   if (strlen(id) != 9)
   {
      printf("Nieprawidlowa dlugosc numeru\n");
      return -1;
   }

   //sprawdz czy podano 3 litery a nastepnie 6 cyfr
   for (i=0; i<3; i++)
   {
      if (getLetterValue(id[i]) < 10)
      {
         printf("Nieprawidlowa seria dowodu\n");
         return -1;
      }
   }
   for (i=3; i<9; i++)
   {
      if (getLetterValue(id[i]) < 0 || getLetterValue(id[i]) > 9)
      {
         printf("Nieprawidlowy numer dowodu\n");
         return -1;
      }
   }

   //sprawdz cyfre controlna
   checkSum = 7 * getLetterValue(id[0]);
   checkSum += 3 * getLetterValue(id[1]);
   checkSum += 1 * getLetterValue(id[2]);
   checkSum += 7 * getLetterValue(id[4]);
   checkSum += 3 * getLetterValue(id[5]);
   checkSum += 1 * getLetterValue(id[6]);
   checkSum += 7 * getLetterValue(id[7]);
   checkSum += 3 * getLetterValue(id[8]);
   checkSum %= 10;
   if (checkSum != getLetterValue(id[3]))
   {
      printf("Podany numer dowodu jest niepoprawny\n");
   }
   else
   {
      printf("Podany numer dowodu jest poprawny\n");
   }

   return 0;
}
Dodaj komentarz