Алгоритм проверки контрольного числа ИНН и страхового номера ПФDelphi , Синтаксис , МатематикаАлгоритм проверки контрольного числа ИНН и страхового номера ПФАвтор: Камбалов Андрей Модуль содержит две функции для проверки контрольного числа ИНН и страхового номера ПФ CheckINN - Функция вычисляет контрольное число ИНН и возвращает True если ИНН введен правильно или False в противном случае CheckPFCertificate
unit INN_PF; // =========================================== // Камбалов А.Н. // ACampball@mail.ru // =========================================== interface function CheckINN(const INN: string): Boolean; function CheckPFCertificate(const PF: string): Boolean; implementation uses SysUtils; // ================================================================================================== // Функция вычисляет контрольное число ИНН и возвращает True если ИНН // введен правильно или False в противном случае // В качестве параметра передается проверяемый ИНН // Для справки: структура ИНН // 10-ти разрядный ИНН - NNNNXXXXXC // 12-ти разрядный ИНН - NNNNXXXXXXCC // где: NNNN - номер налоговой инспекции // XXXXX, XXXXXX - порядковый номер налогоплательщика (номер записи в госреестре) // C - контрольное число в 10-ти разрядном ИНН // CC - контрольное число в 12-ти разрядном ИНН // (фактически, идущие подряд две контрольные цифры) // ================================================================================================== function CheckINN(const INN: string): Boolean; const factor1: array[0..8] of byte = (2, 4, 10, 3, 5, 9, 4, 6, 8); factor2: array[0..9] of byte = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8); factor3: array[0..10] of byte = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8); var i: byte; sum: word; sum2: word; begin Result := False; try if Length(INN) = 10 then begin sum := 0; for i := 0 to 8 do sum := sum + StrToInt(INN[i + 1]) * factor1[i]; sum := sum mod 11; sum := sum mod 10; Result := StrToInt(INN[10]) = sum; end else if Length(INN) = 12 then begin sum := 0; for i := 0 to 9 do sum := sum + StrToInt(INN[i + 1]) * factor2[i]; sum := sum mod 11; sum := sum mod 10; sum2 := 0; for i := 0 to 10 do sum2 := sum2 + StrToInt(INN[i + 1]) * factor3[i]; sum2 := sum2 mod 11; sum2 := sum2 mod 10; Result := (StrToInt(INN[11]) = sum) and (StrToInt(INN[12]) = sum2); end; // except Result := False; end; // try end; // =========================================== // Функция вычисляет контрольное число страхового номера ПФ и возвращает True если // оно введено правильно или False в противном случае // В качестве параметра передается страховой номер ПФ без разделителй // // Проверка контрольного числа Страхового номера проводится только для // номеров больше номера 001-001-998. // Контрольное число Страхового номера рассчитывается следующим образом: // каждая цифра Страхового номера умножается на номер своей позиции (позиции // отсчитываются с конца), полученные произведения суммируются, сумма делится // на 101, последние две цифры остатка от деления являются Контрольным числом. // =========================================== function CheckPFCertificate(const PF: string): Boolean; var sum: Word; i: Byte; begin Result := False; sum := 0; if Length(PF) <> 11 then Exit; try for i := 1 to 9 do sum := sum + StrToInt(PF[i]) * (9 - i + 1); sum := sum mod 101; Result := StrToInt(Copy(PF, 10, 2)) = sum; except Result := False; end; // try end; end. Статья Алгоритм проверки контрольного числа ИНН и страхового номера ПФ раздела Синтаксис Математика может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросы:: 2012-06-28 11:54:16 :: re:Алгоритм проверки контрольного числа ИНН и страхового номера ПФпользователь: Ольга. Не получается по алгоритму вычислить правильность номера страхового св-ва.Получаются последние контрольные цифры только в том случае, если из суммы произведений отнять 101 Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |