Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Palun abi javas programmi tegemisel. märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
kp0041e
HV vaatleja

liitunud: 19.11.2012




sõnum 10.01.2013 20:16:17 Palun abi javas programmi tegemisel. vasta tsitaadiga

Tervist,

Mul vaja teha javas siis selline programm, mis küsib kasutajalt isikukoodi ID ja arvutab sellest järgmised andmed: inimese sugu (mees/naine/ei saa tunnistada), sünnituskuupäev täisaastaga (23.11.2011/.../ei saa tunnistada), haigla (sünnimaja) nimetus (Valga Haigla/.../ei saa tunnistada). Lisaks tuleb väljastada, kas isikukood on korrektne või mitte (andmed ja kontrollnumber on õiged/andmed või kontrollnumber on valed).

Ma olen valmis suutnud teha kõik peale isikukoodi kontrollimise. Äkki keegi oskaks mind selle koha peal aidata? Kasutan if-else & else pea kõikjal oma koodis. Lisaks ei leia ma kusagilt käsku: kui sisestus on teatud arv kohti & on numbrid, siis laseb läbi, aga muul juhul mitte. Äkki keegi oskab selle käsu mulle anda?

Eesti ID kaardi süsteemist on juttu siin. Siin on ka lahti seletatud kontrollimine ja kõik muu vajalik: http://et.wikipedia.org/wiki/Isikukood

Tänud!
tagasi üles
vaata kasutaja infot saada privaatsõnum
Redikate
HV veteran
Redikate

liitunud: 30.12.2005




sõnum 10.01.2013 20:40:12 vasta tsitaadiga

Anna olemasolev kood ka icon_smile.gif

Muidu pikkuse saab stringilt kasutades .length()
Niiet int isikukoodi_pikkus = sisend.length()
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
kussu
HV veteran
kussu

liitunud: 18.12.2002



Autoriseeritud ID-kaardiga

sõnum 10.01.2013 20:59:37 vasta tsitaadiga

Äkki on abiks:
Isikukoodi valideerimine Excelis http://sarviktaat.wordpress.com/2012/12/06/isikukoodi-valideerimine-excelis/
Isikukoodi valideerimine Power Shellis http://sarviktaat.wordpress.com/2012/12/10/jatkuks-eelmisele-isikukood-ja-powershell/
Kommentaarid: 69 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 68
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 11.01.2013 01:22:56 vasta tsitaadiga

Ei aita küll väga palju Javaga aga pigem teooriaga kuidas teha pseudokoodinäol

ik = "SAAKKPPJRKK"
if length of ik < 11 quit
sex = substring of ik 0, 1
year = substring of ik 1, 2
month = substring of ik 3, 2
day = substring of ik 5, 2
hospital = substring of ik 7, 3
check = substring of ik 10, 1


Saab ka efektiivsemalt, aga alustuseks käib ka. Javas on stringi length olemas ja ka substring.

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
kp0041e
HV vaatleja

liitunud: 19.11.2012




sõnum 11.01.2013 15:08:32 vasta tsitaadiga

Tänud, siiamaani on kõik olemas peale isikukoodi kontrollimise osa...

algoritm siis selline:

sikukoodi kontrollnumber formeeritakse "Moodul 11" meetodil, kasutades I või II astme kaalu:
I astme kaal: 1 2 3 4 5 6 7 8 9 1
II astme kaal: 3 4 5 6 7 8 9 1 2 3
See tähendab, et isikukoodi kümme esimest numbrit korrutatakse igaüks omaette I astme kaaluga, korrutised liidetakse. Saadud summa jagatakse 11ga. Kui jagatise jääk ei võrdu 10ga, on jääk kontrollnumbriks.
Kui jääk võrdub 10ga, siis korrutatakse koodi kümme esimest numbrit igaüks omaette II astme kaaluga. Korrutised liidetakse. Saadud summa jagatakse 11ga. Kui jääk ei võrdu 10ga, on saadud jääk kontrollnumbriks. Kui jääk võrdub 10ga, siis on kontrollnumber 0.
Näide: isikukoodi 37605030299 kontroll:
Summa = 1*3 + 2*7 + 3*6 + 4*0 + 5*5 + 6*0 + 7*3 + 8*0 + 9*2 + 1*9 = 108.
108 jääk jagamisel 11-ga on 9. (108/11 ~ 9,8. Täisosa on seega 9. Siit 9*11 = 99. Lahutades 108-99 = 9, mis ongi jääk).
Nii peabki isikukoodi 37605030299 viimane number olema 9.

