Tomáš Piňos
26.10.2009

Hledání země nezemě



Kódy zemí, měn, bank, názvy měst a vesnic, poštovní směrovací čísla… Většina aplikací pracuje s nějakými číselníky. Kde ale vzít jejich hodnoty a nekrást? V tomto blogu chci projít a stručně charakterizovat zdroje, které jsem pro potřeby nedávného projektu našel a které se mi osvědčily. 

Zkusme napřed pojmenovat možné způsoby, jak získat data pro číselníky na novém projektu.

  • Přebírání číselníků ze staršího projektu, programu, firmy, … – asi nejrozšířenější praktikou je vzít data tam, kde už jsme je jednou připravili. Může to být jiný projekt, naše internetové bankovnictví, nebo třeba náš účetní systém. Je to správné a legální? Dá se takový postup snadno zopakovat? Jak řešit aktualizace dat?
  • Placený zdroj dat – některé číselníky si můžeme koupit. Existují dodavatelé, kteří se na přípravu a aktualizaci číselníkových dat specializují.
  • Volně dostupné zdroje dat na internetu – mnohé číselníky neobsahují data, o kterých by se dalo mluvit jako o cenných. Náročný bývá spíše způsob, jak jejich hodnoty zkompilovat a udržovat. Proto je přirozená myšlenka hledat pro číselníky volně dostupné zdroje dat. Existuje jich mnoho, na některé se zaměřím.

Ve zbytku příspěvku se budu věnovat právě několika dostupným zdrojům dat pro číselníky zemí, bank, měn, měst, ulic, PSČ a adres.

Země

Pro číselník zemí existuje standard ISO 3166. Standard má tři části, číselníku zemí odpovídá ISO 3166-1 (dvouznakové kódy, pro Českou republiku je to ČR). Další dvě části standardu popisují jemnější členění zemí a země vyřazené z číselníku. Na typickém projektu není důvod tento standard nepoužít.

  • ISO – Přímo na stránkách ISO organizace se dají najít číselníky zemí v angličtině a francouzštině. Bohužel jen v upper case.
  • Český statistický úřad – Na stránkách ČSÚ je možné volně stáhnout xls soubor s daty odpovídajícími normě ISO 3166-1. Číselník obsahuje kódy předepsané standardem, plný a zkrácený český název a plný anglický název.

Na posledním projektu jsme použili data z ČSÚ. Xls soubor jsme zkonvertovali do csv a pak už jej jednoduchým skriptem transformovali do formátu, kterým plníme databázi. To je postup, který se dá snadno zopakovat a v případě potřeby i automatizovat. I když to asi v případě číselníku zemí není nutné.

Banky a měny

Dalšími typickými číselníky jsou seznamy bank registrovaných v České republice a seznam měn. Pro měny opět existuje ISO standard – ISO 4217. Definuje tříznakové kódy, kde první dva znaky odpovídají číselníku zemí definovanému standardem ISO 3166-1. Nevidím důvod, proč se i pro číselník měn nepřidržet tohoto standardu (pokud potřebujeme všechny) .

  • Český statistický úřad – ČSÚ je dobrým zdrojem i pro číselník měn. Na uvedeném odkazu se dá specifikace stáhnout jako xls nebo pdf soubor. Xls soubor je snado převoditelný do csv, které už se dá vhodným skriptem rychle zpracovat.
  • Česká národní banka – Obsahově správným zdrojem dat pro číselník bank je určitě ČNB. Ke stáhnutí je zde k dispozici pdf soubor, který se zpracovává hůř, ale možné to je.

Nabízí se i možnost „převzít“ číselník bank z vašeho oblíbeného internetového bankovnictví. Otázkou je, nakolik je to správné a kolik toho vaše svědomí snese.

Města, ulice, PSČ, adresy, …

Poslední skupinou číselníků, které se budu věnovat, jsou města, ulice, PSČ a adresy. Od těchto číselníků si typicky slibujeme provázanost, aktuálnost dat a také možnost aktualizovatelnosti dat. V bankovním prostředí je častý požadavek na ověření existence a správnosti adresy (např. u scoring systémů, kde je zákazník s existující adresou jistě důvěryhodnější).

  • Česká pošta – Česká pošta nabízí placený číselník adres. Zmiňuji ho jako alternativu k UIR-ADR (viz níže), ale protože jsem na stránkách pošty nenašel možnost stažení vzorku dat, jeho hodnocení se vyhnu.
  • Český statistický úřad – Několik číselníků měst a PSČ nabízí i ČSÚ. Vždy ale plní nějaký statistický účel (např. sčítání obyvatelstva) a jako obecné číselníky se mi neosvědčily.
  • UIR-ADR: Územně identifikační registr adres – Překvapivě kvalitní a volně dostupnou databázi adres spravuje česká státní správa, konkrétně Ministerstvo práce a sociálních věcí.
UIR-ADR - datový model
Datový model registru UIR-ADR (zjednodušený, pouze některé tabulky)

