Заказчик поставил задачу на создание формы InfoPath 2010 для Sharepoint
форма содержит набор полей которые можно увидеть на скриншоте, среди них стоит отметить поле ИНН
Ранее не приходилось делал проверку полей ИНН и КПП на соответствие.
Правила проверки
Алгоритм проверки ИНН
1.Алгоритм проверки 10-го значного ИНН.
ИНН.10. 1)Находим произведения первых 9-ти цифр ИНН на специальные множители соответственно. 9 множителей ( 2 4 10 3 5 9 4 6 8 ).
ИНН.10. 2) Складываем все 9-ть получившихся произведений.
ИНН.10. 3) Получившуюся сумму делим на число 11 и извлекаем целую часть частного от деления.
ИНН.10. 4) Умножаем получившееся число на 11.
ИНН.10. 5) Сравниваем числа получившиеся на шаге 2 и шаге 4, их разница, и есть контрольное число, которое и должно равняться 10-й цифре в ИНН. (Если контрольное число получилось равным 10-ти, в этом случае принимаем контрольное число равным 0.)
2.Алгоритм проверки 12-го значного ИНН.
ИНН.12. 1)Находим произведения первых 10-ти цифр ИНН на специальные множители соответственно (10-ю цифру принимаем за 0). 10 множителей ( 7 2 4 10 3 5 9 4 6 8 ).
ИНН.12. 2) Складываем все 10-ть получившихся произведений.
ИНН.12. 3) Получившуюся сумму делим на число 11 и извлекаем целую часть частного от деления.
ИНН.12. 4) Умножаем получившееся число на 11. ИНН.12. 5) Сравниваем числа получившиеся на шаге 2 и шаге 4, их разница, и есть первое контрольное число, которое и должно равняться 11-й цифре в ИНН.(Если контрольное число получилось равным 10-ти, в этом случае принимаем контрольное число равным 0.) Если получившееся число не не равно 11-ой цифре ИНН, значит ИНН не верный, если же совпадает, тогда высчитываем следующее контрольное число, которое должно быть равным 12-ой цифре ИНН
ИНН.12. 6)Находим произведения первых 11-ти цифр ИНН на специальные множители соответственно (10-ю цифру принимаем за 0). 11 множителей ( 3 7 2 4 10 3 5 9 4 6 8 ).
ИНН.12. 7) Складываем все 11-ть получившихся произведений.
ИНН.12. 8) Получившуюся сумму делим на число 11 и извлекаем целую часть частного от деления.
ИНН.12. 9) Умножаем получившееся число на 11.
ИНН.12. 10) Сравниваем числа получившиеся на шаге 7 и шаге 9, их разница, и есть контрольное число, которое и должно равняться 12-й цифре в ИНН. (Если контрольное число получилось равным 10-ти, в этом случае принимаем контрольное число равным 0.) Если высчитанное число равно 12-ой цифре ИНН, и на первом этапе все контрольное число совпало с 11-ой цифрой ИНН, следовательно ИНН считается верным.
Формулы вычисляемых полей в Microsoft SharePoint Foundation основаны на функциях и синтаксисе Microsoft Excel
Описание: http://msdn.microsoft.com/ru-ru/library/bb862071(v=office.14).aspx
А это значит что очень много можно сделать без программирования, просто указывая нужные формулы в столбцах.
Правила составления выражений для валидации полей, практически такие же.
Из доступных примеров проверки ИНН в Excel, мне удалось найти следующую формулу, на ресурсах посвященных Excel.
Безусловно формула нуждается в переработке и содержит диапазоны, а при их удалении перестает работать.
При этом возможность закончить форму без программирования, остается очень вкусной.
В качестве хаба публикации я также иронично указал, ненормальное программирование, так как пока мне не удалось найти проверку ИНН для Sharepoint.
форма содержит набор полей которые можно увидеть на скриншоте, среди них стоит отметить поле ИНН
Ранее не приходилось делал проверку полей ИНН и КПП на соответствие.
Правила проверки
Алгоритм проверки ИНН
1.Алгоритм проверки 10-го значного ИНН.
ИНН.10. 1)Находим произведения первых 9-ти цифр ИНН на специальные множители соответственно. 9 множителей ( 2 4 10 3 5 9 4 6 8 ).
ИНН.10. 2) Складываем все 9-ть получившихся произведений.
ИНН.10. 3) Получившуюся сумму делим на число 11 и извлекаем целую часть частного от деления.
ИНН.10. 4) Умножаем получившееся число на 11.
ИНН.10. 5) Сравниваем числа получившиеся на шаге 2 и шаге 4, их разница, и есть контрольное число, которое и должно равняться 10-й цифре в ИНН. (Если контрольное число получилось равным 10-ти, в этом случае принимаем контрольное число равным 0.)
2.Алгоритм проверки 12-го значного ИНН.
ИНН.12. 1)Находим произведения первых 10-ти цифр ИНН на специальные множители соответственно (10-ю цифру принимаем за 0). 10 множителей ( 7 2 4 10 3 5 9 4 6 8 ).
ИНН.12. 2) Складываем все 10-ть получившихся произведений.
ИНН.12. 3) Получившуюся сумму делим на число 11 и извлекаем целую часть частного от деления.
ИНН.12. 4) Умножаем получившееся число на 11. ИНН.12. 5) Сравниваем числа получившиеся на шаге 2 и шаге 4, их разница, и есть первое контрольное число, которое и должно равняться 11-й цифре в ИНН.(Если контрольное число получилось равным 10-ти, в этом случае принимаем контрольное число равным 0.) Если получившееся число не не равно 11-ой цифре ИНН, значит ИНН не верный, если же совпадает, тогда высчитываем следующее контрольное число, которое должно быть равным 12-ой цифре ИНН
ИНН.12. 6)Находим произведения первых 11-ти цифр ИНН на специальные множители соответственно (10-ю цифру принимаем за 0). 11 множителей ( 3 7 2 4 10 3 5 9 4 6 8 ).
ИНН.12. 7) Складываем все 11-ть получившихся произведений.
ИНН.12. 8) Получившуюся сумму делим на число 11 и извлекаем целую часть частного от деления.
ИНН.12. 9) Умножаем получившееся число на 11.
ИНН.12. 10) Сравниваем числа получившиеся на шаге 7 и шаге 9, их разница, и есть контрольное число, которое и должно равняться 12-й цифре в ИНН. (Если контрольное число получилось равным 10-ти, в этом случае принимаем контрольное число равным 0.) Если высчитанное число равно 12-ой цифре ИНН, и на первом этапе все контрольное число совпало с 11-ой цифрой ИНН, следовательно ИНН считается верным.
Формулы вычисляемых полей в Microsoft SharePoint Foundation основаны на функциях и синтаксисе Microsoft Excel
Описание: http://msdn.microsoft.com/ru-ru/library/bb862071(v=office.14).aspx
А это значит что очень много можно сделать без программирования, просто указывая нужные формулы в столбцах.
Правила составления выражений для валидации полей, практически такие же.
Из доступных примеров проверки ИНН в Excel, мне удалось найти следующую формулу, на ресурсах посвященных Excel.
=ЕСЛИ(ДЛСТР(A1)=10;ЕСЛИ(ЕСЛИ(СУММПРОИЗВ((ПСТР(A1;СТРОКА($1:$10);1)*1)*{2:4:10:3:5:9:4:6:8:0})-ЦЕЛОЕ((СУММПРОИЗВ((ПСТР(A1;СТРОКА($1:$10);1)*1)*{2:4:10:3:5:9:4:6:8:0})/11))*11>10;0;СУММПРОИЗВ((ПСТР(A1;СТРОКА($1:$10);1)*1)*{2:4:10:3:5:9:4:6:8:0})-ЦЕЛОЕ((СУММПРОИЗВ((ПСТР(A1;СТРОКА($1:$10);1)*1)*{2:4:10:3:5:9:4:6:8:0})/11))*11)=ПСТР(A1;10;1)*1;"верно";"неверно");ЕСЛИ(СУММПРОИЗВ(ЕСЛИ(ЕСЛИ(СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{7:2:4:10:3:5:9:4:6:8:0:0})-ЦЕЛОЕ(СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{7:2:4:10:3:5:9:4:6:8:0:0})/11)*11=10;0;СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{7:2:4:10:3:5:9:4:6:8:0:0})-ЦЕЛОЕ(СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{7:2:4:10:3:5:9:4:6:8:0:0})/11)*11)=ПСТР(A1;11;1)*1;1;0);ЕСЛИ(ЕСЛИ(СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{3:7:2:4:10:3:5:9:4:6:8:0})-ЦЕЛОЕ(СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{3:7:2:4:10:3:5:9:4:6:8:0})/11)*11=10;0;СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{3:7:2:4:10:3:5:9:4:6:8:0})-ЦЕЛОЕ(СУММПРОИЗВ(--(ПСТР(A1;СТРОКА($1:$12);1));{3:7:2:4:10:3:5:9:4:6:8:0})/11)*11)=ПСТР(A1;12;1)*1;1;0))=1;"верно";"не верно"))
Безусловно формула нуждается в переработке и содержит диапазоны, а при их удалении перестает работать.
При этом возможность закончить форму без программирования, остается очень вкусной.
В качестве хаба публикации я также иронично указал, ненормальное программирование, так как пока мне не удалось найти проверку ИНН для Sharepoint.