|
Проверка ИИН в типовых конфигурациях для Казахстана | ☑ | ||
---|---|---|---|---|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |