[ОТВЕТИТЬ]
Опции темы
12.06.2013 09:14  
konst
структура ИНН
10-ти разрядный ИНН - NNNNXXXXXC
12-ти разрядный ИНН - NNNNXXXXXXCC где:
NNNN - номер налоговой инспекции
XXXXX, XXXXXX - порядковый номер налогоплательщика (номер записи в госреестре)
C - контрольное число в 10-ти разрядном ИНН
CC - контрольное число в 12-ти разрядном ИНН (фактически, идущие подряд две контрольные цифры)
Странно что разработчики ПО не встраивают такую проверку в свои программы...
Функция на Delphi для проверки ИНН:
Код:
// ===========================================
// Камбалов А.Н.
// ACampball@mail.ru
// ===========================================
// ==================================================================================================
// Функция вычисляет контрольное число ИНН и возвращает 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;
 
"Спасибо" konst от:
13.06.2013 12:56  
konst
Утилитка для проверки ИНН в СуперМаге
(не будет работать на старых версиях, где нет отдельной таблицы с банками)
Вложения
Тип файла: 7z SM_Inn_Checker.7z (295.5 Кб, 93 просмотров)
 
 
Опции темы



Часовой пояс GMT +3, время: 05:00.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.