Ocena użytkownikóww: ***** / 3
Nadesłany przez Tomasz Lubiński, 13 października 2005 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.
regon_c.c:
/**
* @author Tomasz Lubinski
* www.algorym.org
* (c) 2005
*
* REGON
*/
#include <stdio.h>
#include <stdlib.h>
short REGON[11];
int valid = 0;
int REGONLength = 0;
int checkSum9() {
int sum = 8 * REGON[0] +
9 * REGON[1] +
2 * REGON[2] +
3 * REGON[3] +
4 * REGON[4] +
5 * REGON[5] +
6 * REGON[6] +
7 * REGON[7];
sum %= 11;
if (sum == 10) {
sum = 0;
}
if (sum == REGON[8]) {
return 1;
}
else {
return 0;
}
}
int checkSum14() {
int sum = 2 * REGON[0] +
4 * REGON[1] +
8 * REGON[2] +
5 * REGON[3] +
0 * REGON[4] +
9 * REGON[5] +
7 * REGON[6] +
3 * REGON[7] +
6 * REGON[8] +
1 * REGON[9] +
2 * REGON[10] +
4 * REGON[11] +
8 * REGON[12];
sum %= 11;
if (sum == 10) {
sum = 0;
}
if (sum == REGON[13]) {
return 1;
}
else {
return 0;
}
}
int checkSum() {
if (REGONLength == 9) {
return checkSum9();
}
else {
return (checkSum9() && checkSum14());
}
}
void REGONValidator(char *REGONNumber) {
int i;
if ((strlen(REGONNumber) != 9) && (strlen(REGONNumber) != 14)) {
valid = 0;
}
else {
REGONLength = strlen(REGONNumber);
for (i = 0; i < REGONLength; i++){
REGON[i] = REGONNumber[i] - 48;
}
if (checkSum()) {
valid = 1;
}
else {
valid = 0;
}
}
}
void main(void)
{
char REGON[200];
printf("Podaj numer REGON\n");
scanf("%s", REGON);
REGONValidator(REGON);
if (valid == 1) {
printf("Numer REGON jest prawidlowy\n");
}
else {
printf("Numer REGON jest nieprawidlowy\n");
}
return;
}