Проверка ИНН, КПП и ОГРН: различия между версиями
Перейти к навигации
Перейти к поиску
ILobster (обсуждение | вклад) (Новая страница: «== Теория == Сначала, что это такое: * [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…») |
ILobster (обсуждение | вклад) (реализация на C#) |
||
Строка 6: | Строка 6: | ||
* [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://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: | Строка 15: | ||
==== ИНН ==== | ==== ИНН ==== | ||
<syntaxhighlight line lang="csharp"> | |||
/// <summary> | |||
/// проверка ИНН по контрольной цифре | |||
/// </summary> | |||
/// <param name="INN">ИНН для проверки</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 = -1; | |||
// если остаток равен 10, то берём 0, если нет, то берём его самого | |||
if (num14 == 10) { dgt15 = 0; } else { dgt15 = num14; } | |||
// ну и теперь сравниваем с контрольной цифрой | |||
if (Int32.Parse(OGRNstring.Substring(14, 1)) == dgt15) { return true; } | |||
else { return false; } | |||
} | |||
} | |||
</syntaxhighlight> | |||
=== JavaScript === | === JavaScript === | ||
Строка 29: | Строка 155: | ||
[[Категория:Продлёнка]] | [[Категория:Продлёнка]] | ||
[[Категория:C | [[Категория:C Sharp]] | ||
[[Категория:JavaScript]] | [[Категория:JavaScript]] |
Версия от 15:11, 1 декабря 2013
Теория
Сначала, что это такое:
- Идентификационный номер налогоплательщика (ИНН);
- Код причины постановки на учёт (КПП);
- Основной государственный регистрационный номер (ОГРН).
Вкратце, суть: эти значения (за исключением КПП) содержат контрольную цифру, по которой можно проверить их корректность. Контрольная цифра вычисляется по формуле, которую затруднительно посчитать в уме не отходя от кассы, потому надо поручить это компьютеру. С КПП всё проще - там просто соответствие регулярному выражению, но мы и это спихнём компу.
Ниже приведены программные решения этой задачи. Индусский код инклюдед.
Практика
C#
ИНН
/// <summary>
/// проверка ИНН по контрольной цифре
/// </summary>
/// <param name="INN">ИНН для проверки</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; }
}
}
КПП
/// <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);
}
ОГРН
/// <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 = -1;
// если остаток равен 10, то берём 0, если нет, то берём его самого
if (num14 == 10) { dgt15 = 0; } else { dgt15 = num14; }
// ну и теперь сравниваем с контрольной цифрой
if (Int32.Parse(OGRNstring.Substring(14, 1)) == dgt15) { return true; }
else { return false; }
}
}