Имя: Пароль:
1C
1С v8
Проверка ИИН в типовых конфигурациях для Казахстана
0 1C_ID
 
11.01.13
08:23
В Казахстане нет такого ресурса как миста и многие программисты ошиваются тут. Поэтому создам тему, возможно еще не было, в поиске не нашел.
С 1 января 2013 внедрили ИИН вместо РНН и СИК и людям выдавали их в спешке, поэтому у некоторых могут быть ошибки. В типовых конфигурациях реализована проверка на последний символ и на количество символов.
Я же написал отчетик, который выводит в таблицу возможные ошибки в первых 7-ми цифрах, остальные проверить нельзя.
Чуть подробней можно узнать тут(http://startadmin.ru/1c/proverka-pravilnosti-iin-v-tipovyih-konfiguratsiyah-1s-predpriyatie-dlya-kazahstana.html)
скачать можно с яндекса (http://narod.ru/disk/65352912001.770057ed5a8940cf3646d4d86ee202c0/ЗУППроверка7ЦифрИИН.erf.html)
1 1C_ID
 
11.01.13
08:23
Для Бухгалтерии Казахстана сделаю в обед
2 1C_ID
 
11.01.13
08:24
И у себя на фирме из 200+ человек нашел 5 неверных, у которых первые цифры, означающие год ошиблись на 9 лет или на несколько месяцев, так что полезно будет
3 aka AMIGO
 
11.01.13
08:33
перекодируй:
Функция Валид()
   
   //ИНН = СокрЛП(ИНН);
   
   Если СтрДлина(СокрЛП(ИНН))=10 Тогда
       КонтрольнаяСтрока = Прав(СокрЛП(ИНН),1);
       СуммаРазрядов =    
       2*Сред(ИНН,1,1)+
       4*Сред(ИНН,2,1)+
       10*Сред(ИНН,3,1)+
       3*Сред(ИНН,4,1)+
       5*Сред(ИНН,5,1)+
       9*Сред(ИНН,6,1)+
       4*Сред(ИНН,7,1)+
       6*Сред(ИНН,8,1)+
       8*Сред(ИНН,9,1);
       
       ВычисленноеКонтрольноеЗначение = ""+(СуммаРазрядов % 11) % 10;
       Если ВычисленноеКонтрольноеЗначение <> КонтрольнаяСтрока Тогда
           Возврат "Ошибка в контрольном разряде ИНН!";
       КонецЕсли;
       Возврат "";
       
   ИначеЕсли СтрДлина(СокрЛП(ИНН))=12 Тогда
       КонтрольнаяСтрока = Прав(СокрЛП(ИНН),2);
       СуммаРазрядов =    
       7*Сред(ИНН,1,1)+
       2*Сред(ИНН,2,1)+
       4*Сред(ИНН,3,1)+
       10*Сред(ИНН,4,1)+
       3*Сред(ИНН,5,1)+
       5*Сред(ИНН,6,1)+
       9*Сред(ИНН,7,1)+
       4*Сред(ИНН,8,1)+
       6*Сред(ИНН,9,1)+
       8*Сред(ИНН,10,1);
       
       СуммаРазрядов1 = (СуммаРазрядов % 11) % 10;
       
       СуммаРазрядов2 =    
       3*Сред(ИНН,1,1)+
       7*Сред(ИНН,2,1)+
       2*Сред(ИНН,3,1)+
       4*Сред(ИНН,4,1)+
       10*Сред(ИНН,5,1)+
       3*Сред(ИНН,6,1)+
       5*Сред(ИНН,7,1)+
       9*Сред(ИНН,8,1)+
       4*Сред(ИНН,9,1)+
       6*Сред(ИНН,10,1)+
       8*СуммаРазрядов1;
       
       ВычисленноеКонтрольноеЗначение = ""+СуммаРазрядов1+(СуммаРазрядов2 % 11) % 10;
       Если ВычисленноеКонтрольноеЗначение <> КонтрольнаяСтрока Тогда
           Возврат "Ошибка в контрольном разряде ИНН!";
       КонецЕсли;
       Возврат "";
   Иначе
       Возврат "Ошибочная длина ИНН!";
   КонецЕсли;
   
КонецФункции
4 aka AMIGO
 
11.01.13
08:34
>>ошибки в первых 7-ми цифрах, остальные проверить нельзя. <<
можно. ошибка.
5 1C_ID
 
11.01.13
08:36
(3) В ЗУП данная проверка реализована. Если не правильный разряд, то выходит сообщение об ошибке и текст становится красным, про контрольный разряд я в курсе, но если первые неправильны, то и контрольный посчитан при выдаче не правильно
6 aka AMIGO
 
11.01.13
08:36
+4 да, милле пардоне, зачеркиваем (4) .. ошибся я
7 isarzh
 
11.01.13
10:57
[code]
Функция ПроверкаБИНИИН(знач БИН_ИИН)
   перем ЧислоБИН_ИИН;
   перем ИИНБезНулей;
   ЧислоБИН_ИИН=0;
   // Длина
   если СтрДлина(БИН_ИИН)>12 тогда
       возврат ложь;
   конецесли;
   // (0..9)
   ИННБезНулей = СтрЗаменить(БИН_ИИН,"0","1");
   Попытка
       ЧислоБИН_ИИН = Число(ИННБезНулей);
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат Ложь;
   КонецПопытки;          
   // Проверка на одинаковость всех цифр
   Если СтрЧислоВхождений(БИН_ИИН, Лев(БИН_ИИН, 1)) = 12 Тогда
       Возврат Ложь;
   КонецЕсли;
b1 = новый Массив (12);
b2 = новый Массив (12);
a1 = Новый Массив;
Контроль = 0;
Контроль2=0;
i=1;
b1.Вставить(1,1); b2.Вставить(1,3);
b1.Вставить(2,2); b2.Вставить(2,4);
b1.Вставить(3,3); b2.Вставить(3,5);
b1.Вставить(4,4); b2.Вставить(4,6);
b1.Вставить(5,5); b2.Вставить(5,7);
b1.Вставить(6,6); b2.Вставить(6,8);
b1.Вставить(7,7); b2.Вставить(7,9);
b1.Вставить(8,8); b2.Вставить(8,10);
b1.Вставить(9,9); b2.Вставить(9,11);
b1.Вставить(10,10); b2.Вставить(10,1);
b1.Вставить(11,11); b2.Вставить(11,2);
a1.Вставить(12,число(Сред(БИН_ИИН,12,1)));
пока i<12 цикл
   a1.Вставить(i,число(Сред(БИН_ИИН,i,1)));
       если i<12  Тогда
           Контроль=Контроль+a1[i]*b1[i];
       конецесли;
   i=i+1;
КонецЦикла;
   Контроль = ?(Контроль=0,0,Контроль%11);
   //Сообщить(Контроль);
если Контроль<10 тогда    
   если a1[12]=Контроль тогда
       возврат Истина;
   иначе
       Возврат Ложь;
   конецесли;
конецесли;
если  Контроль=10 тогда
   i=1;
   пока i<12 цикл
       Контроль=Контроль+a1[i]*b2[i];
       i=i+1;
   конеццикла;
Контроль = ?(Контроль=0,0,Контроль%11);
//Сообщить(Контроль);
если a1[12]=Контроль тогда
       возврат Истина;
   иначе
       возврат Ложь;
   конецесли;      
конецесли;

возврат ложь;
конецфункции
[/code]
8 1C_ID
 
11.01.13
12:41
(7)так это опять проверка контрольной суммы, а я создал ветку про то что составляющие этой суммы будут неправильные и эта сумма будет свидетельствовать что все правильно.
9 1C_ID
 
11.01.13
12:43
Например, проверка эта реализована для БК в общем модуле ОбщегоНазначения Функция БИНИИНСоответствуетТребованиям(Знач ИдентификационныйНомер) Экспорт, зачем было ее вручную писать
10 1C_ID
 
11.01.13
12:46
И вот версия для Бухгалтерии Казахстана 2.0
http://narod.ru/disk/65359659001.c36add3ad819980c2865b12621b23322/БК_Проверка7ЦифрИИН.erf.html