<?php


/**
 * Пощенски кодове на държавите
 *
 *
 * @category  bgerp
 * @package   drdata
 *
 * @author    Stefan Stefanov <stefan.bg@gmail.com>
 * @copyright 2006 - 2012 Experta OOD
 * @license   GPL 3
 *
 * @since     v 0.1
 * @title     Задължения по покупки
 */
class drdata_ZipCode
{
    /**
     * Заглавие
     */
    public $title = 'Пощенски кодове';
    
    
    /**
     * Плъгини за зареждане
     */
    public $loadList = 'drdata_Wrapper,plg_Sorting';
    
    
    /**
     * Кой може да го разглежда?
     */
    public $canList = 'admin';
    
    
    public function getCountriesByZipCode($text)
    {
        $zipCodePaterns = array('GB' => "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}",
            'JE' => "JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}",
            'GG' => "GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}",
            'IM' => "IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}",
            'US' => "\d{5}([ \-]\d{4})?",
            'CA' => "[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d",
            'DE' => "\d{5}([ \-]\d{4})?",
            'JP' => "\d{3}-\d{4}",
            'FR' => "\d{2}[ ]?\d{3}",
            'AU' => "\d{4}",
            'IT' => "\d{5}",
            'CH' => "\d{4}",
            'AT' => "\d{4}",
            'ES' => "\d{5}",
            'NL' => "\d{4}[ ]?[A-Z]{2}",
            'BE' => "\d{4}",
            'DK' => "\d{4}",
            'SE' => "\d{3}[ ]?\d{2}",
            'NO' => "\d{4}",
            'BR' => "\d{5}[\-]?\d{3}",
            'PT' => "\d{4}([\-]\d{3})?",
            'FI' => "\d{5}",
            'AX' => "22\d{3}",
            'KR' => "\d{3}[\-]\d{3}",
            'CN' => "\d{6}",
            'TW' => "\d{3}(\d{2})?",
            'SG' => "\d{6}",
            'DZ' => "\d{5}",
            'AD' => "AD\d{3}",
            'AR' => "([A-HJ-NP-Z])?\d{4}([A-Z]{3})?",
            'AM' => "(37)?\d{4}",
            'AZ' => "\d{4}",
            'BH' => "((1[0-2]|[2-9])\d{2})?",
            'BD' => "\d{4}",
            'BB' => "(BB\d{5})?",
            'BY' => "\d{6}",
            'BM' => '[A-Z]{2}[ ]?[A-Z0-9]{2}',
            'BA' => "\d{5}",
            'IO' => 'BBND 1ZZ',
            'BN' => "[A-Z]{2}[ ]?\d{4}",
            'BG' => "\d{4}",
            'KH' => "\d{5}",
            'CV' => "\d{4}",
            'CL' => "\d{7}",
            'CR' => "\d{4,5}|\d{3}-\d{4}",
            'HR' => "\d{5}",
            'CY' => "\d{4}",
            'CZ' => "\d{3}[ ]?\d{2}",
            'DO' => "\d{5}",
            'EC' => "([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?",
            'EG' => "\d{5}",
            'EE' => "\d{5}",
            'FO' => "\d{3}(\d{2})?",
            'GE' => "\d{4}",
            'GR' => "\d{3}[ ]?\d{2}",
            'GL' => "39\d{2}",
            'GT' => "\d{5}",
            'HT' => "\d{4}",
            'HN' => "(?:\d{5})?",
            'HU' => "\d{4}",
            'IS' => "\d{3}",
            'IN' => "\d{6}",
            'ID' => "\d{5}",
            'IE' => '((D|DUBLIN)?([1-9]|6[wW]|1[0-8]|2[024]))?',
            'IL' => "\d{5}",
            'JO' => "\d{5}",
            'KZ' => "\d{6}",
            'KE' => "\d{5}",
            'KW' => "\d{5}",
            'LA' => "\d{5}",
            'LV' => "\d{4}",
            'LB' => "(\d{4}([ ]?\d{4})?)?",
            'LI' => '(948[5-9])|(949[0-7])',
            'LT' => "\d{5}",
            'LU' => "\d{4}",
            'MK' => "\d{4}",
            'MY' => "\d{5}",
            'MV' => "\d{5}",
            'MT' => "[A-Z]{3}[ ]?\d{2,4}",
            'MU' => "(\d{3}[A-Z]{2}\d{3})?",
            'MX' => "\d{5}",
            'MD' => "\d{4}",
            'MC' => "980\d{2}",
            'MA' => "\d{5}",
            'NP' => "\d{5}",
            'NZ' => "\d{4}",
            'NI' => "((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?",
            'NG' => "(\d{6})?",
            'OM' => "(PC )?\d{3}",
            'PK' => "\d{5}",
            'PY' => "\d{4}",
            'PH' => "\d{4}",
            'PL' => "\d{2}-\d{3}",
            'PR' => "00[679]\d{2}([ \-]\d{4})?",
            'RO' => "\d{6}",
            'RU' => "\d{6}",
            'SM' => "4789\d",
            'SA' => "\d{5}",
            'SN' => "\d{5}",
            'SK' => "\d{3}[ ]?\d{2}",
            'SI' => "\d{4}",
            'ZA' => "\d{4}",
            'LK' => "\d{5}",
            'TJ' => "\d{6}",
            'TH' => "\d{5}",
            'TN' => "\d{4}",
            'TR' => "\d{5}",
            'TM' => "\d{6}",
            'UA' => "\d{5}",
            'UY' => "\d{5}",
            'UZ' => "\d{6}",
            'VA' => '00120',
            'VE' => "\d{4}",
            'ZM' => "\d{5}",
            'AS' => '96799',
            'CC' => '6799',
            'CK' => "\d{4}",
            'RS' => "\d{6}",
            'ME' => "8\d{4}",
            'CS' => "\d{5}",
            'YU' => "\d{5}",
            'CX' => '6798',
            'ET' => "\d{4}",
            'FK' => 'FIQQ 1ZZ',
            'NF' => '2899',
            'FM' => "(9694[1-4])([ \-]\d{4})?",
            'GF' => "9[78]3\d{2}",
            'GN' => "\d{3}",
            'GP' => "9[78][01]\d{2}",
            'GS' => 'SIQQ 1ZZ',
            'GU' => "969[123]\d([ \-]\d{4})?",
            'GW' => "\d{4}",
            'HM' => "\d{4}",
            'IQ' => "\d{5}",
            'KG' => "\d{6}",
            'LR' => "\d{4}",
            'LS' => "\d{3}",
            'MG' => "\d{3}",
            'MH' => "969[67]\d([ \-]\d{4})?",
            'MN' => "\d{6}",
            'MP' => "9695[012]([ \-]\d{4})?",
            'MQ' => "9[78]2\d{2}",
            'NC' => "988\d{2}",
            'NE' => "\d{4}",
            'VI' => "008(([0-4]\d)|(5[01]))([ \-]\d{4})?",
            'PF' => "987\d{2}",
            'PG' => "\d{3}",
            'PM' => "9[78]5\d{2}",
            'PN' => 'PCRN 1ZZ',
            'PW' => '96940',
            'RE' => "9[78]4\d{2}",
            'SH' => '(ASCN|STHL) 1ZZ',
            'SJ' => "\d{4}",
            'SO' => "\d{5}",
            'SZ' => "[HLMS]\d{3}",
            'TC' => 'TKCA 1ZZ',
            'WF' => "986\d{2}",
            'YT' => "976\d{2}",
            'AC' => 'ASCN 1ZZ',
            'AF' => "\d{4}",
            'AI' => '2640',
            'AL' => "\d{4}",
            'BL' => "9[78][01]\d{2}",
            'BT' => "\d{5}",
            'BY' => "\d{6}",
            'CA' => "[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d",
            'CO' => "\d{6}",
            'CR' => "\d{4,5}|\d{3}-\d{4}",
            'GI' => 'GX11 1AA',
            'GL' => "39\d{2}",
            'KY' => "KY\d-\d{4}",
            'KZ' => "\d{6}",
            'MF' => "9[78][01]\d{2}",
            'MZ' => "\d{4}",
            'PE' => "(?:LIMA \d|CALLAO 0?)\d|[0-2]\d{4}",
            'SV' => "CP [1-3][1-7][0-2]\d",
            'TA' => 'TDCU 1ZZ',
            'TZ' => "\d{4}",
            'UA' => "\d{5}",
            'VC' => "VC\d{4}",
            'VG' => "VG\d{4}",
            'VI' => "008(([0-4]\d)|(5[01]))([ \-]\d{4})?",
            'VN' => "\d{6}",);
        
        $countries = array();
        
        foreach ($zipCodePaterns as $country => $patern) {
            if (preg_match_all("/{$patern}/", $text, $arr, PREG_PATTERN_ORDER)) {
                $countries[] = $country;
            }
        }
        
        return $countries;
    }
}
