Tema: [php] Jmbg
Pogledajte određenu poruku
Staro 21. 10. 2009.   #1
35-68
Душан Бошкић
Qualified
 
Avatar 35-68
 
Datum učlanjenja: 11.09.2005
Lokacija: 11277 Ugrinovci
Poruke: 109
Hvala: 67
384 "Hvala" u 17 poruka
35-68 is on a distinguished road35-68 is on a distinguished road35-68 is on a distinguished road35-68 is on a distinguished road
Pošaljite poruku preko MSN za 35-68 Pošaljite poruku preko Skype™ za 35-68
Post [php] Jmbg

PHP kôd:
<?php
    
/*
    version 0.11
    copyright 35-68 <http://creativecommons.org/licenses/by-nc/3.0/rs/>
    author Dušan Boškić <dusan@boskic.com>
    */

    
class c_JMBG {
        public function 
f_Izvestaj($n_jmbg) {
            if (!
is_numeric($n_jmbg)) return false;
            switch (
strlen($n_jmbg)) {
                case 
13 :
                    
$a_Podaci self::f_Podaci($n_jmbg);
                    if (!
$a_Podaci) return false;

                    
$a_KBroj self::f_KontrolniBroj($n_jmbg);
                    if (!
$a_KBroj) return false;

                    if (
$a_KBroj["K"] == $a_Podaci["K"]) {
                        
$s_Mesec self::$a_Podatak["Mesec"][$a_Podaci["MM"]];
                        
$s_Region self::$a_Podatak["Region"][$a_Podaci["RR"]];
                        if (!
$s_Region) return false;
                        
$n_Pol $a_Podaci["BBB"] > 499 0;
                        return array(
"Dan" => $a_Podaci["DD"], "Mesec" => $s_Mesec"Godina" => $a_Podaci["GGGG"], "Region" => $s_Region"Pol" => $n_Pol);
                    } else {
                        return array(
"Kontrolni broj" => $a_KBroj["K"]);
                    }
                break;

                case 
14 :
                    
$JMBG self::f_JMBG($n_jmbg);
                    if (!
$JMBG) return false;
                    return 
$JMBG;
                break;

                default : return 
false;
            }
        }

        private function 
f_JMBG($n_podaci) {
            
preg_match("@(\d{2})(\d{2})(\d{4})(\d{2})(\d{3})(\d{1})@"$n_podaci$n_broj); //Dan, Mesec, Godina, Region, Broj po redu tog dana, Pol
            
if ($n_broj[5] < || $n_broj[5] > 500) return false;
            
$b_Datum self::f_Datum($n_broj[1], $n_broj[2], $n_broj[3]);
            if (
$b_Datum) {
                
$s_Godina substr($n_broj[3], 1);
                
$s_Broj $n_broj[6] == substr("00".($n_broj[5] - 1), -3) : $n_broj[5] + 499;
                
$a_KBroj self::f_KontrolniBroj($n_broj[1].$n_broj[2].$s_Godina.$n_broj[4].$s_Broj);
                if (!
$a_KBroj) return false;
                return array(
"Dan" => $n_broj[1], "Mesec" => $n_broj[2], "Godina" => $s_Godina"Region" => $n_broj[4], "Jedinstveni broj" => $s_Broj"Kontrolni broj" => $a_KBroj["K"]);
            } else {
                return 
false;
            }
        }

        private function 
f_Podaci($n_jmbg) {
            
preg_match("@(\d{2})(\d{2})(\d{3})(\d{2})(\d{3})(\d{1})@"$n_jmbg$n_broj); //Dan, Mesec, Godina, Region, Broj po redu tog dana, Kontrolni broj
            
$Godina $n_broj[3] > 356 $n_broj[3] + 1000 $n_broj[3] + 2000//1357-2356*
            
$b_Datum self::f_Datum($n_broj[1], $n_broj[2], $Godina);
            if (
$b_Datum) {
                return array(
"DD" => $n_broj[1], "MM" => $n_broj[2], "GGGG" => $Godina"RR" => $n_broj[4], "BBB" => $n_broj[5], "K" => $n_broj[6]);
            } else {
                return 
false;
            }
        }

        private function 
f_Datum($n_dan$n_mesec$n_godina) {
            if (
$n_dan || $n_dan 31) return false;
            if (
$n_mesec || $n_mesec 12) return false;
            if (
$n_godina 1357 || $n_godina 2356) return false//*
            
$a_31 = array(0204060911);
            switch (
$n_dan) {
                case 
31 :
                    if (
in_array($n_mesec$a_31)) return false;
                break;
                case 
30 :
                    if (
$n_mesec == 02) return false;
                break;
                case 
29 :
                    if (
$n_mesec == 02 && $n_godina != 0) return false;
                break;
                default:
                    return 
true;
            }
            return 
true;
        }

