Снилс контрольное число
Контрольное число, контрольная цифра – разновидность контрольной суммы, добавляется обычно в конец длинных номеров с целью первичной проверки их правильности. Применяется с целью уменьшения вероятности ошибки при обработке таких номеров: машинном считывании с упаковки товара, записи в документы, голосовой передаче от человека к человеку и т. п.
Наличие и правильность контрольного числа не гарантирует достоверность рассматриваемого номера (в том числе не спасает от действий злоумышленников), но на практике достаточно хорошо оберегает от случайных ошибок.
Контрольное число чаще всего это либо последняя цифра суммы всех чисел номера, либо результат другой математической операции над цифрами. В компьютерных программах понятие «контрольного числа» обобщено до CRC, бита чётности и Кодов Рида-Соломона; а в некоторых архиваторах объём контрольных данных таков, что позволяет не только обнаружить ошибку, но и исправить её (обнаружение и исправление ошибок).
Контрольные числа, применяемые в документах, обычно позволяют восстановить одну потерянную цифру при условиях, что известно, на какой позиции в номере она должна находиться и что остальные цифры в номере правильные. Если неизвестно, на какой позиции есть ошибка, нужно перебрать все возможные варианты (например, для 13-значного номера их будет 13), а из них выбрать наиболее правдоподобные (исходя из анализа содержательной информации в номере). Простое исправление контрольной цифры может привести только к большей ошибке, не связанной с математикой.
Валидация контрольного числа ИНН
ИНН (идентификационный номер налогоплательщика) организации состоит из 10 цифр:
1-4-я цифры:
- для российской организации – код налогового органа, который присвоил ИНН;
- для иностранной организации – индекс, определяемый Федеральной налоговой службой;
5-9-я цифры:
- для российской организации – порядковый номер записи о лице в территориальном разделе Единого государственного реестра налогоплательщиков налогового органа, который присвоил ИНН;
- для иностранной организации – код иностранной организации (КИО) согласно Справочнику «Коды иностранных организаций»;
10-я цифра – контрольное число.
ИНН физического лица (индивидуального предпринимателя) состоит из 12 цифр:
- 1-4-я цифры – код налогового органа, который присвоил ИНН;
- 5-10-я цифры – порядковый номер записи о лице в территориальном разделе Единого государственного реестра налогоплательщиков налогового органа, который присвоил ИНН;
- 11-12-я цифры – контрольное число.
Проверка ИНН
Зная ИНН потенциального контрагента, вы всегда сможете выяснить, является ли данная компания реальным юридическим лицом или же это мошенник, у которого нет государственной регистрации.
Рассматриваемый способ проверки основан на том, что ИНН не является случайным набором цифр. Первые четыре являются номерами региона и территориальной налоговой инспекции, в которых зарегистрирован налогоплательщик. Следующие пять – это обыкновенный порядковый номер. А вот последняя – десятая – цифра представляет собой так называемое контрольное число ИНН.
Для того, чтобы убедиться в подлинности того или иного налогоплательщика, нужно провести несколько небольших вычислений и сравнить полученный результат с этим самым числом. Для наглядности приведем пример.
Возьмем произвольный ИНН: 7713456564. Сначала необходимо умножить первые девять цифр ИНН на особые множители, разработанные специалистами Федеральной налоговой службы. Каждой цифре соответствует свой множитель: 2, 4, 10, 3, 5, 9, 4, 6, 8. Произведем вычисления: (7 x 2) + (7 x 4) + (1 x 10) + (3 x 3) + (4 x 5) + (5 x 9) + (6 x 4 )+ (5 x 6) + (6 x 8) = 228
Полученную сумму нужно разделить на 11: 228 : 11 = 20,7. Затем от полученной величины необходимо взять целое число и умножить его на 11: 20 х 11 = 220
Разница между 228 и 220 составляет 8. Это и есть контрольное число ИНН – оно должно быть равно последней цифре ИНН. Однако в нашем случае они не совпадают, поскольку мы изначально взяли номер несуществующего налогоплательщика. Вы можете убедиться в том, что метод работает, взяв ИНН реального контрагента и самостоятельно произведя указанные вычисления.
Алгоритм проверки ИНН 10 знаков:
- Вычисляется контрольная сумма со следующими весовыми коэффициентами: (2,4,10,3,5,9,4,6,8,0)
- Вычисляется контрольное число как остаток от деления контрольной суммы на 11
- Если контрольное число больше 9, то контрольное число вычисляется как остаток от деления контрольного числа на 10
- Контрольное число проверяется с десятым знаком ИНН. В случае их равенства ИНН считается правильным.
Алгоритм проверки ИНН 12 знаков:
- Вычисляется контрольная сумма по 11-ти знакам со следующими весовыми коэффициентами: (7,2,4,10,3,5,9,4,6,8,0)
- Вычисляется контрольное число(1) как остаток от деления контрольной суммы на 11
- Если контрольное число(1) больше 9, то контрольное число(1) вычисляется как остаток от деления контрольного числа(1) на 10
- Вычисляется контрольная сумма по 12-ти знакам со следующими весовыми коэффициентами: (3,7,2,4,10,3,5,9,4,6,8,0).
- Вычисляется контрольное число(2) как остаток от деления контрольной суммы на 11
- Если контрольное число(2) больше 9, то контрольное число(2) вычисляется как остаток от деления контрольного числа(2) на 10
- Контрольное число(1) проверяется с одиннадцатым знаком ИНН и контрольное число(2) проверяется с двенадцатым знаком ИНН. В случае их равенства ИНН считается правильным.
Пример. Страховой номер индивидуального лицевого счёта (Россия)
Страховой номер индивидуального лицевого счёта страхового свидетельства обязательного пенсионного страхования (он же СНИЛС) проверяется на корректность контрольным числом. СНИЛС имеет вид: «XXX-XXX-XXX YY», где XXX-XXX-XXX – собственно номер, а YY – контрольное число.
Алгоритм формирования контрольного числа СНИЛС таков:
1. Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001-001-998
2. Контрольное число СНИЛС рассчитывается следующим образом:
2.1) Каждая цифра СНИЛС умножается на номер своей позиции (позиции отсчитываются с конца)
2.2) Полученные произведения суммируются
2.3) Если сумма меньше 100, то контрольное число равно самой сумме
2.4) Если сумма равна 100 или 101, то контрольное число равно 00
2.5) Если сумма больше 101, то сумма делится по остатку на 101 и контрольное число определяется остатком от деления аналогично пунктам 2.3 и 2.4
ПРИМЕР: Указан СНИЛС 112-233-445 95
Проверяем правильность контрольного числа:
цифры номера 1 1 2 2 3 3 4 4 5
номер позиции 9 8 7 6 5 4 3 2 1
Сумма = 1×9 + 1×8 + 2×7 + 2×6 + 3×5 + 3×4 + 4×3 + 4×2 + 5×1 = 95
Сумма равна YY (контрольное число).
Контрольное число 95 – указано верно
Данный алгоритм не способен обнаружить все случаи ошибок в одной цифре (например, номера 087-654-303 00 и 087-654-302 00 отличаются одной цифрой, но оба будут признаны верными). Также не во всех случаях может быть обнаружена ошибка перестановки двух соседних цифр (например, 087-654-303 00 и 086-754-303 00). Причина – пункт 2.4, где для близких чисел 100 и 101 установлено одинаковое контрольное число 00.
Если бы вместо пунктов 2.4, 2.5 применялся пункт
2.4′) Если сумма равна или больше 100, то контрольное число равно двум последним цифрам этой суммы (остатку от деления суммы на 100),
то алгоритм был бы способен обнаружить все случаи ошибок в одной цифре и все случаи ошибочной перестановки двух соседних цифр.
Пример. Номера ОГРН и ОГРНИП
(Основной Государственный Регистрационный Номер (для Индивидуального Предпринимателя))
Состоят из 13 (или 15) цифр, из них последняя – n1 – контрольная.
Контрольная цифра равна остатку от деления на 11 (или на 13) числа, состоящего из первых 12 (или 14) цифр. Если остаток больше 9, то n1 = последней цифре остатка.
Конкретные примеры:
- 1037739010891 – 13 цифр, ОГРН. Вычисляем остаток: -1+0-3+7-7+3-9+0-1+0-8+9 = -10 (Признак Паскаля) -10 + 11 = 1(остаток) Контрольное число = 1 – совпадает, номер правильный.
- 1035006110083 – 13 цифр, ОГРН. Вычисляем остаток: 103500611008 = 11 • 9409146455 + 3(остаток) Контрольное число = 3 – совпадает, номер правильный.
- 1037739010891 – 13 цифр, ОГРН. Вычисляем остаток: 103773901089 = 11 • 9433991008 + 1(остаток) Контрольное число = 1 – совпадает, номер правильный.
- 304500116000157 – 15 цифр, ОГРНИП. Вычисляем остаток: 30450011600015 = 13 • 2342308584616 + 7(остаток) Контрольное число = 7 – совпадает, номер правильный.
- 304463210700212 – 15 цифр, ОГРНИП. Вычисляем остаток: 30446321070021 = 13 • 2342024697693 + 12(остаток) Контрольное число = 2 – совпадает с последней цифрой остатка, номер правильный.
mfina.ru
Пример реализации на языке С++:
AnsiString CheckFields(AnsiString Field)
{ AnsiString S = «», S1;
int i, j, C1, C2, ILS_Num, LastDigit, LastDigitCount;
int ILS14_1[12] = {9, 8, 7, 0, 6, 5, 4, 0, 3, 2, 1, 0};
bool Flag;
S = «068-619-801 04»; // в случае неверного СНИЛС возвращается значение «068-619-801 04”
try {
if(Field.Length() == 14)
{ Flag = true;
i = 0;
C1 = 0;
ILS_Num = 0;
LastDigit = -1;
LastDigitCount = 0;
while(i < 12)
 .
sp; case 11: if(Field[i+1] != ‘ ‘) Flag = false; break;
default: { if(ILS14_1[i] != 0)
{ C1 = C1 + (int)(Field[i+1] — 0x30) * ILS14_1[i];
ILS_Num = ILS_Num * 10 + (int)(Field[i+1] — 0x30);
&nbs.
bsp; if(LastDigitCount => 3) Flag = false;
}
else
&nb.
sp; }
}
} break;
}
i++;
}
if(ILS_Num <= 1001998) Flag = false;
if(Flag == true)
{ C1 = C1 — (int)(floor(C1 / 101) * 101);
S1 = (AnsiString)(C1);
switch(S1.Length())
{ case 1: S1 = «0» + S1; break;
case 3: S1 = S1.SubString(2, 2); break;
}
if(S1 == Field.SubString(13, 2)) S = Field;
}
}
}
catch(…)
{
}
return(S);
}
rostov-tfoms.ru
Расчет ИНН
Номера ИНН бывают 10-значные (1 контрольная цифра в конце) для юридических фирм
и 12-значные (2 контрольные цифры предпоследняя и последняя цифры) для физических лиц
ИНН юридического лица состоит из 10 последовательных цифр.
1-2: код субъекта Российской Федерации.
3-4: номер налоговой инспеции в субъекте РФ.
1-4: код налоговой инспекции по СОУН (Справочник кодов обозначения налоговых органов для целей учёта налогоплательщиков) осуществивщей регистрацию.
5-9: номер записи в территориальном разделе ЕГРН (Единый государственный реестр налогоплательщиков).
10: контрольная цифра.
ИНН физического лица состоит из 12 последовательных цифр.
1-2: код субъекта Российской Федерации.
3-4: номер налоговой инспеции в субъекте РФ.
1-4: код налоговой инспекции по СОУН осуществивщей регистрацию.
5-10: номер записи в территориальном разделе ЕГРН.
11-12: контрольные цифры.
Расчет ИНН, да и всех остальных кодов, проводится по весовым коэфициентам. То есть каждому разряду присваивается какой либо вес в виде определенного числа.
Например, если мы считаем, что разряд произвольного числа будем отсчитывать справа на налево, нумеруя каждую позицию от 1 и увеличивая каждый раз на единицу, то число 71692, можно представить как p1=2;p2=9;p3=6;p4=1;p5=7
где pn -это номер позиции
Весовые коэфициенты vk для 10 значного ИНН будут такие v2=8;v3=6;v4=4;v5=9;v6=5;v7=3;v8=10;v9=4;v10=2
Тогда контрольная сумма, находящаяся на позиции vk1 рассчитывается по формуле
Контрольное число есть остаток от деления на 11 суммы из цифр номера, умноженных на соответствующие весовые коэффициенты. Если число равно 10, то контрольная сумма равна нулю.
Расчет контрольной суммы для 12-ти значного ИНН, немного сложнее, так как там две позиции содержат контрольные числа.
Весовые коэффициенты для 12-ти значного ИНН следующие:
1 шаг:
v3=8;v4=6;v5=4;v6=9;v7=5;v8=3;v9=10;v10=4;v11=2;vk12=7
Контрольное число vk2 есть остаток от деления на 11 суммы из цифр номера, умноженных на соответствующие весовые коэффициенты. Если число равно 10, то контрольная сумма равна нулю.
2 шаг:
v2=8;v3=6;v4=4;v5=9;v6=5;v7=3;v8=10;v9=4;v10=2;vk11=7;vk12=3
Контрольное число vk1 есть остаток от деления на 11 суммы из цифр номера, умноженных на соответствующие весовые коэффициенты. Если число равно 10, то контрольная сумма равна нулю.
Расчет СНИЛС
Страховой номер индивидуального лицевого счета страхового свидетельства обязательного пенсионного страхования(он же СНИЛС) проверяется на валидность контрольным числом. СНИЛС имеет вид: «XXX-XXX-XXX YY», где XXX-XXX-XXX — собственно номер, а YY — контрольное число. Алгоритм формирования контрольного числа СНИЛС таков:
1) Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001-001-998
2) Контрольное число СНИЛС рассчитывается следующим образом:
2.1) Каждая цифра СНИЛС умножается на номер своей позиции (позиции отсчитываются с конца)
2.2) Полученные произведения суммируются
2.3) Если сумма меньше 100, то контрольное число равно самой сумме
2.4) Если сумма равна 100 или 101, то контрольное число равно 00
2.5) Если сумма больше 101, то сумма делится по остатку на 101 и контрольное число определяется остатком от деления аналогично пунктам 2.3 и 2.4
Примеры
Пишем любое цифросочетание
например 1653001805
И получаем в ответ
Хотелось бы заметить, что можно вводить в поле данных не полностью ИНН или СНИЛС а его часть. Например для СНИЛСа, достаточно написать всего 9 цифр из 11 что бы получить корректный ( с правильной контрольной суммой) СНИЛС. Такой же уловкой можно использоваться и для создания правильных ИНН
- << Конвертер температур онлайн
- Месторождения золота и его спутники >>
www.abakbot.ru
Страховое свидетельство
Под документом в виде СНИЛС надо понимать официальную бумагу, подтверждающую присвоение индивидуального номера в пенсионной системе. Этот номер является личным счетом, который предназначен для аккумулирования отчислений, формирующих вашу будущую пенсию.
Непосредственно на руки выдается документ, представляющий собой карточку в пластиковой оболочке с зеленоватым оттенком. На ней указаны данные держателя счета и номер самого счета.
Персональные данные
Содержание СНИЛС – это сведения личного характера о гражданине в виде Ф. И. О., пола и даты рождения. Также на карточке указано 11 цифр страхового номера.
Как следует классифицировать СНИЛС
Не стоит воспринимать СНИЛС с точки зрения одного из основных документов, способных удостоверить вашу личность. Этот документ вспомогательный и служит для идентификации в пенсионной системе, чтобы была возможность производить страховые отчисления применительно к конкретному гражданину. Посредством СНИЛС можно проверить пенсионный счет, а также он востребован при устройстве на работу и получении услуг медицинского характера, что в той же мере распространяется и на сферу социальной помощи.
Конфиденциальность информации
Персональные данные, содержащиеся в страховом свидетельстве, соотносятся с таким понятием, как конфиденциальность. В связи с этим предусматривается запрет на передачу этих данных сторонним лицам. Доступ к ним, кроме самого владельца, возможен лишь со стороны ПФ.
Как проверить действительность свидетельства
Чтобы убедиться в действительности СНИЛС, следует лично отправиться в соответствующее отделение ПФ и произвести там требуемую проверку. Для этого понадобится заполнение заявления и представление самого СНИЛС, а также документа, способного подтвердить личность заявителя (паспорт или что-то подобное).
- Контрольное число. Проверить СНИЛС можно по контрольному числу, указанному в самом номере. В СНИЛС две последние цифры и есть контрольное число. Каждая цифра умножается на номер своего места, позиции. Номер ее определяется отсчетом справа налево. Результаты складываются. Если сумма получится меньше ста, то контрольная цифра равна полученному результату. Если она будет равна 101 или 100, то контрольная цифра принимается за 00. Сумма, превышающая 101, делится на 101. Контрольная цифра будет равна остатку от деления.
Надо сказать, что подобный алгоритм предназначен для определенной категории СНИЛС и всем номерам не подходит. Каким именно можно узнать на сайте самого ПФ или на специализированных сайтах для пенсионеров. Там же можно и более подробно ознакомиться с самим алгоритмом, поскольку мы привели его в самых общих чертах.
- Онлайн в Интернете. Только не пользуйтесь для проверки сторонними сайтами. В интернете много ресурсов предлагают подобную услугу, но не известно в чьи руки попадут ваши персональные данные.
- Лучше сделать проверку в Пенсионного фонда pfrf.ru
- Можно попробовать проверить СНИЛС на сайте Госуслуг Gosuslugi.ru
Нужно пройти регистрацию на сайте Госуслуг. Для этого вам нужны будут:
- данные паспорта;
- электронная почта или номер телефона, мобильного.
Затем, когда вы получите подтверждение и сделаете предложенные вам действия, будет завершена предрегистрация. Теперь в личном кабинете можно вводить СНИЛС. Если он не проходит, то или на сайте есть программная ошибка, или что-то неладное с вашим свидетельством. Есть повод посетить отделение ПФ. Восстановление СНИЛС при утере — простой и не затратный процесс.
По шагам для сайта Госуслуг:
- Необходимо зарегистрироваться на сайте Gosuslugi.ru причем система запросит паспортные данные и номер СНИЛС, поэтому они должны быть под рукой.
- После подтверждения регистрации будет дан логин и пароль для доступа в «Личный кабинет».
- Войдя на сайте в «личный кабинет» необходимо найти вкладку с указателем «пенсионные накопления».
- Внутри этого раздела нажать на кнопку «Получить информацию о состоянии лицевого счета».
Далее из представленной информации станет понятно, какой объем накоплений уже сформировался, куда эти средства направлены для хранения. Если средства накопления при формировании пенсии отправлены в негосударственный пенсионный фонд, то по запросу гражданина он может выдать нужную информацию. Для этого также требуется написать заявление в офисе фонда, предъявив паспорт и СНИЛС. К сожалению, некоторые НПФ эту услугу сделали платной, считая, что она не является основной для пользователей.
Надежный способ проверить свой СНИЛС – это личное посещение ПФ.
Проверить СНИЛС по номеру онлайн на корректность ввода можно на сайте Фонда социально страхования РФ по ссылке: Перейти. Здесь лишь применяются правила расчета контрольной суммы и можно увидеть, правильно ли заведен сам номер, информацию же о владельце номера узнать не удастся.
Проверка СНИЛС в отделениях Сбербанка
Узнать о состоянии накоплений можно также через сайт Сбербанка или другой кредитной организации. Перед этим следует осуществить регистрацию в системе информационного обмена. Проводится она только при личном присутствии в отделении Сбербанка. С собой нужно иметь паспорт и СНИЛС. Оператор выдаст бланк заявления, заполнив которое, система проведет регистрацию. После этого можно будет через систему «Сбербанк-онлайн» или у оператора выяснить интересующую информацию.
Как проверить СНИЛС через интернет (проверить СНИЛС онлайн)?
Чтобы проверить пенсионные накопления по СНИЛС через интернет, достаточно зайти на сайт госуслуг и выбрать услугу «Пенсионные накопления».
Здесь вам необходимо заказать расширенную выписку счета Пенсионного фонда. В течение нескольких минут ваш запрос будет выполнен и вы получите соответствующую выписку, которую сможете распечатать или позже посмотреть в Личном кабинете.
Если вы являетесь клиентом негосударственного Пенсионного фонда, то можете запросить информацию о состоянии своего пенсионного счета на их официальном сайте.
В случае ошибки
Если по какой то причине в СНИЛС была допущена ошибка, то необходимо обратиться в свое отделение ПФ письменно с требованием исправить неточности и ошибки. При подаче нужно предъявить документ, удостоверяющий вашу личность и само свидетельство. Если ошибка в документе действительно присутствует, то вы получите новое страховое свидетельство.
СНИЛС – это номер, который содержится на «зеленой карточке», выдаваемой при регистрации в системе Пенсионного фонда России. Этот номер уникальный и присваивается индивидуальному лицевому счету гражданина в пенсионной системе один раз и на всю жизнь. Можно ли проверить СНИЛС по базе пенсионного фонда онлайн?
Позиция самого Пенсионного фонда России по этому вопросу однозначна: нет! Информация о СНИЛС относится к разряду конфиденциальной информации, поскольку этот страховой номер является одновременно и номером индивидуального счета. На нем содержится информация о гражданине, его стаже, заработке и отчислениях, производимых страхователем (организацией, где работает гражданин) за него в систему пенсионного страхования. Конфиденциальная информация закрыта от третьих лиц, недоступна в сети Интернет и охраняется законом. Поэтому проверка СНИЛС по базе пенсионного фонда осуществляется лично гражданином непосредственно в территориальном органе Пенсионного фонда при предъявлении паспорта.
Страховой номер индивидуального лицевого счёта (СНИЛС) – это цифровой код, подтверждающий регистрацию физического лица в системе государственного пенсионного страхования Российской Федерации, указанный на лицевой стороне Страхового свидетельства обязательного пенсионного страхования (ССОПС). СНИЛС является уникальным для каждого физического лица и служит для начислений уплаченных работодателем страховых взносов в течение трудовой деятельности гражданина. Накопленная на счете сумма учитывается при назначении или перерасчёте пенсии.
Как узнать пенсионные отчисления по СНИЛС
Отчисления в Пенсионный фонд осуществляет работодатель. До 2013 года всем гражданам приходил документ с отчетом о пенсионных накоплениях, поэтому вопроса о проверке СНИЛС на предмет пенсионных накоплений ни у кого не возникало. С 2013 года такие письма будут приходить только тем, кто написал соответствующее заявление.
Сохраните, а то забудете:
dedadi.ru
Данный функционал(с возможными незначительными изменениями) добавлен в библиотеку Net.KSUniLib с версии 1.0.3.38.
Namespace: KomeSoftUniCL.Tools
Class: KSNumberValidator
В базы данных операторами часто вводятся различные текстово-цифровые коды, номера и идентификаторы. Каждый номер или идентификатор, как правило, имеет в своем составе специальные контрольные разряды и алгоритмы проверки правильности ввода. С одним из таких алгоритмов мы сегодня и познакомимся. А проверять мы будем СНИЛС. Да-да, ту самую зеленую карточку, которая лежит у вас в паспорте. СНИЛС в России выступает аналогом карточки соцстрахования в Штатах.
Фактически СНИЛС представляет собой три группы по три цифры, и отдельную группу на два символа для контрольного числа. Контрольное число рассчитывается по следующему алгоритму:
0) Игнорируются все нецифровые символы.
1) Все цифры СНИЛС (т.е., 9 цифр основного номера без контрольного числа) умножаются на свою позицию в номере (Важно: позиции цифр рассчитываются как в числе, а не как в строке! Т.е., справа налево. Важно: счет позиций начинается с 1, а не с 0)
2) Произведения разрядов номера суммируются.
3) Если сумма меньше 100, она принимается за контрольную.
4) Если сумма — 100 или 101, то контрольной суммой становится ноль. В номере при этом записывается «00»
5) Если сумма больше 101, то она делится нацело на 101, а с остатком от деления повторяются шаги с 3 по 5.
Дабы не реализовывать каждый раз функционал различных проверок, я создал в библиотеке специальный статический класс, и по мере сил и времени буду добавлять туда новые виды проверок. А на проверке номера СНИЛС и расчете его контрольной суммы мы сейчас остановимся поподробнее.
Итак, нам необходимы три метода: метод SNILSValidate(), возвращающий только true и false в зависимости от того, валидный ли номер или нет, метод SNILSContolCalc(), рассчитывающий и возвращающий контрольную сумму в виде числа и приватный метод SNILSCheckControlSum(), выполняющий указанные чуть выше шаги сравнения.
Реализуем SNILSValidate():
public Boolean SNILSValidate(String snils){ String workSnils = KSStringProcessor.OnlyDigits(snils); Boolean result = false; if(workSnils.Length == 9){ if(SNILSContolCalc(workSnils) > -1){ result = true; } } else if(workSnils.Length == 11){ Int32 controlSum = SNILSContolCalc(workSnils); Int32 strControlSum = Int32.Parse(workSnils.Substring(9, 2)); if(controlSum == strControlSum){ result = true; } } else{ throw new Exception(String.Format("Incorrect SNILS number. {0} digits! (it can only be 9 or 11 digits!)", workSnils.Length)); } return result; }
Логика метода проста. Метод получает строку, содержащую (предположительно) СНИЛС. Далее, с помощью KSStringProcessor.OnlyDigits(), мы очищаем входную строку от всего, кроме цифр, и проверяем ее длину. Если длина строки — 9 символов, то она является номером СНИЛС без контрольной суммы, если 11 — то приведен номер СНИЛС с контрольной суммой, а при любой другой длине строки метод выбрасывает исключение.
Итак, как мы видим, при длине строки в 9 символов для валидации нам достаточно просто рассчитать контрольную сумму. Если она рассчиталась, то номер мы считаем валидным.
При длине строки в 11 символов действия немного сложнее — необходимо запомнить последние два символа, рассчитать контрольную сумму для оставшихся 9 символов, а затем сравнить два значения. Если они равны, то номер валиден.
Теперь необходимо реализовать функционал расчета контрольной суммы:
public static Int32 SNILSContolCalc(String snils){ String workSnils = KSStringProcessor.OnlyDigits(snils); if(workSnils.Length != 9 && workSnils.Length != 11){ throw new Exception(String.Format("Incorrect SNILS number. {0} digits! (it can only be 9 or 11 digits!)", workSnils.Length)); } if(workSnils.Length == 11){ workSnils = workSnils.Substring(0,9); } Int32 totalSum = 0; for(Int32 i = workSnils.Length-1, j=0;i>=0;i--, j++){ Int32 digit = Int32.Parse(workSnils[i].ToString()); totalSum += digit*(j+1); } return SNILSCheckControlSum(totalSum); }
Данный метод мы можем применять как вместе с предыдущим, так и независимо от него. Поэтому мы должны в него встроить не же проверки на длину строки. Далее, с помощью цикла for с двумя индексами i и j мы обходим посимвольно полученный 9-ти значный номер, и рассчитаем общую сумму разрядов.
Остался последний метод — SNILSCheckControlSum():
private static Int32 SNILSCheckControlSum(Int32 _controlSum){ Int32 result; if(_controlSum < 100){ result = _controlSum; } else if(_controlSum <= 101){ result = 0; } else{ Int32 balance = _controlSum%101; result = SNILSCheckControlSum(balance); } return result; }
Метод определяет, в какой диапазон входит totalSum, и если она входит в третий диапазон — делит ее нацело на 101 и вызывает сама себя.
Результат: методы проверяют введенный номер СНИЛС на валидность и рассчитывают его контрольную сумму. Чуть позже будут так же написаны методы для проверки штрих-кодов EAN-8 и EAN-13, а также для ИНН и ОГРН.
kome-soft.blogspot.com