Душан Бошкић
Qualified
Datum učlanjenja: 11.09.2005
Lokacija: 11277 Ugrinovci
Poruke: 109
Hvala: 67
384 "Hvala" u 17 poruka
|
[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 ? 1 : 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] < 1 || $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] == 0 ? 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 < 1 || $n_dan > 31) return false; if ($n_mesec < 1 || $n_mesec > 12) return false; if ($n_godina < 1357 || $n_godina > 2356) return false; //* $a_31 = array(02, 04, 06, 09, 11); 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 % 4 != 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 ...
|