Kas keegi kogenum oskaks aidata selle koodi kirjutamisega? Mul on muutujad A kuni K int'idena ning igaüks võrduvad isikukoodi ühe numbriga.( näiteks isikukoodis 37605030299 on A = 3, B = 7, C = 6, D = 0 jne...)

Praegune kontrollimise koodijupp on mul selline http://paste2.org/p/2730472
millegipärast see kood vägahästi ei tööta ja peale isikukoodi sisestamist lõpetab programmi.
tagasi üles
vaata kasutaja infot saada privaatsõnum
infidel
HV kasutaja
infidel

liitunud: 31.01.2004




sõnum 11.01.2013 21:44:09 vasta tsitaadiga

Näppisin natuke.
java:
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4.  
  5. public class  IDKT
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 Scanner klaviatuur = new Scanner(System.in);
  10.                 String ID;
  11.  
  12.                 System.out.println("\nPalun sisestage isikukood:");
  13.                 ID = klaviatuur.nextLine();
  14.                 System.out.println(ID.length());
  15.                 if (ID.length() == 11) {
  16.                 int [ ] kood = new int [ 11 ];
  17.     for (int i = 0; i < 11; i++) {
  18.       try {
  19.        kood[i] = Integer.parseInt(ID.substring(i, i+1))
  20.        }
  21.        catch(NumberFormatException e){
  22.        System.out.println("Kood ei koosne ainult numbritest.");
  23.      System.exit(0);
  24.        }
  25.        
  26.      
  27.       // System.out.print(" ");
  28.      }
  29.      int kontroll = (kood[0] * 1 + kood[1] * 2 + kood[2] *3 + kood[3] *4+ kood[4] * 5+ kood[5] * 6+ kood[6] * 7+ kood[7] * 8+ kood[8] * 9+ kood[9] * 1) % 11;
  30.      if (kontroll == 10) {
  31.      kontroll = (kood[0] * 3 + kood[1] * 4 + kood[2] *5 + kood[3] *6+ kood[4] * 7+ kood[5] * 8+ kood[6] * 9+ kood[7] * 1+ kood[8] * 2+ kood[9] * 3) % 11;
  32.      
  33.      }
  34.     if (kontroll == 10) {
  35.      kontroll = 0;
  36.      }
  37.  
  38.                 if (kood[10] == kontroll)
  39.                 System.out.println("Kontrollnumber on 6ige");
  40.                 else 
  41.                 System.out.println("Kontroll nr pole 6ige");
  42.  
  43.         }else{
  44.        
  45.         System.out.println("Kood on vale pikkusega.");
  46.         }
  47.         }
  48. }

Jätsin selguse huvides võimalikult palju algset koodi alles. Kui mingi koht segane on, küsi julgesti.
Kommentaarid: 36 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
kp0041e
HV vaatleja

liitunud: 19.11.2012




sõnum 11.01.2013 22:18:25 vasta tsitaadiga

Aitäh sulle!

Äkki oskad öelda mis mu koodil viga ka on? Ta ei prindi lõpus vastust...

http://paste2.org/p/2732031
tagasi üles
vaata kasutaja infot saada privaatsõnum
infidel
HV kasutaja
infidel

liitunud: 31.01.2004




sõnum 11.01.2013 22:34:07 vasta tsitaadiga

Ta ei prindi lõpus vastust, sest printimise koht on selliste sulgude vahel, kuhu jõuab ainult teatud tingimustel - haiglat ei saa tuvastada.
Ka läheb asi rea 46 juures praegu jamaks, kuna isikukoodi tõlgendamise osa on pandud lihtsalt koodile sappa. See peaks jääma aga nende samade sulgude vahele, kus on teavitus õige kontrollkoodi kohta (ebakorrektset isikukoodi pole ju mõtet tõlgendada).

