Простенькая реализация проверки корректности ИНН - выдрано из чужих PL/SQL'евских сорцов и "лоб в лоб" перенесено на C. Есть еще "порт" на Visual Basic в Excel, но это уж совсем оффтопик :-) #include <stdio.h> #include <stdlib.h> int main(int argc, char ** argv) { int i; int buf; int len; int cnst[11]; char inn_to_check[13]; if (argc!=2) { fprintf (stderr,"Use: %s <inn_number>\n",argv[0]); return 4; } if ((strlen(argv[1])!=10)&&(strlen(argv[1])!=12)) { fprintf (stderr,"Bad INN - length must be 10 or 12 digits\n"); return 3; } for (i=0;i<strlen(argv[1]);i++) { if ((argv[1][i]<'0')||(argv[1][i]>'9')) { fprintf (stderr,"Bad INN - it contains non-digital symbols\n"); return 2; } } cnst[0] = 3; cnst[1] = 7; cnst[2] = 2; cnst[3] = 4; cnst[4] = 10; cnst[5] = 3; cnst[6] = 5; cnst[7] = 9; cnst[8] = 4; cnst[9] = 6; cnst[10] = 8; strcpy ( inn_to_check, argv[1] ); len = strlen ( inn_to_check ); if (len == 10) { buf = 0; for (i=0 ; i < len-1 ; i++) { buf += (inn_to_check[i]-'0') * cnst[2+i]; } buf = (buf % 11) % 10; if (inn_to_check[len-1] != ('0'+buf)) { fprintf (stderr,"Bad INN:10 - checksum doesn't match\n"); return 1; } } else { buf = 0; len=11; for (i=0 ; i < len-1 ; i++) { buf += (inn_to_check[i]-'0') * cnst[1+i]; } buf = (buf % 11) % 10; if (inn_to_check[len-1] != ('0'+buf)) { fprintf (stderr,"Bad INN:12 - checksum doesn't match on level 1\n"); return 1; } buf = 0; len=12; for (i=0 ; i < len-1 ; i++) { buf += (inn_to_check[i]-'0') * cnst[i]; } buf = (buf % 11) % 10; if (inn_to_check[len-1] != ('0'+buf)) { fprintf (stderr,"Bad INN:12 - checksum doesn't match on level 2\n"); return 1; } } printf ("INN is good\n"); return 0; }
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум pthread не работает (2006)
- Форум execve (2005)
- Форум c и iconv - помогите разобраться (2008)
- Форум математика (2005)
- Форум не работает inotify watch (2017)
- Форум non-blocking write (2011)
- Форум C, про типы (2005)
- Форум ofstream (2006)
- Форум stat() неправильно работает с cifs (2009)
- Форум покритикуйте функцию (2009)