<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=193.232.176.4</id>
	<title>Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=193.232.176.4"/>
	<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/193.232.176.4"/>
	<updated>2026-04-30T12:48:41Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%98%D0%9D%D0%9D,_%D0%9A%D0%9F%D0%9F_%D0%B8_%D0%9E%D0%93%D0%A0%D0%9D&amp;diff=5506</id>
		<title>Проверка ИНН, КПП и ОГРН</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%98%D0%9D%D0%9D,_%D0%9A%D0%9F%D0%9F_%D0%B8_%D0%9E%D0%93%D0%A0%D0%9D&amp;diff=5506"/>
		<updated>2017-01-31T15:27:08Z</updated>

		<summary type="html">&lt;p&gt;193.232.176.4: /* ОГРН */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Что такое ИНН, КПП, ОГРН и как программно проверять их значения на корректность. Бонусом к статье идёт готовое приложение под Windows.&lt;br /&gt;
__TOC__&lt;br /&gt;
== Теория ==&lt;br /&gt;
&lt;br /&gt;
Сначала, что это такое:&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80_%D0%BD%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%89%D0%B8%D0%BA%D0%B0 Идентификационный номер налогоплательщика (ИНН)];&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%BF%D1%80%D0%B8%D1%87%D0%B8%D0%BD%D1%8B_%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%BD%D0%B0_%D1%83%D1%87%D1%91%D1%82 Код причины постановки на учёт (КПП)];&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D0%93%D0%A0%D0%9D Основной государственный регистрационный номер (ОГРН)].&lt;br /&gt;
&lt;br /&gt;
Вкратце, суть: эти значения (за исключением КПП) содержат контрольную цифру, по которой можно проверить их корректность. Контрольная цифра вычисляется по формуле, которую затруднительно посчитать в уме не отходя от кассы, потому надо поручить это компьютеру. С КПП всё проще - там просто соответствие регулярному выражению, но мы и это спихнём компу.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены программные решения этой задачи. [http://lurkmore.to/%D0%B8%D0%BD%D0%B4%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4 Индусский код] инклюдед.&lt;br /&gt;
&lt;br /&gt;
== Практика ==&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
&lt;br /&gt;
==== ИНН ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/// &amp;lt;summary&amp;gt;&lt;br /&gt;
/// проверка ИНН по контрольной цифре&lt;br /&gt;
/// &amp;lt;/summary&amp;gt;&lt;br /&gt;
/// &amp;lt;param name=&amp;quot;INNstring&amp;quot;&amp;gt;ИНН для проверки&amp;lt;/param&amp;gt;&lt;br /&gt;
/// &amp;lt;returns&amp;gt;true - если проходит проверку, false - если не проходит проверку&amp;lt;/returns&amp;gt;&lt;br /&gt;
public bool check_INN(string INNstring)&lt;br /&gt;
{&lt;br /&gt;
    // является ли вообще числом&lt;br /&gt;
    try { Int64.Parse(INNstring); } catch { return false; }&lt;br /&gt;
&lt;br /&gt;
    // проверка на 10 и 12 цифр&lt;br /&gt;
    if (INNstring.Length != 10 &amp;amp;&amp;amp; INNstring.Length != 12) { return false; }&lt;br /&gt;
&lt;br /&gt;
    // проверка по контрольным цифрам&lt;br /&gt;
    if (INNstring.Length == 10) // для юридического лица&lt;br /&gt;
    {&lt;br /&gt;
        int dgt10 = 0;&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
            dgt10 = (((2 * Int32.Parse(INNstring.Substring(0,1))&lt;br /&gt;
                + 4 * Int32.Parse(INNstring.Substring(1,1))&lt;br /&gt;
                + 10 * Int32.Parse(INNstring.Substring(2,1))&lt;br /&gt;
                + 3 * Int32.Parse(INNstring.Substring(3,1))&lt;br /&gt;
                + 5 * Int32.Parse(INNstring.Substring(4,1))&lt;br /&gt;
                + 9 * Int32.Parse(INNstring.Substring(5,1))&lt;br /&gt;
                + 4 * Int32.Parse(INNstring.Substring(6,1))&lt;br /&gt;
                + 6 * Int32.Parse(INNstring.Substring(7,1))&lt;br /&gt;
                + 8 * Int32.Parse(INNstring.Substring(8,1))) % 11) % 10);&lt;br /&gt;
        }&lt;br /&gt;
        catch { return false; }&lt;br /&gt;
&lt;br /&gt;
        if (Int32.Parse(INNstring.Substring(9,1)) == dgt10) { return true; }&lt;br /&gt;
        else { return false; }&lt;br /&gt;
    }&lt;br /&gt;
    else // для физического лица&lt;br /&gt;
    {&lt;br /&gt;
        int dgt11 = 0, dgt12 = 0;&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
            dgt11 = (((&lt;br /&gt;
                7 * Int32.Parse(INNstring.Substring(0,1))&lt;br /&gt;
                + 2 * Int32.Parse(INNstring.Substring(1,1))&lt;br /&gt;
                + 4 * Int32.Parse(INNstring.Substring(2,1))&lt;br /&gt;
                + 10 * Int32.Parse(INNstring.Substring(3,1))&lt;br /&gt;
                + 3 * Int32.Parse(INNstring.Substring(4,1))&lt;br /&gt;
                + 5 * Int32.Parse(INNstring.Substring(5,1))&lt;br /&gt;
                + 9 * Int32.Parse(INNstring.Substring(6,1))&lt;br /&gt;
                + 4 * Int32.Parse(INNstring.Substring(7,1))&lt;br /&gt;
                + 6 * Int32.Parse(INNstring.Substring(8,1))&lt;br /&gt;
                + 8 * Int32.Parse(INNstring.Substring(9,1))) % 11) % 10);&lt;br /&gt;
            dgt12 = (((&lt;br /&gt;
                3 * Int32.Parse(INNstring.Substring(0,1))&lt;br /&gt;
                + 7 * Int32.Parse(INNstring.Substring(1,1))&lt;br /&gt;
                + 2 * Int32.Parse(INNstring.Substring(2,1))&lt;br /&gt;
                + 4 * Int32.Parse(INNstring.Substring(3,1))&lt;br /&gt;
                + 10 * Int32.Parse(INNstring.Substring(4,1))&lt;br /&gt;
                + 3 * Int32.Parse(INNstring.Substring(5,1))&lt;br /&gt;
                + 5 * Int32.Parse(INNstring.Substring(6,1))&lt;br /&gt;
                + 9 * Int32.Parse(INNstring.Substring(7,1))&lt;br /&gt;
                + 4 * Int32.Parse(INNstring.Substring(8,1))&lt;br /&gt;
                + 6 * Int32.Parse(INNstring.Substring(9,1))&lt;br /&gt;
                + 8 * Int32.Parse(INNstring.Substring(10,1))) % 11) % 10);&lt;br /&gt;
        }&lt;br /&gt;
        catch { return false; }&lt;br /&gt;
        if (Int32.Parse(INNstring.Substring(10,1)) == dgt11&lt;br /&gt;
            &amp;amp;&amp;amp; Int32.Parse(INNstring.Substring(11,1)) == dgt12) { return true; }&lt;br /&gt;
        else { return false; }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== КПП ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/// &amp;lt;summary&amp;gt;&lt;br /&gt;
/// проверка КПП по регулярному выражению&lt;br /&gt;
/// &amp;lt;/summary&amp;gt;&lt;br /&gt;
/// &amp;lt;param name=&amp;quot;KPPstring&amp;quot;&amp;gt;КПП для проверки&amp;lt;/param&amp;gt;&lt;br /&gt;
/// &amp;lt;returns&amp;gt;true - если проходит проверку, false - если не проходит проверку&amp;lt;/returns&amp;gt;&lt;br /&gt;
public bool check_KPP(string KPPstring)&lt;br /&gt;
{&lt;br /&gt;
    return new Regex(@&amp;quot;\d{4}[\dA-Z][\dA-Z]\d{3}&amp;quot;).IsMatch(KPPstring);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ОГРН ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/// &amp;lt;summary&amp;gt;&lt;br /&gt;
/// проверка ОГРН по контрольной цифре&lt;br /&gt;
/// &amp;lt;/summary&amp;gt;&lt;br /&gt;
/// &amp;lt;param name=&amp;quot;OGRNstring&amp;quot;&amp;gt;ОГРН для проверки&amp;lt;/param&amp;gt;&lt;br /&gt;
/// &amp;lt;returns&amp;gt;true - если проходит проверку, false - если не проходит проверку&amp;lt;/returns&amp;gt;&lt;br /&gt;
public bool check_OGRN(string OGRNstring)&lt;br /&gt;
{&lt;br /&gt;
    // является ли вообще числом&lt;br /&gt;
    long number = 0;&lt;br /&gt;
    try { number = Int64.Parse(OGRNstring); }&lt;br /&gt;
    catch { return false; }&lt;br /&gt;
&lt;br /&gt;
    // проверка на 13 и 15 цифр&lt;br /&gt;
    if (OGRNstring.Length != 13 &amp;amp;&amp;amp; OGRNstring.Length != 15) { return false; }&lt;br /&gt;
&lt;br /&gt;
    // проверка по контрольным цифрам&lt;br /&gt;
    if (OGRNstring.Length == 13) // для юридического лица&lt;br /&gt;
    {&lt;br /&gt;
        // остаток от деления&lt;br /&gt;
        int num12 = (int)Math.Floor(((double)number / 10) % 11);&lt;br /&gt;
        int dgt13 = -1;&lt;br /&gt;
        // если остаток равен 10, то берём 0, если нет, то берём его самого&lt;br /&gt;
        if (num12 == 10) { dgt13 = 0; } else { dgt13 = num12; }&lt;br /&gt;
        // ну и теперь сравниваем с контрольной цифрой&lt;br /&gt;
        if (Int32.Parse(OGRNstring.Substring(12, 1)) == dgt13) { return true; }&lt;br /&gt;
        else { return false; }&lt;br /&gt;
    }&lt;br /&gt;
    else // для индивидуального предпринимателя&lt;br /&gt;
    {&lt;br /&gt;
        // остаток от деления&lt;br /&gt;
        int num14 = (int)Math.Floor(((double)number / 10) % 13);&lt;br /&gt;
        int dgt15 = num14 % 10;&lt;br /&gt;
        // ну и теперь сравниваем с контрольной цифрой&lt;br /&gt;
        if (Int32.Parse(OGRNstring.Substring(14, 1)) == dgt15) { return true; }&lt;br /&gt;
        else { return false; }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Готовое приложение ====&lt;br /&gt;
&lt;br /&gt;
В процессе написания случайно получилось готовое приложение (под Windows, конечно):&lt;br /&gt;
* [http://yadi.sk/d/YNtpQgJsDtVU5 само приложение] (Требует .NET 4.5.1.);&lt;br /&gt;
* [https://github.com/retifrav/validations исходники проекта на GitHub] (MS Visual Studio 2013).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Validations screen.png|center]]&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
&lt;br /&gt;
Допустим, есть какая-то веб-страница с формой, где присутствуют поля ИНН, КПП и ОГРН. Чтобы не дёргать сервер по мелочам, можно выполнить валидацию этих полей с помощью JavaScript, повесив на какой-нибудь &amp;lt;code&amp;gt;onclick&amp;lt;/code&amp;gt;, например, следующие функции.&lt;br /&gt;
&lt;br /&gt;
==== ИНН ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isINNvalid(sender, args) {&lt;br /&gt;
    // проверка на число&lt;br /&gt;
    if (args.Value.match(/\D/)) {&lt;br /&gt;
        //alert(&amp;quot;Введённый ИНН не является числом&amp;quot;);&lt;br /&gt;
        args.IsValid = false;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
    // проверка на 10 и 12 цифр&lt;br /&gt;
    if (args.Value.length != 12 &amp;amp;&amp;amp; args.Value.length != 10) {&lt;br /&gt;
        args.IsValid = false;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
    // проверка по контрольным цифрам&lt;br /&gt;
    if (args.Value.length == 10) {&lt;br /&gt;
        var dgt10 = String(((&lt;br /&gt;
            2 * args.Value[0] + 4 * args.Value[1] + 10 * args.Value[2] +&lt;br /&gt;
            3 * args.Value[3] + 5 * args.Value[4] + 9 * args.Value[5] +&lt;br /&gt;
            4 * args.Value[6] + 6 * args.Value[7] + 8 * args.Value[8]) % 11) % 10);&lt;br /&gt;
        if (args.Value[9] == dgt10) {&lt;br /&gt;
            args.IsValid = true;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            //alert(&amp;quot;Введённый ИНН не прошёл проверку по контрольным цифрам&amp;quot;);&lt;br /&gt;
            args.IsValid = false;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (args.Value.length == 12) {&lt;br /&gt;
        var dgt11 = String(((&lt;br /&gt;
            7 * args.Value[0] + 2 * args.Value[1] + 4 * args.Value[2] +&lt;br /&gt;
            10 * args.Value[3] + 3 * args.Value[4] + 5 * args.Value[5] +&lt;br /&gt;
            9 * args.Value[6] + 4 * args.Value[7] + 6 * args.Value[8] +&lt;br /&gt;
            8 * args.Value[9]) % 11) % 10);&lt;br /&gt;
        var dgt12 = String(((&lt;br /&gt;
            3 * args.Value[0] + 7 * args.Value[1] + 2 * args.Value[2] +&lt;br /&gt;
            4 * args.Value[3] + 10 * args.Value[4] + 3 * args.Value[5] +&lt;br /&gt;
            5 * args.Value[6] + 9 * args.Value[7] + 4 * args.Value[8] +&lt;br /&gt;
            6 * args.Value[9] + 8 * args.Value[10]) % 11) % 10);&lt;br /&gt;
        if (args.Value[10] == dgt11 &amp;amp;&amp;amp; args.Value[11] == dgt12)&lt;br /&gt;
        {&lt;br /&gt;
            args.IsValid = true;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            //alert(&amp;quot;Введённый ИНН не прошёл проверку по контрольным цифрам&amp;quot;);&lt;br /&gt;
            args.IsValid = false;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== КПП ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isKPPvalid(sender, args) {&lt;br /&gt;
    if (args.Value.length != 9) {&lt;br /&gt;
        //alert(&amp;quot;КПП должен представлять собой девятизначный код&amp;quot;);&lt;br /&gt;
        args.IsValid = false;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
    if (!args.Value.match(/\d{4}[\dA-Z][\dA-Z]\d{3}/)) {&lt;br /&gt;
        //alert(&amp;quot;КПП не соответствует формату&amp;quot;);&lt;br /&gt;
        args.IsValid = false;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        args.IsValid = true;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ОГРН ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function isOGRNvalid(sender, args) {&lt;br /&gt;
    var dgt13;&lt;br /&gt;
    // проверка на число&lt;br /&gt;
    if (args.Value.match(/\D/)) {&lt;br /&gt;
        //alert(&amp;quot;Введённый ОГРН не является числом&amp;quot;);&lt;br /&gt;
        args.IsValid = false;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
    // проверка на 13 и 15 цифр&lt;br /&gt;
    if (args.Value.length != 13 &amp;amp;&amp;amp; args.Value.length != 15) {&lt;br /&gt;
        args.IsValid = false;&lt;br /&gt;
        return args.IsValid;&lt;br /&gt;
    }&lt;br /&gt;
    // проверка ОГРН для ЮЛ&lt;br /&gt;
    if (args.Value.length == 13) {&lt;br /&gt;
        // проверка по контрольным цифрам&lt;br /&gt;
        var num12 = args.Value;&lt;br /&gt;
        num12 = Math.floor((num12 / 10) % 11);&lt;br /&gt;
        if (num12 == 10) { dgt13 = 0; }&lt;br /&gt;
        else { dgt13 = num12; }&lt;br /&gt;
        if (args.Value[12] == dgt13) {&lt;br /&gt;
            args.IsValid = true;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            //alert(&amp;quot;Введённый ОГРН не прошёл проверку по контрольным цифрам&amp;quot;);&lt;br /&gt;
            args.IsValid = false;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    // проверка ОГРН для ИП&lt;br /&gt;
    if (args.Value.length == 15) {&lt;br /&gt;
        // проверка по контрольным цифрам&lt;br /&gt;
        var num14 = args.Value;&lt;br /&gt;
        num14 = Math.floor((num14 / 10) % 13);&lt;br /&gt;
        var dgt15 = num14 % 10;&lt;br /&gt;
        if (args.Value[14] == dgt15) {&lt;br /&gt;
            args.IsValid = true;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            //alert(&amp;quot;Введённый ОГРН не прошёл проверку по контрольным цифрам&amp;quot;);&lt;br /&gt;
            args.IsValid = false;&lt;br /&gt;
            return args.IsValid;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Погроммирование]]&lt;/div&gt;</summary>
		<author><name>193.232.176.4</name></author>
	</entry>
</feed>