Edit:
Õhtu käes, praegu rohkem ei viitsi. Nii paistis töötavat, eks vaata ise erinevusi:
java:
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4.  
  5. public class  IDKT2
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.  
  10.  
  11.  
  12.                 Scanner klaviatuur = new Scanner(System.in);
  13.                 String ID;
  14.  
  15.                 System.out.println("\nPalun sisestage isikukood:");
  16.                 ID = klaviatuur.nextLine();
  17.                 //System.out.println(ID.length());
  18.                 if (ID.length() == 11) {
  19.                 int [ ] kood = new int [ 11 ];
  20.     for (int i = 0; i < 11; i++) {
  21.       try {
  22.        kood[i] = Integer.parseInt(ID.substring(i, i+1));
  23.        }
  24.        catch(NumberFormatException e){
  25.        System.out.println("Kood ei koosne ainult numbritest.");
  26.      System.exit(0);
  27.        }
  28.        
  29.      
  30.       // System.out.print(" ");
  31.      }
  32.      int kontroll = (kood[0] * 1 + kood[1] * 2 + kood[2] *3 + kood[3] *4+ kood[4] * 5+ kood[5] * 6+ kood[6] * 7+ kood[7] * 8+ kood[8] * 9+ kood[9] * 1) % 11;
  33.      if (kontroll == 10) {
  34.      kontroll = (kood[0] * 3 + kood[1] * 4 + kood[2] *5 + kood[3] *6+ kood[4] * 7+ kood[5] * 8+ kood[6] * 9+ kood[7] * 1+ kood[8] * 2+ kood[9] * 3) % 11;
  35.      
  36.      }
  37.     if (kontroll == 10) {
  38.      kontroll = 0;
  39.      }
  40.  
  41.                 if (kood[10] == kontroll) {
  42.                 System.out.println("Kontrollnumber on 6ige");
  43.                                 String haigla = ID.substring(7, 9);
  44.                 String synniaastaalgus = ID.substring(0, 1);
  45.                 String synniaastaend = ID.substring(1, 3);
  46.                 String sugu = ID.substring(0, 1);
  47.                 String synnikuu = ID.substring(3, 5);
  48.                 String synnipaev = ID.substring(5, 7);
  49.  
  50.  
  51.  
  52.                 if (sugu.equals("1") || sugu.equals("3") || sugu.equals("5")) {
  53.                 sugu = "*mees";
  54.         } else if (sugu.equals("2") || sugu.equals("4") || sugu.equals("6")) {
  55.                 sugu = "*naine";
  56.                 } else {
  57.                 sugu = "*Sugu ei saa tunnistada";
  58.                 }
  59.                
  60.  
  61.                 if (synniaastaalgus.equals("1") || synniaastaalgus.equals("2")) {
  62.                         synniaastaalgus = "18";
  63.                 } else if (synniaastaalgus.equals("3") || synniaastaalgus.equals("4")) {
  64.                         synniaastaalgus = "19";
  65.                 } else if (synniaastaalgus.equals("5") || synniaastaalgus.equals("6")) {
  66.                         synniaastaalgus = "20";
  67.                 }
  68.  
  69.  
  70.                 if (haigla.equals("00") || haigla.equals("01")) {
  71.                         haigla = "Kuressaare Haigla";
  72.                 } else if (haigla.equals("02") || haigla.equals("03") || haigla.equals("04")
  73.                         || haigla.equals("05") || haigla.equals("06") || haigla.equals("07")
  74.                         || haigla.equals("08") || haigla.equals("09") || haigla.equals("10")
  75.                         || haigla.equals("11") || haigla.equals("12") || haigla.equals("13")
  76.                         || haigla.equals("14") || haigla.equals("15") || haigla.equals("16")
  77.                         || haigla.equals("17") || haigla.equals("18") || haigla.equals("19")
  78.                         || haigla.equals("20") || haigla.equals("21")) {
  79.                         haigla = "Ida-Tallinna Keskhaigla, Hiiumaa, Keila, Rapla haigla";
  80.                 } else if (haigla.equals("22") || haigla.equals("23") || haigla.equals("24")
  81.                         || haigla.equals("25") || haigla.equals("26")) {
  82.                         haigla = "Ida-Viru Keskhaigla (Kohtla-Järve, endine Jõhvi";
  83.                 } else if (haigla.equals("27")
  84.                         || haigla.equals("28") || haigla.equals("29") || haigla.equals("30")
  85.                         || haigla.equals("31") || haigla.equals("32") || haigla.equals("33")
  86.                         || haigla.equals("34") || haigla.equals("35") || haigla.equals("36")) {
  87.                         haigla = "Maarjamõisa Kliinikum (Tartu), Jõgeva Haigla";
  88.                 } else if (haigla.equals("37") || haigla.equals("38") || haigla.equals("39")
  89.                         || haigla.equals("40") || haigla.equals("41")) {
  90.                         haigla = "Narva Haigla";
  91.                 } else if (haigla.equals("42") || haigla.equals("43") || haigla.equals("44")
  92.                         || haigla.equals("45") || haigla.equals("46")) {
  93.                         haigla = "Pärnu haigla";
  94.                 } else if (haigla.equals("47") || haigla.equals("48")) {
  95.                         haigla = "Pelgulinna Sünnitusmaja (Tallinn), Haapsalu haigla";
  96.                 } else if (haigla.equals("49") || haigla.equals("50") || haigla.equals("51")) {
  97.                         haigla = "Järvamaa Haigla (Paide)";
  98.                 } else if (haigla.equals("52") || haigla.equals("53") || haigla.equals("54")
  99.                         || haigla.equals("55") || haigla.equals("56")) {
  100.                         haigla = "Rakvere, Tapa haigla";
  101.                 } else if (haigla.equals("57") || haigla.equals("58") || haigla.equals("59")) {
  102.                         haigla = "Valga Haigla";
  103.                 } else if (haigla.equals("60") || haigla.equals("61") || haigla.equals("62")
  104.                         || haigla.equals("63") || haigla.equals("64")) {
  105.                         haigla = "Viljandi Haigla";
  106.                 } else if (haigla.equals("65") || haigla.equals("66") || haigla.equals("67")
  107.                         || haigla.equals("68") || haigla.equals("69") || haigla.equals("70")
  108.                         || haigla.equals("71") || haigla.equals("72") || haigla.equals("73")) {
  109.                         haigla = "Lõuna-Eesti Haigla (Võru), Põlva Haigla";
  110.                 } else {
  111.                         haigla = "Sünnimaja ei saa tunnistada";
  112.                
  113.         
  114.                 //see lihtsalt kontrollimiseks praegu
  115.                 }
  116.                 System.out.println(haigla + sugu + synnikuu + synnipaev + synniaastaalgus + synniaastaend);
  117.                
  118.                
  119.                 }
  120.                 else
  121.                 {
  122.                 System.out.println("Kontroll nr pole 6ige");
  123.  }
  124.         }else{
  125.        
  126.         System.out.println("Kood on vale pikkusega.");
  127.  
  128.  
  129.  
  130.  
  131.         }
  132.                 }
  133. }
