Je to IČO?

Pro ušetření práce ostatním zveřejňuji kousek svého kódu (jednu metodu), která zjišťuje, jestli je IČO správné nebo ne. IČO má 8 číslic (starší čísla, která mají menší počet cifer se doplňují zleva nulami), kde poslední číslice je kontrolní. Celý algoritmus je popsán zde, ale lze ho jednoduše vyčíst kódu:

/// <summary>
/// Kontroluje správnost IČO
/// http://blog.vyvojar.cz/topas/
/// </summary>
/// <param name="ico">Identifikační číslo organizace</param>
/// <returns>true, pokud je to číslo validní</returns>
public bool IsICO(string ico)
{
if (ico == null)
throw new ArgumentException("Parameter ico cannot be null.");

ico = ico.Trim();
System.Text.RegularExpressions.Regex reg =
new System.Text.RegularExpressions.Regex(@"\d{8}");
if (reg.IsMatch(ico))
{
int checknum = ico[ico.Length - 1]-48;
int sum = 0;
int result;

for (int index = ico.Length - 2, multiplier=2; index>=0 ; index--,
multiplier++)
{
int num = ico[index] - 48;
sum += num * multiplier;
}

result = 11 - (sum % 11);
if (result >= 10)
result -= 10;

return checknum == result;
}
return false;
}

Nechť slouží. ;)

Zveřejněno 24 August 09 07:09 by topas
Vedeno pod: ,

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS

Komentář

# Karl said on August 25, 2009 8:21 AM:

To se hodí, dík.

# minusminus said on August 25, 2009 12:55 PM:

ufff, to

index—-,

v cykle mi dalo zabrať, kým som zistil, že skopírovaním odtiaľto to VS2008 sa mi tam vložili nejaké iné mínusy

:-)

# topas said on August 25, 2009 5:13 PM:

Ha, bláznivej unicode. :) Už jsem to opravil. Díky.

# PP said on August 25, 2009 11:14 PM:

IČ má právě 8 cifer. Nikoliv 4-8 číslic. viz ČSÚ nebo ARES.

# topas said on August 26, 2009 8:38 AM:

Šlo mi o zpětnou kompatibilitu se stařšími IČO, které 8 číslic nemají. Ale už jsem to upravil, aby to bylo aktuální. Starší IČO se doplní nulami na 8 čísel.

# CW said on August 28, 2009 6:21 PM:

A nestačilo by místo doplňování stringu nulami a použití regulárního výrazu dát

int num;

if(int.TryParse(ico, out num) && num > 0 && num < 100000000)

{

 // TODO: checksumd

}

Vytvoření nového komentáře

(povinný) 
(nepovinný)
(povinný) 
Opiš čísla, která vidíš na obrázku: