Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mozgalica o maticnim brojevima - JMBG

[es] :: Baze podataka :: Mozgalica o maticnim brojevima - JMBG

[ Pregleda: 7690 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Mozgalica o maticnim brojevima - JMBG22.01.2008. u 21:42 - pre 197 meseci
Pre neki dan sam popunjavao prijavu za glasacki spisak i morao sam da dam maticni broj. Zapitao sam se da li se moze kontrolna cifra izracunati u SQL, bez koriscenja kursora.

Ovako se racuna kontrolna cifra:
Code:

{
   F-ja za izracunavanje kontrolnog broja (13. cifre) JMBG
   JMBG predstavimo kao ABCDFGHAIJKLX, gde je X kontrolni broj. 
   
   CheckSum:
   CS = 11-( 7*(A+G) + 6*(B+H) + 5*(C+I) + 4*(D+J) + 3*(E+K) + 2*(F+L) ) MOD 11
   ako je:
     CS <= 9  ->  X = CS
     CS > 9   ->  X = 0
}

kod je preuze iz teme http://www.elitesecurity.org/t164179

Vise detalja moze se naci u temi http://www.elitesecurity.org/t43081, ako nekoga zanima.

Mi cemo uprostuiti mozgalicu. Zadata je tabela sa dvanaestocifrenim brojevima. Napisati SELECT koji ispisuje broj i pored njega kontrolnu cifru, po formuli koja je data u kodu na pocetku mozgalice. en interesuju nas ostale stvari, sta je datunm rodjenja a sta opstina u broju. Samo zelimo da za zadatih 12 cifara izracunamo trinasetu, koja je kontrolna cifra.

Code:

CREATE TABLE MaticniBrojevi
(
Broj varchar(12) NOT NULL 
CHECK (Broj LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
)

INSERT INTO MaticniBrojevi (Broj) VALUES ('123456789012')
INSERT INTO MaticniBrojevi (Broj) VALUES ('223456789012')
INSERT INTO MaticniBrojevi (Broj) VALUES ('323456789012')
INSERT INTO MaticniBrojevi (Broj) VALUES ('423456789012')
INSERT INTO MaticniBrojevi (Broj) VALUES ('523456789012')


Treba da se nesto ovako (kontrolne cifre nisu tacne, samo pokazujem sta se trazi)

Broj KontrolnaCifra
------------ --------------
123456789012 2
123456789012 3
223456789012 4
323456789012 5
423456789012 6
523456789012 7

(6 row(s) affected)

Kursori su zabranjeni. Zabranjeno dodavati nove kolone u tabelu. Sve ostalo moze.



 
Odgovor na temu

Koce
DBA
Serbia, Belgrade

Član broj: 59217
Poruke: 144
*.vektor.net.



+1 Profil

icon Re: Mozgalica o maticnim brojevima - JMBG23.01.2008. u 09:58 - pre 197 meseci
Evo jedno resenje, al nisam siguran u formulu za racunanje CS:


select Broj,
case
when 11 - ( 7*(substring(broj, 1,1)+substring(broj, 7,1)) + 6*(substring(broj, 2,1)+substring(broj, 8,1)) + 5*(substring(broj, 3,1)+substring(broj, 9,1)) + 4*(substring(broj, 4,1)+substring(broj, 10,1)) + 3*(substring(broj, 5,1)+substring(broj, 11,1)) + 2*(substring(broj, 6,1)+substring(broj, 12,1)) ) % 11 <=9
then 11 - ( 7*(substring(broj, 1,1)+substring(broj, 7,1)) + 6*(substring(broj, 2,1)+substring(broj, 8,1)) + 5*(substring(broj, 3,1)+substring(broj, 9,1)) + 4*(substring(broj, 4,1)+substring(broj, 10,1)) + 3*(substring(broj, 5,1)+substring(broj, 11,1)) + 2*(substring(broj, 6,1)+substring(broj, 12,1)) ) % 11
else 0
end kon
from MaticniBrojevi
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica o maticnim brojevima - JMBG23.01.2008. u 14:35 - pre 197 meseci
@ koce: odlicno
Malo sam preformatirao tvoj kod , se malo bolje vidi:
Code:

SELECT 
    Broj
    , kon = CASE 
                WHEN 11 -( 
                              7 *( substring( broj, 1, 1 ) + substring( broj, 7, 1 ) )
                            + 6 *( substring( broj, 2, 1 ) + substring( broj, 8, 1 ) ) 
                            + 5 *( substring( broj, 3, 1 ) + substring( broj, 9, 1 ) ) 
                            + 4 *( substring ( broj, 4, 1 ) + substring( broj, 10, 1 ) ) 
                            + 3 *( substring( broj, 5, 1 ) + substring( broj, 11, 1 ) ) 
                            + 2 *( substring( broj, 6, 1 ) + substring( broj, 12, 1 ) ) 
                        ) % 11 <= 9 
                THEN 11  -( 
                              7 *( substring( broj, 1, 1 ) + substring(broj, 7, 1 ) )          
                            + 6 *( substring( broj, 2, 1 ) + substring(broj, 8, 1 ) )          
                            + 5 *( substring( broj, 3, 1 ) + substring(broj, 9, 1 ) )          
                            + 4 *( substring( broj, 4, 1 ) + substring(broj, 10, 1 ) )         
                            + 3 *( substring( broj, 5, 1 ) + substring(broj, 11, 1 ) )         
                            + 2 *( substring( broj, 6, 1 ) + substring(broj, 12, 1 ) ) 
                            ) % 11 
                ELSE 0 
            END  
FROM MaticniBrojevi  
FROM MaticniBrojevi 

-- daje rezultat:
 
Broj                 kon
------------ -----------
123456789012           5
123456789012           5
223456789012           1
323456789012           8
423456789012           4
523456789012           0

(6 row(s) affected)



Moglo je i ovako:
Code:

WITH Korak_1 AS
(
SELECT 
    Broj
    , A = substring( broj, 1, 1 )
    , B = substring( broj, 2, 1 )
    , C = substring( broj, 3, 1 )
    , D = substring( broj, 4, 1 )
    , E = substring( broj, 5, 1 )
    , F = substring( broj, 6, 1 )
    , G = substring( broj, 7, 1 )
    , H = substring( broj, 8, 1 )
    , I = substring( broj, 9, 1 )
    , J = substring( broj, 10, 1 )
    , K = substring( broj, 11, 1 ) 
    , L = substring( broj, 12, 1 )
FROM MaticniBrojevi
)
, KOrak_2 AS
(
SELECT
Broj
, CS = 11-( 7*(A+G) + 6*(B+H) + 5*(C+I) + 4*(D+J) + 3*(E+K) + 2*(F+L) ) % 11
FROM Korak_1
)
SELECT
    Broj
    , CS
    , Kont = CASE WHEN CS <= 9 THEN CS ELSE 0 END
FROM KOrak_2

Broj                  CS        Kont
------------ ----------- -----------
123456789012           5           5
123456789012           5           5
223456789012           1           1
323456789012           8           8
423456789012           4           4
523456789012          11           0

(6 row(s) affected)



Pitam se koliko ljudi je ovu formulu ukljucilo o CHECK constraint za JMBG ......



 
Odgovor na temu

Koce
DBA
Serbia, Belgrade

Član broj: 59217
Poruke: 144
*.vektor.net.



+1 Profil

icon Re: Mozgalica o maticnim brojevima - JMBG24.01.2008. u 11:52 - pre 197 meseci
cuo sam, mada nisam imao prilike da licno vidim a imam dosta kontakta sa osobama a time i MB, da je bilo slucajeva sa losim MB, tacnije pogresnim kontrolinim brojem, koje su neki ljudi dobili kada su izbjegli iz Krajine i nisu znali svoj, prethodno dobijeni, MB, vec samo datum rodjenja.... ko zna...
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica o maticnim brojevima - JMBG24.01.2008. u 14:19 - pre 197 meseci
@Koce: bas nedavno sam pronasao jednu staru temu na forumu Access mislim, gde se pominjao JMBG. Otud mi ideja za mozgalicu. Elem, ljudi su isto to tvrdili da su masovno izdati pogresni JMBG. Na kraju je neko zakljucio da brojevi nisu izdati pogresno, nego su pogresno verovatno upisani u dokumente (prekucani, prepisani). Ako odbijes da primis takav JMBG, ispostavi se da vrlo brzo dobijes tacan - ljudi kontaktiraju SUP koji je izdao broj i dobiju tacan broj. Upravo zbog toga da se ne bi propagirale greske kroz razne sisteme, za ocekivati bi bilo da se ne dozvoli unos pogresnih brojeva.

Kako bi dakle izgledao CHECK CONSTRAINT koji bi proveravao maticni broj, kontrolnu cifru naravno i sta god jos moze. Na primer, u vecini tabela imas i JMBG i DatumRodjenja. Treba proveriti da se to slaze. Inace, mogu d apodnesen JMBG mog mladjkeg brata, koji je potopuno ispravan. Znaci, treba nam CHECK, sto potpuniji, za JMBG.

Treba nam takodje da je JMBG jedinstven u tablei gde se unosi, ali da se dozvoljavaju NULL vrednosti. Dakle, ako niej NULL, onda mora biti jedinstven, a vise redova moze sadrzati NULL. Zato sto neko nema u tom momento maticni broj mozes da dozvolis NULL. Problem je sto MS SQL ne dozbvoljava visetruke NULL vrednosti. Mislim da je o tome bila bas prva mozgalica.

Zdatak sada glasi:
Citat:

1) Napisati CHECK constraint za JMBG, sto potpuniji.
2) obezbediti jedinstvenost za NOT NULL vrednosti. Jedinstvenost se ne odnosi na NULL vrednosti u koloni JMBG