        private function 
f_KontrolniBroj($n_jmbg) {
            for (
$n_broj 1$n_broj 13$n_broj++) {
                ${
"n_N{$n_broj}"} = $n_jmbg[$n_broj-1];
            }
            
$n_K 11 - ((7*($n_N1+$n_N7) + 6*($n_N2+$n_N8) + 5*($n_N3+$n_N9) + 4*($n_N4+$n_N10) + 3*($n_N5+$n_N11) + 2*($n_N6+$n_N12)) % 11);
            if (
$n_K == 10) return false//Zbog ovog uslova JMBG je u mnogo slučaja nevalidan
            
return array("K" => $n_K 10 $n_K 0);
        }

        
/*
        http://sr.wikipedia.org/wiki/Јединствени_матични_број_грађана
        http://sh.wikipedia.org/wiki/Jedinstveni_matični_broj_građana
        */
        
public static $a_Podatak = array(
            
"Mesec" => array(
                
"01" => "Januar",
                
"02" => "Februar",
                
"03" => "Mart",
                
"04" => "April",
                
"05" => "Maj",
                
"06" => "Jun",
                
"07" => "Jul",
                
"08" => "Avgust",
                
"09" => "Septembar",
                
"10" => "Oktobar",
                
"11" => "Novembar",
                
"12" => "Decembar"
            
),
            
"Region" => array(
                
"00" => false,
                
"01" => "stranci u BiH",
                
"02" => "stranci u Crnoj Gori",
                
"03" => "stranci u Hrvatskoj",
                
"04" => "stranci u Makedoniji",
                
"05" => "stranci u Sloveniji",
                
"06" => "stranci",
                
"07" => "stranci u Srbiji (bez pokrajina)",
                
"08" => "stranci u Vojvodini",
                
"09" => "stranci na Kosovu",
                
"10" => "Banja Luka",
                
"11" => "Bihać",
                
"12" => "Doboj",
                
"13" => "Goražde",
                
"14" => "Livno",
                
"15" => "Mostar",
                
"16" => "Prijedor",
                
"17" => "Sarajevo",
                
"18" => "Tuzla",
                
"19" => "Zenica",
                
"20" => "Crna Gora",
                
"21" => "Podgorica",
                
"22" => false,
                
"23" => "Budva",
                
"24" => "Podgorica",
                
"25" => false,
                
"26" => "Nikšić",
                
"27" => false,
                
"28" => false,
                
"29" => false,
                
"30" => "Osijek, Slavonija region",
                
"31" => "Bjelovar, Virovitica, Koprivnica, Pakrac, Podravina region",
                
"32" => "Varaždin, Međimurje region",
                
"33" => "Zagreb",
                
"34" => "Karlovac",
                
"35" => "Gospić, Lika region",
                
"36" => "Rijeka, Pula, Istra i Primorje region",
                
"37" => "Sisak, Banovina region",
                
"38" => "Split, Zadar, Dubrovnik, Dalmacija region",
                
"39" => "mešano",
                
"40" => "Makedonija",
                
"41" => "Bitola",
                
"42" => "Kumanovo",
                
"43" => "Ohrid",
                
"44" => "Prilep",
                
"45" => "Skopje",
                
"46" => "Strumica",
                
"47" => "Tetovo",
                
"48" => "Veles",
                
"49" => "Štip",
                
"50" => "Slovenija",
                
"51" => false,
                
"52" => false,
                
"53" => false,
                
"54" => false,
                
"55" => false,
                
"56" => false,
                
"57" => false,
                
"58" => false,
                
"59" => false,
                
"60" => false,
                
"61" => false,
                
"62" => false,
                
"63" => false,
                
"64" => false,
                
"65" => false,
                
"66" => false,
                
"67" => false,
                
"68" => false,
                
"69" => false,
                
"70" => "Centralna Srbija",
                
"71" => "Beograd region (Grad Beograd: Stari Grad, Savski Venac, Voždovac, Vračar, Palilula, Zvezdara, Rakovica, Čukarica, Novi Beograd, Zemun, Mladenovac, Barajevo, Grocka, Obrenovac, Sopot, Lazarevac)",
                
"72" => "Šumadija i Pomoravlje regions (Šumadijski okrug: Aranđelovac, Batočina, Knić, Kragujevac, Rača, Lapovo, Topola), (Pomoravski okrug: Despotovac, Paraćin, Rekovac, Jagodina, Svilajnac, Ćuprija)",
                
"73" => "Niš region (Nišavski okrug: Aleksinac, Svrljig, Niš, Gadžin Han, Doljevac, Merošina, Ražanj), (Pirotski okrug: Babušnica, Bela Palanka, Dimitrovgrad, Pirot), (Toplički okrug: Blace, Žitorađa, Prokuplje, Kuršumlija)",
                
"74" => "Južna Morava region (Jablanički okrug: Leskovac, Vlasotince, Medveđa, Lebane, Bojnik, Crna Trava), (Pčinjski okrug: Vranje, Bujanovac, Surdulica, Bosilegrad, Preševo, Trgovište, Vladičin Han)",
                
"75" => "Zaječar region (Zaječarski okrug: Zaječar, Boljevac, Knjaževac, Sokobanja), (Borski okrug: Bor, Majdanpek, Kladovo, Negotin)",
                
"76" => "Podunavlje region (Podunavski okrug: Smederevska Palanka, Velika Plana, Smederevo), (Braničevski okrug: Veliko Gradište, Kučevo, Petrovac na Mlavi, Požarevac, Žagubica, Golubac, Žabari, Malo Crniće)",
                
"77" => "Podrinje i Kolubara regions (Mačvanski okrug: Loznica, Krupanj, Ljubovija, Šabac, Bogatić, Koceljeva, Vladimirci, Mali Zvornik), (Kolubarski okrug: Valjevo, Lajkovac, Ljig, Ub, Osečina, Mionoca)",
                
"78" => "Kraljevo region (Raški okrug: Kraljevo, Vrnjačka Banja, Novi Pazar, Raška, Tutin), (Moravički okrug: Gornji Milanovac, Čačak, Ivanjica, Lučani), (Rasinski okrug: Aleksandrovac, Brus, Kruševac, Trstenik, Varvarin, Ćićevac)",
                
"79" => "Užice region (Zlatiborski okrug: Arilje, Bajina Bašta, Kosjerić, Nova Varoš, Požega, Priboj, Prijepolje, Sjenica, Užice, Čajetina)",
                
"80" => "Novi Sad region (Južnobački okrug: Bač, Bačka Palanka, Bački Petrovac, Vrbas, Žabalj, Novi Sad, Srbobran, Sremski Karlovci, Temerin, Titel, Bečej, Beočin)",
                
"81" => "Sombor region (Zapadnobački okrug: Apatin, Kula, Odžaci, Sombor)",
                
"82" => "Subotica region (Severnobački okrug: Bačka Topola, Subotica, Mali Iđoš)",
                
"83" => false,
                
"84" => false,
                
"85" => "Zrenjanin region (Srednjebanatski okrug: Zrenjanin, Nova Crnja, Novi Bečej, Sečanj, Žitište)",
                
"86" => "Pančevo region (Južnobanatski okrug: Alibunar, Bela Crkva, Vršac, Kovačica, Kovin, Pančevo, Opovo, Plandište)",
                
"87" => "Kikinda region (Severnobanatski okrug: Ada, Kikinda, Kanjiža, Novi Kneževac, Senta, Čoka)",
                
"88" => "Ruma region (Sremski okrug: Inđija, Pećinci, Ruma, Sremska Mitrovica, Stara Pazova, Šid, Irig)",
                
"89" => "Sremska Mitrovica region (Sremski okrug: Inđija, Pećinci, Ruma, Sremska Mitrovica, Stara Pazova, Šid, Irig)",
                
"90" => "Kosovo i Metohija",
                
"91" => "Priština region (Kosovski okrug: Priština, Obilić, Podujevo, Štrpce, Lipljan, Glogovac, Kačanik, Kosovo Polje, Uroševac, Štimlje)",
                
"92" => "Kosovska Mitrovica region (Kosovsko Mitrovački okrug: Kosovska Mitrovica, Zvečan, Leposavić, Zubin Potok, Vučitrn, Srbica)",
                
"93" => "Peć region (Pećki okrug: Peć, Istok, Klina)",
                
"94" => "Đakovica region (Pećki okrug: Dečani, Đakovica)",
                
"95" => "Prizren region (Prizrenski okrug: Gora-Dragaš, Orahovac, Prizren, Suva Reka)",
                
"96" => "Kosovsko Pomoravski okrug: (Gnjilane, Kosovska Kamenica, Vitina, Novo Brdo)",
                
"97" => false,
                
"98" => false,
                
"99" => false
            
)
        );
    }

    
//Primer:
    /*
        DD => 01-31                     Dan
        MM => 01-12                     Mesec
        GGGG => 1357-2356               Godina
        RR => 00-99                     Region
        BBB => 001-500                  Broj
        P => 0-1 (0-Muški, 1-Ženski)    Pol

        @input string DDMMGGGGRRBBBP
        @output array  [JMBG]
    */
    
print_r(c_JMBG::f_Izvestaj("01012010710011")); //Prvo žensko dete rođeno 01.01.2010. godine u Beogradu
    /*
        DD => 01-31                     Dan
        MM => 01-12                     Mesec
        GGG => 000-999                  Godina
        RR => 00-99                     Region
        BBB => 000-999                  Jedinstveni broj
        K => 0-9                        Kontrolni broj

        @input string DDMMGGGRRBBBK [JMBG]
        @output array
    */
    
print_r(c_JMBG::f_Izvestaj("0101010715009")); //Reverse JMBG :)
?>
Bilo i pre (samo je nestalo), prihvaćene sugestije dragog tate
__________________
In brightest day, in blackest night ...
35-68 je offline   Odgovorite uz citat
2 članova zahvaljuje 35-68 za poruku: