Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  161

•  TDictionary Custom Sort  3 337

•  Fast Watermark Sources  3 089

•  3D Designer  4 847

•  Sik Screen Capture  3 343

•  Patch Maker  3 553

•  Айболит (remote control)  3 658

•  ListBox Drag & Drop  3 015

•  Доска для игры Реверси  81 702

•  Графические эффекты  3 945

•  Рисование по маске  3 249

•  Перетаскивание изображений  2 629

•  Canvas Drawing  2 752

•  Рисование Луны  2 580

•  Поворот изображения  2 189

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 235

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 229

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 475

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 366

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Алгоритм проверки контрольного числа ИНН и страхового номера ПФ



Автор: Камбалов Андрей

Модуль содержит две функции для проверки контрольного числа ИНН и страхового номера ПФ

CheckINN

- Функция вычисляет контрольное число ИНН и возвращает True если ИНН введен правильно или False в противном случае
В качестве параметра передается проверяемый ИНН
Для справки: структура ИНН
  • 10-ти разрядный ИНН - NNNNXXXXXC
  • 12-ти разрядный ИНН - NNNNXXXXXXCC где:
    • NNNN - номер налоговой инспекции
    • XXXXX, XXXXXX - порядковый номер налогоплательщика (номер записи в госреестре)
    • C - контрольное число в 10-ти разрядном ИНН
    • CC - контрольное число в 12-ти разрядном ИНН (фактически, идущие подряд две контрольные цифры)

CheckPFCertificate

- Функция вычисляет контрольное число страхового номера ПФ и возвращает True если оно введено правильно или False в противном случае

В качестве параметра передается страховой номер ПФ без разделителей

Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001-001-998.

Контрольное число Страхового номера рассчитывается следующим образом: каждая цифра Страхового номера умножается на номер своей позиции (позиции отсчитываются с конца), полученные произведения суммируются, сумма делится на 101, последние две цифры остатка от деления являются Контрольным числом.

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.




Похожие по теме исходники

Генетический Алгоритм

Алгоритм Дейкстры

Алгоритм Беллмана-Форда

Text Spinner (спиннер)

 



Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте