DohvatiOibIzCertifikata

Coordinator
Nov 7, 2012 at 4:53 PM
Edited Nov 7, 2012 at 4:56 PM

Koliko je ovo dobro?

Naime, za potrebe testiranja moram implementirati ovu funkciju... pa me zanima, jel' ima netko možda neko "pametnije" rješenje od ovoga...

 

public static string DohvatiOibIzCertifikata(string certificateSubject)
		{
			//throw new NotImplementedException();

			try
			{
				string oib = "";

				X509Certificate2 certificate = PopratneFunkcije.Potpisivanje.DohvatiCertifikat(certificateSubject);
				if (certificate != null)
				{
					X500DistinguishedName dName = new X500DistinguishedName(certificate.SubjectName);
					string[] dn = dName.Name.Split(',');
					foreach (string s in dn)
					{

						if (s.Trim().StartsWith("O="))
						{
							oib = s.Substring(s.Length - 11);
						}

					}
				}
				return oib;
			}
			catch
			{
				return null;
			}
		}

Nov 7, 2012 at 5:35 PM

I ja radim tako ali kada mi se vrati null, ne blokiram nista temeljem toga.
Znaci samo upozorim usera da je OIB mozda neispravan.

Dodatno, provjerom kontrolnoga broja OIBa, mogu biti i malo sigurniji u ispravnost FINAe i njihovoga ručnog prepisivanja OIBa u certifikate :)

        public static bool ProvjeraOiba(string oib)
        {
            if (oib.Length != 11) return false;

            long x;
            if (!long.TryParse(oib, out x)) return false; // provjeri jeli string "longabilan" :))

            int z = 10;
            for (int i = 0; i < 10; i++)
            {
                z = z + Convert.ToInt32(oib.Substring(i, 1));
                z = z % 10;
                if (z == 0) z = 10;
                z *= 2;
                z = z % 11;
            }
            int kontrolniBroj = 11 - z;
            if (kontrolniBroj == 10) kontrolniBroj = 0;
            return kontrolniBroj == Convert.ToInt32(oib.Substring(10, 1)); // vraca true ako je zadnji broj OIBa jednak izracunatom kontrolnom broju
        }

Coordinator
Nov 7, 2012 at 8:32 PM
Edited Nov 7, 2012 at 8:36 PM

Stvar je u tome što razvijam jedan sustav za centralizirano "fiskaliziranje", ali kojeg će u jednoj instanci dijeliti dvije sestrinske firme, sa različitim OIB brojem, a bilo bi glupo sve fizički razdvojiti na istom serveru sa istom adresom radi jednog podatka... 

Glupo je to što bilo kakav pristup OIB-u po bilo kojoj metodi nije 100% siguran... ne šlampavošću mene kao developera, nego kao jednog i jedinog, nama omiljenog ROOT izdavača certifikata...

Kada bi netko za ispravnost podataka u certifikatu koji ti izdaje, a radi koga ti klijent može "popušiti" pola milje kazne, certifikat odgovarao po materijalnoj i kaznenoj odgovornosti, stvari bi itekako bile 100% sigurne...

Hvala ti za ovaj snippet. Koristi :)