Registr UIR-ADR toho nabízí mnoho:

  • Typy dat – UIR-ADR obsahuje číselníky okresů, obcí, částí obce, ulic, stavebních objektů, adresních míst, adresních pošt, pražských obvodů, městských částí/městských obvodů, oblastí, krajů, správních obvodů a některé další typy dat.
  • Prohlížení registru na webu – jednoduchá webová aplikace pro prohlížení registru. Webová služba pro ověřování adres v registru – UIR-ADR poskytuje webovou službu pro ověřování adres. Služba je volně dostupná, ale vyžaduje nejprve registraci.
  • Možnost udržovat si vlastní kopii registru – zdarma si lze objednat CD s instalací UIR-ADR. Instalace znamená vytvoření instance MS SQL s daty a windows prohlížečkou, nebo inicializaci dat v jiné databázi. CD obsahuje data registru v šesti různých databázových formátech (dBase, FoxPro, Oracle, MS SQL Server, SQL_92, CSV).
  • Aktualizace registru zdarma – v případě udržování vlastní kopie jsou volně k dispozici aktualizace registru (údajně připravované 1x týdně, ale to jsem neověřoval).

Na novém projektu bych rozhodně zvolil vlastní kopii UIR-ADR. Vím o několika bankách a dalších firmách, které registr používají. Standardizace dat podle registru UIR-ADR je trend, takže je tu dobrá šance, že v případě integrace a výměny adresních dat budete mít štěstí a adresy půjdou snadno porovnávat. Poslední poznámka se týká ověřování adres – nesmíme zapomenout, že zde neplatí předpoklad uzavřeného světa. Absence adresy v registru ještě nemusí zaručeně znamenat, že adresa skutečně neexistuje.

Shrnutí

