Проверка ИНН, КПП и ОГРН — различия между версиями

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана - студенческое сообщество
Перейти к: навигация, поиск
(Новая страница: «== Теория == Сначала, что это такое: * [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%D…»)
 
(ОГРН)
 
(не показано 19 промежуточных версий 5 участников)
Строка 1: Строка 1:
 +
Что такое ИНН, КПП, ОГРН и как программно проверять их значения на корректность. Бонусом к статье идёт готовое приложение под Windows.
 +
__TOC__
 
== Теория ==
 
== Теория ==
  
 
Сначала, что это такое:
 
Сначала, что это такое:
 
* [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 Идентификационный номер налогоплательщика (ИНН)];
 
* [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 Идентификационный номер налогоплательщика (ИНН)];
* [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 Код причины постановки на учёт (КПП)];
+
* [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 Код причины постановки на учёт (КПП)];
* [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 Основной государственный регистрационный номер (ОГРН)].
+
* [http://ru.wikipedia.org/wiki/%D0%9E%D0%93%D0%A0%D0%9D Основной государственный регистрационный номер (ОГРН)].
  
Вкратце, суть: эти значения (за исключением КПП) содержат контрольную цифру, по которой можно проверить их корректность. Контрольная цифра вычисляется по формуле, которую затруднительно посчитать в уме не отходя от кассы, потому надо поручить это компьютеру.
+
Вкратце, суть: эти значения (за исключением КПП) содержат контрольную цифру, по которой можно проверить их корректность. Контрольная цифра вычисляется по формуле, которую затруднительно посчитать в уме не отходя от кассы, потому надо поручить это компьютеру. С КПП всё проще - там просто соответствие регулярному выражению, но мы и это спихнём компу.
  
 
Ниже приведены программные решения этой задачи. [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 Индусский код] инклюдед.
 
Ниже приведены программные решения этой задачи. [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 Индусский код] инклюдед.
Строка 15: Строка 17:
  
 
==== ИНН ====
 
==== ИНН ====
 +
 +
<syntaxhighlight line lang="csharp">
 +
/// <summary>
 +
/// проверка ИНН по контрольной цифре
 +
/// </summary>
 +
/// <param name="INNstring">ИНН для проверки</param>
 +
/// <returns>true - если проходит проверку, false - если не проходит проверку</returns>
 +
public bool check_INN(string INNstring)
 +
{
 +
    // является ли вообще числом
 +
    try { Int64.Parse(INNstring); } catch { return false; }
 +
 +
    // проверка на 10 и 12 цифр
 +
    if (INNstring.Length != 10 && INNstring.Length != 12) { return false; }
 +
 +
    // проверка по контрольным цифрам
 +
    if (INNstring.Length == 10) // для юридического лица
 +
    {
 +
        int dgt10 = 0;
 +
        try
 +
        {
 +
            dgt10 = (((2 * Int32.Parse(INNstring.Substring(0,1))
 +
                + 4 * Int32.Parse(INNstring.Substring(1,1))
 +
                + 10 * Int32.Parse(INNstring.Substring(2,1))
 +
                + 3 * Int32.Parse(INNstring.Substring(3,1))
 +
                + 5 * Int32.Parse(INNstring.Substring(4,1))
 +
                + 9 * Int32.Parse(INNstring.Substring(5,1))
 +
                + 4 * Int32.Parse(INNstring.Substring(6,1))
 +
                + 6 * Int32.Parse(INNstring.Substring(7,1))
 +
                + 8 * Int32.Parse(INNstring.Substring(8,1))) % 11) % 10);
 +
        }
 +
        catch { return false; }
 +
 +
        if (Int32.Parse(INNstring.Substring(9,1)) == dgt10) { return true; }
 +
        else { return false; }
 +
    }
 +
    else // для физического лица
 +
    {
 +
        int dgt11 = 0, dgt12 = 0;
 +
        try
 +
        {
 +
            dgt11 = (((
 +
                7 * Int32.Parse(INNstring.Substring(0,1))
 +
                + 2 * Int32.Parse(INNstring.Substring(1,1))
 +
                + 4 * Int32.Parse(INNstring.Substring(2,1))
 +
                + 10 * Int32.Parse(INNstring.Substring(3,1))
 +
                + 3 * Int32.Parse(INNstring.Substring(4,1))
 +
                + 5 * Int32.Parse(INNstring.Substring(5,1))
 +
                + 9 * Int32.Parse(INNstring.Substring(6,1))
 +
                + 4 * Int32.Parse(INNstring.Substring(7,1))
 +
                + 6 * Int32.Parse(INNstring.Substring(8,1))
 +
                + 8 * Int32.Parse(INNstring.Substring(9,1))) % 11) % 10);
 +
            dgt12 = (((
 +
                3 * Int32.Parse(INNstring.Substring(0,1))
 +
                + 7 * Int32.Parse(INNstring.Substring(1,1))
 +
                + 2 * Int32.Parse(INNstring.Substring(2,1))
 +
                + 4 * Int32.Parse(INNstring.Substring(3,1))
 +
                + 10 * Int32.Parse(INNstring.Substring(4,1))
 +
                + 3 * Int32.Parse(INNstring.Substring(5,1))
 +
                + 5 * Int32.Parse(INNstring.Substring(6,1))
 +
                + 9 * Int32.Parse(INNstring.Substring(7,1))
 +
                + 4 * Int32.Parse(INNstring.Substring(8,1))
 +
                + 6 * Int32.Parse(INNstring.Substring(9,1))
 +
                + 8 * Int32.Parse(INNstring.Substring(10,1))) % 11) % 10);
 +
        }
 +
        catch { return false; }
 +
        if (Int32.Parse(INNstring.Substring(10,1)) == dgt11
 +
            && Int32.Parse(INNstring.Substring(11,1)) == dgt12) { return true; }
 +
        else { return false; }
 +
    }
 +
}
 +
</syntaxhighlight>
  
 
==== КПП ====
 
==== КПП ====
 +
 +
<syntaxhighlight line lang="csharp">
 +
/// <summary>
 +
/// проверка КПП по регулярному выражению
 +
/// </summary>
 +
/// <param name="KPPstring">КПП для проверки</param>
 +
/// <returns>true - если проходит проверку, false - если не проходит проверку</returns>
 +
public bool check_KPP(string KPPstring)
 +
{
 +
    return new Regex(@"\d{4}[\dA-Z][\dA-Z]\d{3}").IsMatch(KPPstring);
 +
}
 +
</syntaxhighlight>
  
 
==== ОГРН ====
 
==== ОГРН ====
 +
 +
<syntaxhighlight line lang="csharp">
 +
/// <summary>
 +
/// проверка ОГРН по контрольной цифре
 +
/// </summary>
 +
/// <param name="OGRNstring">ОГРН для проверки</param>
 +
/// <returns>true - если проходит проверку, false - если не проходит проверку</returns>
 +
public bool check_OGRN(string OGRNstring)
 +
{
 +
    // является ли вообще числом
 +
    long number = 0;
 +
    try { number = Int64.Parse(OGRNstring); }
 +
    catch { return false; }
 +
 +
    // проверка на 13 и 15 цифр
 +
    if (OGRNstring.Length != 13 && OGRNstring.Length != 15) { return false; }
 +
 +
    // проверка по контрольным цифрам
 +
    if (OGRNstring.Length == 13) // для юридического лица
 +
    {
 +
        // остаток от деления
 +
        int num12 = (int)Math.Floor(((double)number / 10) % 11);
 +
        int dgt13 = -1;
 +
        // если остаток равен 10, то берём 0, если нет, то берём его самого
 +
        if (num12 == 10) { dgt13 = 0; } else { dgt13 = num12; }
 +
        // ну и теперь сравниваем с контрольной цифрой
 +
        if (Int32.Parse(OGRNstring.Substring(12, 1)) == dgt13) { return true; }
 +
        else { return false; }
 +
    }
 +
    else // для индивидуального предпринимателя
 +
    {
 +
        // остаток от деления
 +
        int num14 = (int)Math.Floor(((double)number / 10) % 13);
 +
        int dgt15 = num14 % 10;
 +
        // ну и теперь сравниваем с контрольной цифрой
 +
        if (Int32.Parse(OGRNstring.Substring(14, 1)) == dgt15) { return true; }
 +
        else { return false; }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 +
==== Готовое приложение ====
 +
 +
В процессе написания случайно получилось готовое приложение (под Windows, конечно):
 +
* [http://yadi.sk/d/YNtpQgJsDtVU5 само приложение] (Требует .NET 4.5.1.);
 +
* [https://github.com/retifrav/validations исходники проекта на GitHub] (MS Visual Studio 2013).
 +
 +
[[Файл:Validations screen.png|center]]
  
 
=== JavaScript ===
 
=== JavaScript ===
 +
 +
Допустим, есть какая-то веб-страница с формой, где присутствуют поля ИНН, КПП и ОГРН. Чтобы не дёргать сервер по мелочам, можно выполнить валидацию этих полей с помощью JavaScript, повесив на какой-нибудь <code>onclick</code>, например, следующие функции.
  
 
==== ИНН ====
 
==== ИНН ====
 +
 +
<syntaxhighlight line lang="javascript">
 +
function isINNvalid(sender, args) {
 +
    // проверка на число
 +
    if (args.Value.match(/\D/)) {
 +
        //alert("Введённый ИНН не является числом");
 +
        args.IsValid = false;
 +
        return args.IsValid;
 +
    }
 +
    // проверка на 10 и 12 цифр
 +
    if (args.Value.length != 12 && args.Value.length != 10) {
 +
        args.IsValid = false;
 +
        return args.IsValid;
 +
    }
 +
    // проверка по контрольным цифрам
 +
    if (args.Value.length == 10) {
 +
        var dgt10 = String(((
 +
            2 * args.Value[0] + 4 * args.Value[1] + 10 * args.Value[2] +
 +
            3 * args.Value[3] + 5 * args.Value[4] + 9 * args.Value[5] +
 +
            4 * args.Value[6] + 6 * args.Value[7] + 8 * args.Value[8]) % 11) % 10);
 +
        if (args.Value[9] == dgt10) {
 +
            args.IsValid = true;
 +
            return args.IsValid;
 +
        }
 +
        else {
 +
            //alert("Введённый ИНН не прошёл проверку по контрольным цифрам");
 +
            args.IsValid = false;
 +
            return args.IsValid;
 +
        }
 +
    }
 +
    if (args.Value.length == 12) {
 +
        var dgt11 = String(((
 +
            7 * args.Value[0] + 2 * args.Value[1] + 4 * args.Value[2] +
 +
            10 * args.Value[3] + 3 * args.Value[4] + 5 * args.Value[5] +
 +
            9 * args.Value[6] + 4 * args.Value[7] + 6 * args.Value[8] +
 +
            8 * args.Value[9]) % 11) % 10);
 +
        var dgt12 = String(((
 +
            3 * args.Value[0] + 7 * args.Value[1] + 2 * args.Value[2] +
 +
            4 * args.Value[3] + 10 * args.Value[4] + 3 * args.Value[5] +
 +
            5 * args.Value[6] + 9 * args.Value[7] + 4 * args.Value[8] +
 +
            6 * args.Value[9] + 8 * args.Value[10]) % 11) % 10);
 +
        if (args.Value[10] == dgt11 && args.Value[11] == dgt12)
 +
        {
 +
            args.IsValid = true;
 +
            return args.IsValid;
 +
        }
 +
        else {
 +
            //alert("Введённый ИНН не прошёл проверку по контрольным цифрам");
 +
            args.IsValid = false;
 +
            return args.IsValid;
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
  
 
==== КПП ====
 
==== КПП ====
 +
 +
<syntaxhighlight line lang="javascript">
 +
function isKPPvalid(sender, args) {
 +
    if (args.Value.length != 9) {
 +
        //alert("КПП должен представлять собой девятизначный код");
 +
        args.IsValid = false;
 +
        return args.IsValid;
 +
    }
 +
    if (!args.Value.match(/\d{4}[\dA-Z][\dA-Z]\d{3}/)) {
 +
        //alert("КПП не соответствует формату");
 +
        args.IsValid = false;
 +
        return args.IsValid;
 +
    }
 +
    else {
 +
        args.IsValid = true;
 +
        return args.IsValid;
 +
    }
 +
}
 +
</syntaxhighlight>
  
 
==== ОГРН ====
 
==== ОГРН ====
  
[[Категория:Продлёнка]]
+
<syntaxhighlight line lang="javascript">
[[Категория:C#]]
+
function isOGRNvalid(sender, args) {
[[Категория:JavaScript]]
+
    var dgt13;
 +
    // проверка на число
 +
    if (args.Value.match(/\D/)) {
 +
        //alert("Введённый ОГРН не является числом");
 +
        args.IsValid = false;
 +
        return args.IsValid;
 +
    }
 +
    // проверка на 13 и 15 цифр
 +
    if (args.Value.length != 13 && args.Value.length != 15) {
 +
        args.IsValid = false;
 +
        return args.IsValid;
 +
    }
 +
    // проверка ОГРН для ЮЛ
 +
    if (args.Value.length == 13) {
 +
        // проверка по контрольным цифрам
 +
        var num12 = args.Value;
 +
        num12 = Math.floor((num12 / 10) % 11);
 +
        if (num12 == 10) { dgt13 = 0; }
 +
        else { dgt13 = num12; }
 +
        if (args.Value[12] == dgt13) {
 +
            args.IsValid = true;
 +
            return args.IsValid;
 +
        }
 +
        else {
 +
            //alert("Введённый ОГРН не прошёл проверку по контрольным цифрам");
 +
            args.IsValid = false;
 +
            return args.IsValid;
 +
        }
 +
    }
 +
    // проверка ОГРН для ИП
 +
    if (args.Value.length == 15) {
 +
        // проверка по контрольным цифрам
 +
        var num14 = args.Value;
 +
        num14 = Math.floor((num14 / 10) % 13);
 +
        var dgt15 = num14 % 10;
 +
        if (args.Value[14] == dgt15) {
 +
            args.IsValid = true;
 +
            return args.IsValid;
 +
        }
 +
        else {
 +
            //alert("Введённый ОГРН не прошёл проверку по контрольным цифрам");
 +
            args.IsValid = false;
 +
            return args.IsValid;
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 
 +
[[Категория:Погроммирование]]

Текущая версия на 18:27, 31 января 2017

Что такое ИНН, КПП, ОГРН и как программно проверять их значения на корректность. Бонусом к статье идёт готовое приложение под Windows.

Теория

Сначала, что это такое:

Вкратце, суть: эти значения (за исключением КПП) содержат контрольную цифру, по которой можно проверить их корректность. Контрольная цифра вычисляется по формуле, которую затруднительно посчитать в уме не отходя от кассы, потому надо поручить это компьютеру. С КПП всё проще - там просто соответствие регулярному выражению, но мы и это спихнём компу.

Ниже приведены программные решения этой задачи. Индусский код инклюдед.

Практика

C#

ИНН

  1. /// <summary>
  2. /// проверка ИНН по контрольной цифре
  3. /// </summary>
  4. /// <param name="INNstring">ИНН для проверки</param>
  5. /// <returns>true - если проходит проверку, false - если не проходит проверку</returns>
  6. public bool check_INN(string INNstring)
  7. {
  8.     // является ли вообще числом
  9.     try { Int64.Parse(INNstring); } catch { return false; }
  10.  
  11.     // проверка на 10 и 12 цифр
  12.     if (INNstring.Length != 10 && INNstring.Length != 12) { return false; }
  13.  
  14.     // проверка по контрольным цифрам
  15.     if (INNstring.Length == 10) // для юридического лица
  16.     {
  17.         int dgt10 = 0;
  18.         try
  19.         {
  20.             dgt10 = (((2 * Int32.Parse(INNstring.Substring(0,1))
  21.                 + 4 * Int32.Parse(INNstring.Substring(1,1))
  22.                 + 10 * Int32.Parse(INNstring.Substring(2,1))
  23.                 + 3 * Int32.Parse(INNstring.Substring(3,1))
  24.                 + 5 * Int32.Parse(INNstring.Substring(4,1))
  25.                 + 9 * Int32.Parse(INNstring.Substring(5,1))
  26.                 + 4 * Int32.Parse(INNstring.Substring(6,1))
  27.                 + 6 * Int32.Parse(INNstring.Substring(7,1))
  28.                 + 8 * Int32.Parse(INNstring.Substring(8,1))) % 11) % 10);
  29.         }
  30.         catch { return false; }
  31.  
  32.         if (Int32.Parse(INNstring.Substring(9,1)) == dgt10) { return true; }
  33.         else { return false; }
  34.     }
  35.     else // для физического лица
  36.     {
  37.         int dgt11 = 0, dgt12 = 0;
  38.         try
  39.         {
  40.             dgt11 = (((
  41.                 7 * Int32.Parse(INNstring.Substring(0,1))
  42.                 + 2 * Int32.Parse(INNstring.Substring(1,1))
  43.                 + 4 * Int32.Parse(INNstring.Substring(2,1))
  44.                 + 10 * Int32.Parse(INNstring.Substring(3,1))
  45.                 + 3 * Int32.Parse(INNstring.Substring(4,1))
  46.                 + 5 * Int32.Parse(INNstring.Substring(5,1))
  47.                 + 9 * Int32.Parse(INNstring.Substring(6,1))
  48.                 + 4 * Int32.Parse(INNstring.Substring(7,1))
  49.                 + 6 * Int32.Parse(INNstring.Substring(8,1))
  50.                 + 8 * Int32.Parse(INNstring.Substring(9,1))) % 11) % 10);
  51.             dgt12 = (((
  52.                 3 * Int32.Parse(INNstring.Substring(0,1))
  53.                 + 7 * Int32.Parse(INNstring.Substring(1,1))
  54.                 + 2 * Int32.Parse(INNstring.Substring(2,1))
  55.                 + 4 * Int32.Parse(INNstring.Substring(3,1))
  56.                 + 10 * Int32.Parse(INNstring.Substring(4,1))
  57.                 + 3 * Int32.Parse(INNstring.Substring(5,1))
  58.                 + 5 * Int32.Parse(INNstring.Substring(6,1))
  59.                 + 9 * Int32.Parse(INNstring.Substring(7,1))
  60.                 + 4 * Int32.Parse(INNstring.Substring(8,1))
  61.                 + 6 * Int32.Parse(INNstring.Substring(9,1))
  62.                 + 8 * Int32.Parse(INNstring.Substring(10,1))) % 11) % 10);
  63.         }
  64.         catch { return false; }
  65.         if (Int32.Parse(INNstring.Substring(10,1)) == dgt11
  66.             && Int32.Parse(INNstring.Substring(11,1)) == dgt12) { return true; }
  67.         else { return false; }
  68.     }
  69. }

КПП

  1. /// <summary>
  2. /// проверка КПП по регулярному выражению
  3. /// </summary>
  4. /// <param name="KPPstring">КПП для проверки</param>
  5. /// <returns>true - если проходит проверку, false - если не проходит проверку</returns>
  6. public bool check_KPP(string KPPstring)
  7. {
  8.     return new Regex(@"\d{4}[\dA-Z][\dA-Z]\d{3}").IsMatch(KPPstring);
  9. }

ОГРН

  1. /// <summary>
  2. /// проверка ОГРН по контрольной цифре
  3. /// </summary>
  4. /// <param name="OGRNstring">ОГРН для проверки</param>
  5. /// <returns>true - если проходит проверку, false - если не проходит проверку</returns>
  6. public bool check_OGRN(string OGRNstring)
  7. {
  8.     // является ли вообще числом
  9.     long number = 0;
  10.     try { number = Int64.Parse(OGRNstring); }
  11.     catch { return false; }
  12.  
  13.     // проверка на 13 и 15 цифр
  14.     if (OGRNstring.Length != 13 && OGRNstring.Length != 15) { return false; }
  15.  
  16.     // проверка по контрольным цифрам
  17.     if (OGRNstring.Length == 13) // для юридического лица
  18.     {
  19.         // остаток от деления
  20.         int num12 = (int)Math.Floor(((double)number / 10) % 11);
  21.         int dgt13 = -1;
  22.         // если остаток равен 10, то берём 0, если нет, то берём его самого
  23.         if (num12 == 10) { dgt13 = 0; } else { dgt13 = num12; }
  24.         // ну и теперь сравниваем с контрольной цифрой
  25.         if (Int32.Parse(OGRNstring.Substring(12, 1)) == dgt13) { return true; }
  26.         else { return false; }
  27.     }
  28.     else // для индивидуального предпринимателя
  29.     {
  30.         // остаток от деления
  31.         int num14 = (int)Math.Floor(((double)number / 10) % 13);
  32.         int dgt15 = num14 % 10;
  33.         // ну и теперь сравниваем с контрольной цифрой
  34.         if (Int32.Parse(OGRNstring.Substring(14, 1)) == dgt15) { return true; }
  35.         else { return false; }
  36.     }
  37. }

Готовое приложение

В процессе написания случайно получилось готовое приложение (под Windows, конечно):

Validations screen.png

JavaScript

Допустим, есть какая-то веб-страница с формой, где присутствуют поля ИНН, КПП и ОГРН. Чтобы не дёргать сервер по мелочам, можно выполнить валидацию этих полей с помощью JavaScript, повесив на какой-нибудь onclick, например, следующие функции.

ИНН

  1. function isINNvalid(sender, args) {
  2.     // проверка на число
  3.     if (args.Value.match(/\D/)) {
  4.         //alert("Введённый ИНН не является числом");
  5.         args.IsValid = false;
  6.         return args.IsValid;
  7.     }
  8.     // проверка на 10 и 12 цифр
  9.     if (args.Value.length != 12 && args.Value.length != 10) {
  10.         args.IsValid = false;
  11.         return args.IsValid;
  12.     }
  13.     // проверка по контрольным цифрам
  14.     if (args.Value.length == 10) {
  15.         var dgt10 = String(((
  16.             2 * args.Value[0] + 4 * args.Value[1] + 10 * args.Value[2] +
  17.             3 * args.Value[3] + 5 * args.Value[4] + 9 * args.Value[5] +
  18.             4 * args.Value[6] + 6 * args.Value[7] + 8 * args.Value[8]) % 11) % 10);
  19.         if (args.Value[9] == dgt10) {
  20.             args.IsValid = true;
  21.             return args.IsValid;
  22.         }
  23.         else {
  24.             //alert("Введённый ИНН не прошёл проверку по контрольным цифрам");
  25.             args.IsValid = false;
  26.             return args.IsValid;
  27.         }
  28.     }
  29.     if (args.Value.length == 12) {
  30.         var dgt11 = String(((
  31.             7 * args.Value[0] + 2 * args.Value[1] + 4 * args.Value[2] +
  32.             10 * args.Value[3] + 3 * args.Value[4] + 5 * args.Value[5] +
  33.             9 * args.Value[6] + 4 * args.Value[7] + 6 * args.Value[8] +
  34.             8 * args.Value[9]) % 11) % 10);
  35.         var dgt12 = String(((
  36.             3 * args.Value[0] + 7 * args.Value[1] + 2 * args.Value[2] +
  37.             4 * args.Value[3] + 10 * args.Value[4] + 3 * args.Value[5] +
  38.             5 * args.Value[6] + 9 * args.Value[7] + 4 * args.Value[8] +
  39.             6 * args.Value[9] + 8 * args.Value[10]) % 11) % 10);
  40.         if (args.Value[10] == dgt11 && args.Value[11] == dgt12)
  41.         {
  42.             args.IsValid = true;
  43.             return args.IsValid;
  44.         }
  45.         else {
  46.             //alert("Введённый ИНН не прошёл проверку по контрольным цифрам");
  47.             args.IsValid = false;
  48.             return args.IsValid;
  49.         }
  50.     }
  51. }

КПП

  1. function isKPPvalid(sender, args) {
  2.     if (args.Value.length != 9) {
  3.         //alert("КПП должен представлять собой девятизначный код");
  4.         args.IsValid = false;
  5.         return args.IsValid;
  6.     }
  7.     if (!args.Value.match(/\d{4}[\dA-Z][\dA-Z]\d{3}/)) {
  8.         //alert("КПП не соответствует формату");
  9.         args.IsValid = false;
  10.         return args.IsValid;
  11.     }
  12.     else {
  13.         args.IsValid = true;
  14.         return args.IsValid;
  15.     }
  16. }

ОГРН

  1. function isOGRNvalid(sender, args) {
  2.     var dgt13;
  3.     // проверка на число
  4.     if (args.Value.match(/\D/)) {
  5.         //alert("Введённый ОГРН не является числом");
  6.         args.IsValid = false;
  7.         return args.IsValid;
  8.     }
  9.     // проверка на 13 и 15 цифр
  10.     if (args.Value.length != 13 && args.Value.length != 15) {
  11.         args.IsValid = false;
  12.         return args.IsValid;
  13.     }
  14.     // проверка ОГРН для ЮЛ
  15.     if (args.Value.length == 13) {
  16.         // проверка по контрольным цифрам
  17.         var num12 = args.Value;
  18.         num12 = Math.floor((num12 / 10) % 11);
  19.         if (num12 == 10) { dgt13 = 0; }
  20.         else { dgt13 = num12; }
  21.         if (args.Value[12] == dgt13) {
  22.             args.IsValid = true;
  23.             return args.IsValid;
  24.         }
  25.         else {
  26.             //alert("Введённый ОГРН не прошёл проверку по контрольным цифрам");
  27.             args.IsValid = false;
  28.             return args.IsValid;
  29.         }
  30.     }
  31.     // проверка ОГРН для ИП
  32.     if (args.Value.length == 15) {
  33.         // проверка по контрольным цифрам
  34.         var num14 = args.Value;
  35.         num14 = Math.floor((num14 / 10) % 13);
  36.         var dgt15 = num14 % 10;
  37.         if (args.Value[14] == dgt15) {
  38.             args.IsValid = true;
  39.             return args.IsValid;
  40.         }
  41.         else {
  42.             //alert("Введённый ОГРН не прошёл проверку по контрольным цифрам");
  43.             args.IsValid = false;
  44.             return args.IsValid;
  45.         }
  46.     }
  47. }