Portál AbcLinuxu, 25. května 2024 00:41

Kontrola IČ

21.10.2008 19:58 | Přečteno: 11223×

Aneb kterak ověřiti platonost iča

Nedávno jsem zjistil, že jediný mě známý „oficiální“ popis toho algoritmu na webu vnitra zmizel. V rámci redesignu se ztratil buď odkaz, nebo celý dokument. Po troše hledání jsem nalezl ještě lepší zdroj. Je srozumitelnější a jako bonus je tam popsaná i kontrola příčetnosti rodného čísla. Proto informací lačný čtenár udělá nejlépe když zamíří rovnou na http://latrine.dgx.cz/jak-overit-platne-ic-a-rodne-cislo

Kdyby snad latrinu měl postihnout osud mvcr.cz, tady je kód v pythonu, tak jak jsem ho před pěti minutami zbastlil:

def checkICO(ico):
    if len(ico) > 8:
        return "icoTooLong"
    try:
        digits = map(int, list(ico.rjust(8, "0")))
    except ValueError:
        return "icoNotNumber"
    remainder = sum([digits[i]*(8-i) for i in range(7)]) % 11
    cksum = {0:1, 10:1, 1:0}.get(remainder, 11-remainder)
    if digits[7] != cksum:
        return "icoBadChecksum"
Ještě by to uneslo kontrolu na příliš krátké IČ, leč nemám tušení kolik by to tak mohlo být.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

21.10.2008 20:34 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Kontrola IČ
Odpovědět | Sbalit | Link | Blokovat | Admin
Na vnitru to pořád funguje. Nevím, jak jsi to dělal předtím, ale já už několik měsíců používám XML služby Ares (odkaz). Nejen že mi to pro špatné IČ řekne, že je špatné, ale zároveň se dozvím o subjektu co potřebuji (adresu, jestli je třeba v insolvenčním rejstříku, ...). Úspěšně používám jak v PHP, tak v SAPu.
21.10.2008 20:45 miro
Rozbalit Rozbalit vše Re: Kontrola IČ
Myslím, že bylo myšleno prosté (offline) aritmetické ověření kontrolní číslice IČa.
22.10.2008 08:29 skonciljsem | skóre: 20
Rozbalit Rozbalit vše Re: Kontrola IČ
Jemu jde o ověření "kontrolního součtu". Pokud ale jde o živnostníky, nikdo rozumný nepoužije Ares (s chybami), ale Živnostenský rejstřík MPO, kam to také patří.
22.10.2008 09:14 letec
Rozbalit Rozbalit vše Re: Kontrola IČ
leste napsal: ...nikdo rozumný nepoužije Ares (s chybami), ale Živnostenský rejstřík MPO...

Živnostenský rejstřík je také s chybami a navíc tam nejsou osoby podnikající podle tzv. zvláštních předpisů...
22.10.2008 11:42 Roman Schulz | skóre: 8 | Brno
Rozbalit Rozbalit vše Re: Kontrola IČ
Nedávno jsem řešil stejný problém v C++ a popis na la trine mi celkem pomohl pro zorientování se. Nicméně jsem si stáhl dokument z ministerstva vnitra kde byly všechny identifikační čísla solidně popsány, byly tam různé IBAN, RČ, DIČ a stovky dalších..
rADOn avatar 22.10.2008 13:16 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Kontrola IČ
A prozradis odkud, nebo je to přísně tajné ?
"2^24 comments ought to be enough for anyone" -- CmdrTaco
12.2.2010 10:04 compekon
Rozbalit Rozbalit vše Re: Kontrola IČ
Když užsi zkontrolujete ič tak už nyní můžete i nově k ič získat online logo http://www.logobox.cz
21.10.2008 21:22 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Kontrola IČ
Odpovědět | Sbalit | Link | Blokovat | Admin
Tohle je v pohodě. Mnohem „zajímavější“ je číslo bankovního účtu ;)
21.10.2008 21:23 Jakub
Rozbalit Rozbalit vše Re: Kontrola IČ
Odpovědět | Sbalit | Link | Blokovat | Admin
Konrola IČ a rodného čísla v PHP: latrine.dgx.cz/jak-overit-platne-ic-a-rodne-cislo
21.10.2008 21:26 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Kontrola IČ
Zajímavý způsob, jak dát najevo, že jste zápisek v blogu vůbec nečetl…
21.10.2008 21:43 Ignor
Rozbalit Rozbalit vše Re: Kontrola IČ
Ano, ale zajímavou alternativou je také http://latrine.dgx.cz/jak-overit-platne-ic-a-rodne-cislo.
21.10.2008 22:49 JS
Rozbalit Rozbalit vše Re: Kontrola IČ
Odpovědět | Sbalit | Link | Blokovat | Admin
bohate staci:

