Databáza PSČ, miest, obcí a krajov pre ČR a SK

Zdrojem databáze je česká pošta (zákaznické výstupy) a slovenská pošta (poštovné směrovací čísla) ve formátu Excel/CSV.

Aktualizace: 17.08.2017

Seznam PSČ stáhni zde (pro vložení do databáze - formát SQL):

Použitý skript:

<?php
header
("Content-Type: text/html; encoding=UTF-8");

function
fixCSV($csv) // odstraní uvozovky a new lines
{
   
$csv = preg_replace_callback('~"([^"]+)"~siU', function($m) {
       return
strtr($m[1], array(";" => ",", "\r\n" => " "));
   },
$csv);
   
   return
$csv;
}

require
'db.php';

/*
Kraje jsou doplněny podle počátečních čísel (nepřesné).
Pro přesnost je nutno doplnit z jiné databáze, což nevím kde,
protože na ČSÚ číselníku chybí PSČ (je tam jen kód obce a název obce)
*/
$kraje = array(
   
'1' => 'Hlavní město Praha', // CZ
   
'2' => 'Středočeský',
   
'3' => 'Jihočeský a Západočeský',
   
'4' => 'Severočeský',
   
'5' => 'Východočeský (+část Jihomoravského)',
   
'6' => 'Jihomoravský',
   
'7' => 'Severomoravský',
   
'8' => 'Bratislava a okolí', // SK
   
'9' => 'Západoslovenský a Středoslovenský', // SK
   
'0' => 'Středoslovenský a Východoslovenský', // SK
);

// XSL soubor stáhnete na CeskaPosta.cz, otevřete v Excel a uložte jako CSV
$csv = file_get_contents('cz2.csv');
$csv = iconv('CP1250', 'UTF-8//TRANSLIT//IGNORE', $csv);
$csv = fixCSV($csv);

$lines = explode("\r", $csv);

$first = false;
foreach (
$lines as $line)
{
   if (!
$first) {
       
$first = true;
       continue;
   }
   
   
// Array ( [0] => NAZCOBCE [1] => PSC
       //      [2] => NAZPOST [3] => KODOKRESU [4] => NAZOKRESU [5] => NAZOBCE ) 
   
   
$cols = explode(";", $line);
   foreach (
$cols as &$col) {
       
$col = trim($col);
   }
   unset(
$col);
   
   if (!isset(
$cols[1])) continue;
   
$psc = str_replace(" ", "", $cols[1]);
   if (!
$psc) continue;
   
   
$kraj = isset($kraje[ $psc{0} ]) ? $kraje[ $psc{0} ] : '';
   
   
$ins = array();
   
$ins['psc'] = safeSQL($cols[1]);
   
$ins['mesto'] = safeSQL($cols[5]);
   
$ins['okres'] = safeSQL($cols[4]);
   
$ins['kraj'] = safeSQL($kraj);
   
$ins['stat'] = safeSQL('CZ');
   
   
$db->qinsert("psc", $ins);
}