Ocena użytkownikóww: ***** / 5
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;
}