cksum = (11-remainder) % 10
22.10.2008 09:17 letec
Rozbalit Rozbalit vše Re: Kontrola IČ
Nestačí.
rADOn avatar 22.10.2008 13:08 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Kontrola IČ
Muzes to trochu rozvest ? Protoze jak tak na to koukam zda se mi, ze je to totez.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
25.11.2008 16:08 kaga
Rozbalit Rozbalit vše Re: Kontrola IČ
Odpovědět | Sbalit | Link | Blokovat | Admin

http://aplikace.mvcr.cz/archiv2008/casopisy/kriminalistika/1999/9903/rak.html

:

Rodné číslo (RČ)
v sobě obsahuje poslední dvojčíslí z roku narození osoby, měsíc a den narození, pohlaví, koncovku rodného čísla - „pořadové číslo“ narození v daném dni a na její poslední, čtvrté pozici kontrolní číslici (obr. 1). U žen je k měsíci narození přičítána číselná konstanta 50. Kontrolní číslice je v praxi využívána u osob narozených po roce 1954.
obrázek 1 
Princip prověrky rodného čísla pomocí kontrolní číslice je založen na matematické operaci modulo 11 (což je celočíselný zbytek dělení čísla konstantou jedenáct). Hodnota kontrolní číslice (umístěná na poslední pozici) v uvedeném příkladě je 6. Z rodného čísla si odmyslíme lomítko (popřípadě jakékoliv další případné separátory) a poslední znak (samotnou kontrolní číslici). V našem případě X=616225638. Číslo vydělíme jedenácti. Výsledek zaokrouhlíme na celé číslo, vždy směrem dolů. Zjistíme celočíselný zbytek dělení čísla X konstantou 11 a označíme jej jako vypočítanou hodnotu kontrolní číslice. Tu pak porovnáme s hodnotou kontrolní číslice uvedené na poslední pozici rodného čísla. Jsou-li obě hodnoty shodné, rodné číslo je v pořádku. Liší-li se, rodné číslo je chybné a došlo v něm k nekorektní změně. Rodné číslo lze tedy interpretovat číselně jako rovnici:
616225638 = 56020512 * 11 + 6 (vypočtená hodnota kontrolní číslice)
V praxi se může stát, že celočíselný zbytek po dělení jedenácti má hodnotu 10. Protože ale desítka zaujímá dvě pozice a kontrolní číslici je vymezena vždy jen jedna pozice (s jediným fyzickým znakem), je nutno tento rozpor odstranit. V případě rodného čísla se to řeší tak, že kontrolní číslici je přiřazena hodnota A. V ostatních algoritmech používaných pro jiné objektové identifikátory to může být jeden libovolný, nečíselný znak - např. písmeno X apod.
Zajímavou vlastností je zaručená celočíselná dělitelnost celého rodného čísla konstantou 11: například 6162256386/11=560205126. Tuto vlastnost nemůžeme ale přímo aplikovat, končí-li rodné číslo písmenem A. (Pozn.: Chceme-li se v praxi vyvarovat písmen jako hodnot kontrolní číslice, používáme modulo 10. Tato kontrola je typická pro bankovní karty Mastercard, Visa, Amex, Diners Club, Discover, JCB.)
Identifikační číslo organizace (IČO)
je dalším v praxi často používaným objektovým identifikátorem, využívajícím kontrolního mechanismu nazývaného „addo modulo“.
 
Výpočet pro osmimístné IČO je rovněž jednoduchý. Očíslujeme jednotlivé pozice IČO směrem zleva doprava, od jedné do osmi. Číselnou hodnotu každé pozice i vynásobíme číslem 9 - i. Sečteme vzniklé součiny odpovídající pozicím 1 až 7. K součtu připočteme hodnotu poslední osmé pozice (kontrolní číslice). Je-li její hodnota nula, připočítáváme konstantu 10. Na konečný součet provádíme operaci modulo 11.
 
 
zbytek = (1*8 + 0*7 + 4*6 + 8*5 + 2*4 + 2*3 + 4*2 + 5) mod 11 = 99 mod 11 = 0
99 = 9*11 + 0
IČO je korektně zapsané pouze tehdy, je-li konečný součet násobkem jedenácti. Modulo 11 má tedy hodnotu 0 (zbytek = 0).
 
25.11.2008 16:11 kaga
Rozbalit Rozbalit vše Re: Kontrola IČ

Jo... ale pozor na RČ kde je měsíc +20 nebo +70 (tuším cizinci s trvalým pobytem), pak koncovka musí začínat 6 nebo vyšší číslicí... U nás se RČ s A tuším nepřidělovala, zato se přidělovala s 0 .... takže dělitelno 11 nebo zbytek z dělení 11ti = 10. :-D

30.10.2009 10:25 David
Rozbalit Rozbalit vše Re: Kontrola IČ
Odpovědět | Sbalit | Link | Blokovat | Admin
Vzdyt je to blbe :-(

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.