Kommentaarid: 36 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
kp0041e
HV vaatleja

liitunud: 19.11.2012




sõnum 11.01.2013 23:52:55 vasta tsitaadiga

Õhtust!

Ma sain lõpuks oma programmi valmis tänu kahele kasutajale foorumist: Redikate ja infidel. Suured tänud teile!

Kui teid huvitab siis töötav kood on siin: http://paste2.org/p/2732333
tagasi üles
vaata kasutaja infot saada privaatsõnum
Aulo
HV vaatleja

liitunud: 06.09.2011




sõnum 10.04.2014 18:58:33 vasta tsitaadiga

Sünniaeg oleks võimalik valideerida kindlamalt kasutades lihtsalt java.text.SimpleDateFormat("yyMMdd") kuupäevaks formateerimist ja ParseException vea püüdmist ja/või vajalikke Apache Commons Lang vms üldlevinud teegis olevaid kuupäevade valideerimise vahendeid (võttes arvesse ka liigaastad jne ehk kas vastav kuupäev on reaalne või mitte) ehk kokkuvõttes asendatav ühe reaga.

Haiglate valideerimise osas: ühest küljest on neid hea valideerida, teisest küljest on see erinevalt muudest andmetest selline teoreetiliselt aja jooksul muutuv ning pidevalt tähelepanu nõudev koht ehk jätaksin selle pigem vaid kontrollnumbri otsustada, sest neid kohti, kus sünnitada tuleb ja kaob pidevalt ning selle tõttu pidevalt Java koodi uuendada oleks tülikas ja kokkuvõttes hakkab siit aja jooksul sellisel kujul vigu tulema ka valiidsete koodide korral. Lisaks on seal ka juba praegu käsitletud vigaselt koodi 70 (inimestele, kellel on elamisloaga probleeme) ning täielikult käsitlemata kood 95 (Eestis sündinud välismaalased).

Sajandi ja soo tuvastamine otseselt ka ei ole isikukoodi valideerimise mõttes vajalik, piisaks kontrollist, kas väärtus on 1-6, järgmiseks sajandiks valmis olles ka 7-8.

Erinevate substringide võtmise asemel võiks kasutada juba olemas olevaid kood[n] positsioonilisi väärtusi.

Kokkuvõttes funktsionaalsust parandades ja loetavust lihtsustades saaks koodi kordi lühemaks.
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Palun abi javas programmi tegemisel.
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.