Příspěvek si kladl za cíl nabídnou několik osvědčených zdrojů dat pro různé číselníky. Řešili jste někdy na projektu zdroje dat pro číselníky? Jakou cestou jste se vydali? Podělte se o své zkušenosti v diskuzi pod článkem.

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další
  • Martin Javorek

    K územním číselníkům jen doplnění: ČSÚ je podle všeho garantem těchto územních číselníků (http://www.czso.cz/csu/rso.nsf/i/co_je_rso), nicméně je potřeba se prohryzávat jejich DBF soubory v prehistorickém kódování a denormalizovaných pohledech (http://www.czso.cz/csu/rso.nsf/i/prohlizec_uir_zsj). Část, která se týká samotného územního registru přešla v roce 2004 právě pod MPSV. UIR-ADR vznikl primárně na empirických datech. Jednou týdně se opravdu seberou došlá data z jednotlivých úřadů, které evidují, kde která ulice vznikla, kde bylo přiděleno číslo popisné a který dům zbourali, co bylo do systému zadáno chybně a co se opravilo. Vzhledem k tomu, že UIR-ADR již existuje 5 let, hodně se to blíží tomu "otevřenému světu" a tedy sice nelze kontrolu adres vynutit, ale lze uživateli hodně doporučovat, aby se tímto registrem řídil. K UIR-ADR web services - (http://forms.mpsv.cz/uir/popis/popis.jsp), existuje tam omezení na 1 dotaz/s a 360 dotazů/hod, tedy pro větší projekty opravdu lepší mít registr lokálně + automatické aktualizace. Dále mě pak napadá ARES pro ověření IČ: http://wwwinfo.mfcr.cz/ares/ares.html Z dalších zajímavých číselníků např. katastrální: http://www.cuzk.cz/Dokument.aspx?PRARESKOD=10&MENUID=10015&AKCE=DOC:10-CISELNIKY_ISKN Na závěr pak jen zmínit Dálkový přístup do katastru (web services): http://www.cuzk.cz/Dokument.aspx?PRARESKOD=998&MENUID=0&AKCE=DOC:10-WSDP. Nicméně se jedná o placenou službu.

  • Martin Javorek

    Tak se dívám, že příliš mnoho formátování se tady komentáři protlačit nedá. Zkusil jsem pouze odřádkování pro lepší čitelnost, ale ani to mi neprošlo...

  • Bena

    Diagram v JPEGu ? WTF ?

  • uf

    Skoda, ze registr adres nepouzivaji exekutori, urady a spol. Pak by jako Nova zjistili, ze na adrese firmy nic neni.

  • uf

    Jeste jeden namet: Kdysi byla prace zjistit, jak se kontroluje rodne cislo a bankovni ucet. Po letech byla silena prace zjistit, jak se kontroluje cislo pojistence (obe cisla jsou paskvil). S IBANem to bylo lepsi. Cislo pojistence mi nerekli ani informatici zdravotnich pojistoven a socialniho zabezpeceni.

  • Martin: Upravil jsem skript co generuje komentáře, aby dělal aspoň základní odřádkování. Doufám že se tím čitelnost trochu zlepší. Bena, Tomáš: Schéma má být v GIFu, přinejhorším v PNG. Říkám to furt dokola, ale jak vidno, moje námitky nepadají na úrodnou půdu. JPG je zřejmě oblíbeným formátem většiny programátorů :-/

  • Jo a ještě jedna poznámka k tomu co psal Martin - podle mého názoru je rozumné mít lokálně všechny číselníky. Dělat při každém použití dotaz na vzdálený server mi připadá jako úplný nesmysl - mělo by to neblahý vliv jak na rychlost aplikace, tak na její dostupnost a mohl by nastat dokonce problém s bezpečností. Na bezpečnost je ostatně nutné dávat pozor i při automatické aktualizaci. Je to integrace jako každá jiná, takže i když jde třeba o data z ČNB, nikde není záruka že stahovaný číselník opravdu obsahuje to co má a ne například škodlivý kód.

  • Tomáš Piňos

    @Richard Dobrá poznámka, souhlasím - ale jenom tam, kde je to možné. Diskutovaná webová služba slouží k _ověřování_ adres - to je potenciálně složitější úloha než jenom práce s číselníky. Na českém projektu, s českými adresami, je to dobře možné například s lokální kopií registru UIR-ADR. Představíme-li si ale požadavek na ověřování adres třeba v Rusku, mluvíme najednou o úplně jiných objemech dat. Pracoval jsem na několika "ruských" projektech, kde bylo běžné ověřovat adresy vzdáleně v registru KLADR (http://eng.r10.kadastr.ru/kladr_r/kladr/). Možná existují podobné služby i jinde, tím jsem se nezabýval.

  • Tomáš Piňos

    @Bena, @Richard Kdysi mě překvapilo, že existuje i jiné jídlo než v plechovkách, dnes mě překvapilo, že existují i jiné formáty než JPG. Příště na tom zapracuju. Prosím zpátky k číselníkům...

  • Tomáš: Chápu co máš na mysli, ale pro vývojáře webové aplikace ověření adresy nemusí být nutně složitější úloha než třeba vypsání selectu, záleží na tom co je zač ta vzdálená služba. Pokud tam hodíš dotaz typu "existuje tato adresa?" a ono to vrátí buď "existuje" nebo "neexistuje" tak není co řešit a máš to zadarmo. Na druhou stranu, dokážu si představit "umělce", který při každém requestu stáhne ze vzdáleného serveru stomegovou databázi adres kvůli ověření, zda jeho adresa existuje.

  • uf

    Jak tedy resite obecne algoritmy, jako je kontrola rodneho cisla, cisla pojistence, uctu, IBANu atd. ?

  • @uf Dá se říct, že se obecně takovým validacím snažíme vyhnout, protože u některých atributů je specifikace jejich formátu opravdu problém a často se vyskytují výjimky. Vždy kontrolujeme "strukturu" daného atributu - např. rč musí být ve tvaru 6 číslic / 4 číslice. Tam, kde je to možné, hodnoty ověřujeme v nějakém "důvěryhodném" registru. Např. IČO se dá dobře ověřit přímo v obchodním rejstříku (mají na to webovou službu). Mezi možnostmi "volnější validace" a "nemohu zadat tuto konkrétní bizarní hodnotu" zákazník raději volí volnější validace.

  • Martin Javorek

    Existuje něco jako IS o ISVS (IS o IS veřejné správy) a ISDP (IS o datových prvcích). http://www.mvcr.cz/clanek/vyhlaska-c-469-2006-sb-o-informacnim-systemu-o-datovych-prvcich.aspx Například zde https://www.sluzby-isvs.cz/ISDP/ je možno celkem hezky prozkoumat největší zákoutí běžně užívaných datových prvků - včetně např. regulárních výrazů pro jejich validaci nebo oficiálních číselníků Nicméně jak už psal Tomáš, je potřeba dávat pozor, protože např. o duplicitních a chybných RČ se tam už nepíše, ale takoví lidi mezi námi bohužel jsou (není jich málo), obvykle za to nemohou a není důvod, proč by si nemohli zřídit pojistku nebo otevřít účet v bance. Validace by měly být v některých ohledech měkké, např. s varováním, že něco není v pořádku - zda se uživatel nepřeklepl apod.

  • uf

    Diky za info, hosi. Uz jsem asi dlouho nepotreboval nic hledat, ale tohle s klukama prolezeme. Za to vam reknu perlicku: V jedne bance smichali do jednoho registru rodna cisla, ICOa a cisla pojistence a jeste je upravovali mluvicim zpusobem. Bylo z toho dobre sado-maso.

  • Martin Javorek

    To mě vůbec nepřekvapuje. Po tom, co moje sestra (jmenuje se stejně jako má žena, ale tím podobnost zcela končí) zjistila, že má 2 zaměstnavatele a je k tomu navíc těhotná... (zdravotní pojišťovny slily dohromady 2 zcela rozdílné osoby jen na základě stejného jména).