Имя: Пароль:
1C
1С v8
Алгоритм проверки ИНН 12 знаков
,
0 serega1977
 
11.12.21
12:36
На сайте egrul есть вот такой алгоритм, для расчёта ИНН 10 и 12 знаков. Для 10 сделал обработку всё работает., а вот для 12 нужна помощь разобраться с алгоритмом.

//1. Вычисляется контрольная сумма по 11-ти знакам со следующими весовыми коэффициентами: (7,2,4,10,3,5,9,4,6,8,0)
//2. Вычисляется контрольное число(1) как остаток от деления контрольной суммы на 11
//3. Если контрольное число(1) больше 9, то контрольное число(1) вычисляется как остаток от деления контрольного числа(1) на 10
//4. Вычисляется контрольная сумма по 12-ти знакам со следующими весовыми коэффициентами: (3,7,2,4,10,3,5,9,4,6,8,0).
//5. Вычисляется контрольное число(2) как остаток от деления контрольной суммы на 11
//6. Если контрольное число(2) больше 9, то контрольное число(2) вычисляется как остаток от деления контрольного числа(2) на 10
//7. Контрольное число(1) проверяется с одиннадцатым знаком ИНН и контрольное число(2) проверяется с двенадцатым знаком ИНН.
//В случае их равенства ИНН считается правильным.

Вопрос1. В п.1 написаны весовые коэфф. последний ноль, его нужно использоваться для расчета в произведении?
Вопрос2. В п.3 мне не понятно как может быть контрольное число (1) больше 9

Просьба подсказать как нужно правильно прочитать данный алгоритм
1 serega1977
 
11.12.21
12:40
По вопросу 2, думаю разобрался., если остаток от деления 10 получится.
2 Kassern
 
11.12.21
12:41
(0) у вас есть возможность в типовой конфе глянуть?
3 МихаилМ
 
11.12.21
12:44
(0) обсуждалось неоднократно. В поиск.
4 serega1977
 
11.12.21
12:46
(2) нет
5 serega1977
 
11.12.21
12:47
(3) да как то не нашёл в обсуждениях
6 Ненавижу 1С
 
гуру
11.12.21
12:51
7 Мимохожий Однако
 
11.12.21
12:53
(4) Странно
8 Kassern
 
11.12.21
12:54
9 serega1977
 
11.12.21
13:08
(7) почему? у меня есть только учебная платформа.
10 serega1977
 
11.12.21
13:09
(7,8) - спасибо, читаю
11 Kassern
 
11.12.21
13:09
(9) ну раз учебная, тогда и сами придумайте алгоритм для 11 и 12 разряда и сверяйте с веденными данными
12 serega1977
 
11.12.21
13:12
(9) да собственно и написал, только как говорится пока что то не выходит правильный результат, отсюда и возник вопрос а правильно ли читаю условия алгоритма.
13 Мимохожий Однако
 
11.12.21
15:29
(12) Запускай базу в режиме отладки и смотри пошагово, что ожидаешь и что получаешь.
14 serega1977
 
11.12.21
15:38
(13) - всё решил как написано здесь https://ru.m.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика
Так что всем спасибо!!!
15 Volodja
 
11.12.21
15:48
Функция глВалидностьБИН(Значение,ВыдатьСообщение=1) Экспорт
// Вычисление контрольного разряда
    Статус = 0;
    Если СтрДлина(СокрЛП(Значение))<12 Тогда
        Если ВыдатьСообщение=1 Тогда
            Сообщить("Количество знаков в ИИН/БИН меньше 12!","!!!");
        КонецЕсли;
    ИначеЕсли СтрЧислоВхождений(Значение, Лев(Значение,1))=12 Тогда
        Если ВыдатьСообщение=1 Тогда
            Сообщить("Цифра " + Лев(Значение,1) + " повторяется 12 раз!","!!!");
        КонецЕсли;
    Иначе
      
        ПодстрокаИН11 = Лев(Значение,11);        // копируем первые 11 символов
        КонтрольноеЗначение = Число(Сред(Значение,12,1));
      
        СуммаРазрядов = 1*Сред(ПодстрокаИН11,1,1)+
                        2*Сред(ПодстрокаИН11,2,1)+
                        3*Сред(ПодстрокаИН11,3,1)+
                        4*Сред(ПодстрокаИН11,4,1)+
                        5*Сред(ПодстрокаИН11,5,1)+
                        6*Сред(ПодстрокаИН11,6,1)+
                        7*Сред(ПодстрокаИН11,7,1)+
                        8*Сред(ПодстрокаИН11,8,1)+
                        9*Сред(ПодстрокаИН11,9,1)+
                        10*Сред(ПодстрокаИН11,10,1)+
                        11*Сред(ПодстрокаИН11,11,1);
        ВычисленноеКонтрольноеЗначение = СуммаРазрядов % 11;
      
        Если ВычисленноеКонтрольноеЗначение = 10 Тогда
            СуммаРазрядов = 3*Сред(ПодстрокаИН11,1,1)+
                            4*Сред(ПодстрокаИН11,2,1)+
                            5*Сред(ПодстрокаИН11,3,1)+
                            6*Сред(ПодстрокаИН11,4,1)+
                            7*Сред(ПодстрокаИН11,5,1)+
                            8*Сред(ПодстрокаИН11,6,1)+
                            9*Сред(ПодстрокаИН11,7,1)+
                            10*Сред(ПодстрокаИН11,8,1)+
                            11*Сред(ПодстрокаИН11,9,1)+
                            1*Сред(ПодстрокаИН11,10,1)+
                            2*Сред(ПодстрокаИН11,11,1);
            ВычисленноеКонтрольноеЗначение = СуммаРазрядов % 11;
        КонецЕсли;
      
        Если (ВычисленноеКонтрольноеЗначение = КонтрольноеЗначение) И (СуммаРазрядов<>0) Тогда
            Статус = 1;
        Иначе
            Если ВыдатьСообщение=1 Тогда
                Сообщить("Введенный ИИН/БИН некорректен!","!!!");
            КонецЕсли;
            Статус = 0;
        КонецЕсли;
    КонецЕсли;
    Возврат Статус;
КонецФункции
16 serega1977
 
11.12.21
16:39
(15) - Решал через массив, как то попроще и кода поменьше
17 Volodja
 
11.12.21
17:32
(16) Это у нас так было в типовой вроде. Не мой.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн