Získání dat z registru ARES

PHP

POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.

Pokud potřebuje získat data o ekonomických subjektech na základě IČ, určitě se vám bude hodit následující třída, kterou jsem pro tyto potřeby navrhl. Sám ji v jednom programu používám.

Použití třídy je jednoduché:

$ares = new ARES(13245678); // Zadáte IČ
$data = $ares->getData();   // Získáte array s daty

Třída vrací data v tomto formátu:

Array
(
    [name] => Jméno subjektu
    [address] =>  Ulice 12\n Město
    [ic] => 12345678
    [dic] => CZ12345678
    [type] => PO
)

$data[‚type‘] je buďto PO (právnická osoba) nebo FO (fyzická osoba).

Kód trídy:


 *  @license Creative Commons 3.0 
 */

class ARES 
{
    /** @var string */
    private $ares_url = 'http://wwwinfo.mfcr.cz/cgi-bin/ares/ares_es.cgi?jazyk=cz&maxpoc=1&ico=';
    
    /** @var int */
    private $ic;
    
    /**
     *  @param int $ic IČ of subject 
     */
    public function __construct ($ic)
    {
        $this->ic = (int) $ic;
    }
    
    /**
     *  @return array Data
     */
    public function getData () {
        $url = $this->ares_url . $this->ic;
        $xml = $this->getXML($url);
        if ($this->ic == $this->getIcFromXML($xml)) {
            return array (
                'name' => $this->getAddressFromXML($xml),
                'address' => $this->getNameFromXML($xml),
                'ic' => $this->ic,
                'dic' => $this->getDicFromXML($xml),
                'type' => $this->getTypeFromXML($xml)
            );
        }
        return false;
    }
    
    /** 
     * @param string $xml
     * @return string 
     */
    private function getDicFromXML ($xml)
    {
        $pattern = '/dic=([0-9]*)<\/dtt:p_dph>/';
        preg_match($pattern, $xml, $matches);
        return isset($matches[1])?'CZ'.$matches[1]:false;
    }
    
    /** 
     * @param string $xml
     * @return string 
     */
    private function getTypeFromXML ($xml)
    {
        $pattern = '/([0-9]{3})<\/dtt:pf>/';
        preg_match($pattern, $xml, $matches);
        if (isset($matches[1])) {
            return ($matches[1]>=111)?'PO':'FO';
        }
        return false;
    }
    
    /** 
     * @param string $xml
     * @return string 
     */
    private function getIcFromXML ($xml)
    {
        $pattern = '/([0-9]*)<\/dtt:ico>/';
        preg_match($pattern, $xml, $matches);
        return isset($matches[1])?$matches[1]:false;
    }
    
    
    /** 
     * @param string $xml
     * @return string 
     */
    private function getAddressFromXML ($xml)
    {
        $pattern = '/(.*)<\/dtt:ojm>/';
        preg_match($pattern, $xml, $matches);
        return isset($matches[1])?$matches[1]:false;
    }
    
    /** 
     * @param string $xml
     * @return string 
     */
    private function getNameFromXML ($xml)
    {
        $pattern = '/(.*)<\/dtt:jmn>/';
        preg_match($pattern, $xml, $matches);
        return isset($matches[1])?$this->createNormalAddress($matches[1]):false;
    }
    
    /** 
     * @param string $address
     * @return string 
     */
    private function createNormalAddress ($address)
    {
        $address = explode(',', $address);
        krsort($address);
        return implode("\n", $address);
    }
    
    /** 
     * @param string $url 
     * @return string 
     */
    private function getXML ($url) {
        return file_get_contents($url);
    }
}

Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)

Komentáře