[ DusanSukovic @ 07.04.2015. 23:45 ] @
Ima li neko algoritam za proveru JMBG broja, ili jos bolje Java source code za proveru JMBG? hvala! |
[ DusanSukovic @ 07.04.2015. 23:45 ] @
[ Texas Instruments @ 08.04.2015. 10:34 ] @
[ DusanSukovic @ 08.04.2015. 12:45 ] @
Bravo TI, koristio sam pretragu, ali na ovo zaboravih , ovaj code u .NET obecava ,samo da ga pokusam preraditi u Java:
Code: Code: private bool provjeriJMBG( string jmbgUnos) { if ( jmbgUnos.Length == 13) // provjera duzine unosa ... { int[] danaUmjesecu = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; char[] niz = jmbgUnos.ToCharArray(0, 13); // pretvori u niz karaktera // prvo provjera unosa godine rodjenja char[] godinaRodjenja = jmbgUnos.ToCharArray(4, 3); // izvuci cifre koje se odnose na godinu rodjenja int pomGodina = 100 * (Convert.ToInt32(godinaRodjenja[0] - '0')) + 10 * (Convert.ToInt32(godinaRodjenja[1] - '0')) + Convert.ToInt32(godinaRodjenja[2] - '0'); // napravi godinu rodjenja if (godinaRodjenja[0] == '0') // neko ko je rodjen u XXI vijeku ... pomGodina += 2000; else pomGodina += 1000; // ko je rodjen u XX vijeku if (pomGodina < 1900) // trenutno, godina ne moze biti manja od 1900-e ! { MessageBox.Show("Unesena godina rodjenja manja od 1900-e godine !!!"); return false; } else { if (pomGodina > DateTime.Now.Year) // niti veca od tekuce godine ! { MessageBox.Show("Unesena godina rodjenja veca od tekuce godine !!!"); return false; } } // provjera unosa mjeseca rodjenja char[] mjesecRodjenja = jmbgUnos.ToCharArray(2, 2); // izvuci cifre koje se odnose na mjesec rodjenja int pomMjesec = 10 * (Convert.ToInt32(mjesecRodjenja[0] - '0')) + Convert.ToInt32(mjesecRodjenja[1] - '0'); if (pomMjesec > 12 || pomMjesec < 1) // mjesec mora biti <= 12 i > 0 { MessageBox.Show("Pogresno unesen mjesec rodjenja (treca i cetvrta cifra) !!!"); return false; } // provjera da li godina prestupna (zbog broja dana u mjesecu) if (((pomGodina % 4) == 0) && (((pomGodina % 100) != 0) || ((pomGodina % 400) == 0))) // prestupna godina { danaUmjesecu[1] = 29; // koriguj broj dana za februar } // provjera unosa dana po mjesecu ... char[] danRodjenja = jmbgUnos.ToCharArray(0, 2); int pomDan = 10 * (Convert.ToInt32(danRodjenja[0] - '0')) + Convert.ToInt32(danRodjenja[1] - '0'); if (pomDan > danaUmjesecu[pomMjesec - 1] || pomDan < 1) { MessageBox.Show("Pogresno unesen dan rodjenja (prva i druga cifra) !!!"); return false; } int zbir = 0; // formula za racunanje kontrolnog zbira ... for (int i = 0; i < 6; i++) zbir += (7 - i) * (Convert.ToInt32(niz[i] - '0') + Convert.ToInt32(niz[6 + i] - '0')); int ostatak = zbir % 11; // ostatak dijeljenja zbira sa 11 int razlika = 11 - ostatak; // razlika // kontrola if (ostatak == 1)// ako je ostatak 1, JMBG je POGRESAN ! { MessageBox.Show("Unijeti maticni broj NIJE ispravan ! (Ostatak=1)"); return false; } else if (ostatak == 0) // ako je Ostatak=0, i kontrolna cifra=0, JMBG je ispravan { if (Convert.ToInt32(niz[12] - '0').Equals(0)) { MessageBox.Show("Unijeti maticni broj je ISPRAVAN !(ostatak=0,kontrolna cifra=0)"); return true; } else { MessageBox.Show("Unijeti maticni broj NIJE ispravan !(ostatak=0,kontrolna cifra!=0)"); return false; } } else if (razlika == (niz[12] - '0')) { MessageBox.Show("Unijeti maticni broj je ISPRAVAN !(razlika=kontrolna cifra)"); return true; } else { MessageBox.Show("Unijeti maticni broj NIJE ispravan !(razlika!=kontrolna cifra)"); return false; } } else { MessageBox.Show("JMBG mora biti dugacak 13 karaktera!!! \r\n Unesite JMBG ponovo"); return false; } } [ DusanSukovic @ 08.04.2015. 13:06 ] @
Koji je ekvivalent ovih recenica u Javi?
Code: char[] niz = jmbgUnos.ToCharArray(0, 13); Code: int pomGodina = 100 * (Convert.ToInt32(godinaRodjenja[0] - '0')) Code: char[] mjesecRodjenja = jmbgUnos.ToCharArray(2, 2); Code: if (Convert.ToInt32(niz[12] - '0').Equals(0)) [ abyss @ 08.04.2015. 13:21 ] @
Code: public static boolean isJMBGOk(String jmbg) { String s = ""; String input = jmbg.substring(0, jmbg.length() - 1); int i = 0, i1 = 0, diff = 0; i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(0))).intValue() * 7); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(1))).intValue() * 6); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(2))).intValue() * 5); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(3))).intValue() * 4); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(4))).intValue() * 3); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(5))).intValue() * 2); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(6))).intValue() * 7); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(7))).intValue() * 6); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(8))).intValue() * 5); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(9))).intValue() * 4); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(10))).intValue() * 3); i = i + (Integer.valueOf(String.valueOf(jmbg.charAt(11))).intValue() * 2); i1 = i; i = i / 11; diff = i1 - (i * 11); if ((diff == 0) || (diff == 1)) { s = input + 0; } else { s = input + (11 - diff); } return s.equals(jmbg); } Ovako sam ga ja svojevremeno radio. [ DusanSukovic @ 08.04.2015. 13:36 ] @
Kompajlira lepo samo "0000000000000"je validan broj...
[ abyss @ 08.04.2015. 13:46 ] @
Ovaj kod ne proverava maticne knjige :) nego samo sracuna kontrolni broj i proveri sa unetim. Kod 12 nula je kontrolni bro isto nula.
Te slucajeve moraz na pocetku da izbacis. Isto tako i za null, kraci/duzi itd. [ DusanSukovic @ 08.04.2015. 14:36 ] @
Hvala :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|