3.2.3. Описание алгоритма расчета контрольного числа расходного расписания

3.2.3. Описание алгоритма расчета
контрольного числа расходного расписания

Контрольное число расходного расписания определяется по следующему алгоритму:

int CRCTAB_16[]={
    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
    0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, OxD1AD, 0xE1CE, OxF1EF,
    0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
    0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
    0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
    0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
    0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
    0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
    0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
    0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
    0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
    0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
    0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
    0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
    0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
    0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
    0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
    0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
    0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
    0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
    0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
    0x34E2, 0x24C3, 0xl4A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
    0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
    0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
    0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
    0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
    0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
    0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
    0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
    0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
    0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
    0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
};

Пример текста программы расчета контрольного числа строки (на языке программирования - Си):

    DWORD calcCRC16(DWORD iPrevSumm, BYTE *btArr, UINT iLen)
    {
      for (int i=0;i>8)&0xFF] /\ iPrevSumm<<8 /\ btArr[i])&0xFFFF;
      return iPrevSumm;
    }

Пример текста программы расчета контрольного числа строки (на языке программирования - Visual Basic):

Предварительно необходимо произвести обработку массива CRCTAB_16(!)

    For i = 0 To UBound(CRCTAB_16)
            CRCTAB_16(i) = CRCTAB_16(i) And &HFFFF&
    Next i

Private Function calcCRC16(ByVal iPrevSumm As Long, ByRef btArr()
As Byte, ByVal iLen As Long) As Long
    Dim i As Long

    For i = 0 To iLen
            iPrevSumm = CLng(CRCTAB_16((((iPrevSumm \ 256)) And
&HFF)) Xor ((iPrevSumm And &HFF) * 256) Xor (btArr(i))) And &HFFFF
    Next i
    calcCRC16 = iPrevSumm
End Function

Параметры:

IprevSumm - предыдущая сумма. При начальном вызове должна быть равна 0.

btArr() - байтовый входной массив, контрольное число которого надо получить.

iLen - длина вышеуказанного байтового массива.

Расчет контрольного числа расходного расписания производится по следующим полям и в следующей последовательности:

1. Номер расходного расписания (по приказу, как в печатной форме)

2. Код главного распорядителя средств

3. Код распорядителя (получателя) (Кому)

4. Дата формирования расходного расписания (присваивается ответственным исполнителем после получения всех подписей)

5. Дата введения расходного расписания в действие

6. Код распорядителя, формирующего расписание

7. Код органа ТОФК, в котором распорядителю открыт лицевой счет распорядителя средств (из раздела RR)

8. Код органа ТОФК, в котором получателю открыт лицевой счет (из раздела RRRC)

9. Код приложения по КФД

10. Формат расходного расписания

11. ФИО руководителя

12. ФИО руководителя планово-финансовой службы

13. Код по ППП

14. Код по ФКР

15. Код по КЦСР

16. Код по КВР

17. Код по ЭКР

18. Лимиты бюджетных обязательств на год (нарастающим итогом, согласно приказу)

19. Текущее изменение лимитов бюджетных обязательств (относительно предыдущего расходного расписания, согласно приказу)

20. Объем финансирования с начала года (нарастающим итогом, согласно приказу)

21. Текущее изменение объема финансирования (относительно ранее направленного расходного расписания)

22. Примечание к строке

23. Специальные указания

24. Всего: лимит бюджетных обязательств на год (нарастающим итогом с начала года)

25. Всего: объем финансирования с начала года (нарастающим итогом с начала года)

26. Контрольное число приложения (по реестру исполнительных листов) в десятичной системе исчисления без лидирующих нулей.

Контрольное число рассчитывается по всем строкам файла (включая строки итогов по разделам и подразделам) в порядке их следования в файле с данными расходного расписания.

Строки расходного расписания (пункты с 13 по 22) могут многократно повторяться.

Контрольное число по реестру исполнительных листов рассчитывается по следующим полям и в следующей последовательности:

1. ФИО ответственного исполнителя

2. Должность ответственного исполнителя

3. ФИО начальника отдела

4. Дата реестра исполнительных листов

5. Код бюджетополучателя-должника

6. Полное наименование бюджетополучателя-должника

7. Регистрационный номер исполнительного листа

8. Номер исполнительного листа, присвоенный ему судебным органом

9. Дата выдачи исполнительного листа судебным органом

10. Наименование судебного органа, выдавшего исполнительный лист

11. Наименование организации-взыскателя либо ФИО физического лица - взыскателя

12. Код по ППП

13. Код по ФКР

14. Код по КЦСР

15. Код по КВР

16. Код по ЭКР

17. Сумма взыскания

Строки с 5 по 17 могут многократно повторяться.

Контрольное число реестра расходных расписаний рассчитывается путем сложения всех контрольных чисел расходных расписаний, которые включены в этот реестр.

При отсутствии приложения к расходному расписанию контрольное число приложения не учитывается в контрольном числе расходного расписания.

При расчете контрольного числа производятся следующие форматные преобразования (приводятся к текстовому представлению без лидирующих и завершающих пробелов):

- Дата в формате ДД.ММ.ГГГГ

- Суммы в копейках

- Коды в формате утвержденных классификаторов и справочников

Пример текстового файла для расчета контрольного числа

FK|2006.01|ПП "Расходы"|2.0.266||
FROM|||100|Федеральное казначейство|24.03.2005||
TO|9500|Главное управление федерального казначейства|||
RR|||||100|Федеральное казначейство|9500|Главное управление федерального казначейст-
ва|Яковлева Е.П.|Антонова О.В.|Начальник отдела|Иванова О.Е.||
RRRC|100/46823/002|24.03.2005|24.03.2005||0||1|46823|УПРАВЛЕНИЕ ФЕДЕРАЛЬНОГО КАЗНА-
ЧЕЙСТВА ПО КАБАРДИНО-БАЛКАРСКОЙ РЕСПУБЛИКЕ|0400|УФК по Кабардино-Балкарской
Республике||||29000000|20000|29000000|20000|29000000|29000000|||0|59977|
RRRCST|100|0115|1005000|213|310|10000|10000|0|0||1|
RRRCST|100|0115||||10000|10000|10000|10000||2|
RRRCST|100|1003|1000406|197|262|28990000|10000|0|0||3|
RRRCST|100|1003||||28990000|10000|28990000|10000||4|

Строка, полученная из данного текстового файла

100/46823/0021004682324.03.200524.03.2005950004001Яковлева Е.П. Антонова О.
В.10001151005000213310100001000000100011510000100001000010000100100310004061972622899
000010000001001003289900001000028990000100002900000029000000

Полученная контрольная сумма. 59977