Izvolite.

 
Odgovor na temu

blueblue_yu
projektant, nbs
Beograd

Član broj: 239860
Poruke: 1
91.148.85.*



Profil

icon Re: Mozgalica o maticnim brojevima - JMBG15.11.2009. u 07:16 - pre 175 meseci
Naišao sam na sajt na kome se onlajn može proveriti ispravnost Jedinstvenog matičnog broja, a mogu se dobiti i detalji kao što su mesto rođenja, pol, datum rođenja i sl. Adresa sajta je http://jmbg.brmbrm.com/
 
Odgovor na temu

Catch 22

Član broj: 148083
Poruke: 6176
93.86.85.*



+21 Profil

icon Re: Mozgalica o maticnim brojevima - JMBG15.11.2009. u 10:11 - pre 175 meseci
Wikipedia: JMBG

Citat:

Microsoft Excel formula za izračunavanje kontrolne cifre
A1 - podaci prvih 12 cifara
B1 - kontrolna cifra (poslednja cifra)
C1 - ceo broj sa kontrolnom cifrom
Code:
B1 =11-(MOD(((7*(MID(A1,1,1)+MID(A1,7, 1)))
            +(6*(MID(A1,2,1)+MID(A1,8, 1)))
            +(5*(MID(A1,3,1)+MID(A1,9, 1)))
            +(4*(MID(A1,4,1)+MID(A1,10,1)))
            +(3*(MID(A1,5,1)+MID(A1,11,1)))
            +(2*(MID(A1,6,1)+MID(A1,12,1)))),11))

C1 = CONCATENATE(A1;IF(B1<10;B1;0))


Onlajn provera i detalji Jedinstvenog matičnog broja građana

 
Odgovor na temu

[es] :: Baze podataka :: Mozgalica o maticnim brojevima - JMBG

[ Pregleda: 7690 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.