Skip to content
Snippets Groups Projects
Commit 117464c1 authored by Vesa Lappalainen's avatar Vesa Lappalainen :bicyclist:
Browse files

hetun tarkistus ja varit

parent 5edaa668
No related branches found
No related tags found
No related merge requests found
25
1|Ankka Aku 11|241122-AAAA|Paratiisitie 13|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle
1|Ankka Aku 11|121212-121D|Paratiisitie 13|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle
2|Ankka Aku 2|150380-576A|Paratiisitie 13|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle
3|Ankka Aku 9186|211219-1820|Paratiisitie 13|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle
4|Ankka Aku 1559|110801-2905|Paratiisitie 13|12345|ANKKALINNA|12-1234|||1996|50.0|30.0|Velkaa Roopelle
......
......@@ -3,6 +3,7 @@ package fxKerho;
import java.net.URL;
import java.util.ResourceBundle;
import fi.jyu.mit.fxgui.Dialogs;
import fi.jyu.mit.fxgui.ModalController;
import fi.jyu.mit.fxgui.ModalControllerInterface;
import javafx.fxml.Initializable;
......@@ -115,9 +116,13 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
String virhe = null;
virhe = jasenKohdalla.setHetu(s);
if (virhe == null) {
Dialogs.setToolTipText(edit,"");
naytaVirhe(virhe);
edit.getStyleClass().add("normaali");
} else {
Dialogs.setToolTipText(edit,virhe);
naytaVirhe(virhe);
edit.getStyleClass().add("virhe");
}
}
......
......@@ -7,7 +7,7 @@
<?import javafx.scene.text.*?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxKerho.JasenDialogController">
<BorderPane stylesheets="@kerho.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxKerho.JasenDialogController">
<bottom>
<VBox BorderPane.alignment="CENTER">
<children>
......
package kanta;
import static kanta.SisaltaaTarkistaja.*;
/**
......@@ -12,6 +13,66 @@ public class HetuTarkistus {
// 0123456789012345678901234567890
public static final String TARKISTUSMERKIT = "0123456789ABCDEFHJKLMNPRSTUVWXY";
/** Kuukausien maksimipituudet */
// 1 2 3 4 5 6 7 8 9 10 11 12
public static int[] KUUKAUDET = {31,29,31,30,31,30,31,31,30,31,30,31};
/**
* Tarkistetaan hetu. Sallitaan myös muoto jossa vain syntymäaika.
* @param hetu joka tutkitaan.
* @return null jos oikein, muuten virhettä kuvaava teksti
* TODO tarkistukset kuntoon myös karkausvuodesta.
* @example
* <pre name="test">
* #PACKAGEIMPORT
* HetuTarkistus hetut = new HetuTarkistus();
* hetut.tarkista("12121") === "Hetu liian lyhyt";
* hetut.tarkista("k") === "Hetu liian lyhyt";
* hetut.tarkista("12121k") === "Alkuosassa saa olla vain numeroita";
* hetut.tarkista("121212") === null; // sallitaan pelkkä syntymäaika
* hetut.tarkista("001212") === "Liian pieni päivämäärä";
* hetut.tarkista("321212") === "Liian suuri päivämäärä";
* hetut.tarkista("300212") === "Liian suuri päivämäärä";
* hetut.tarkista("310412") === "Liian suuri päivämäärä";
* hetut.tarkista("121312") === "Liian suuri kuukausi";
* hetut.tarkista("120012") === "Liian pieni kuukausi";
* hetut.tarkista("121212B222Q") === "Väärä erotinmerkki";
* hetut.tarkista("121212-2k2Q") === "Yksilöosassa kirjaimia";
* hetut.tarkista("121212-2") === "Yksilöosa liian lyhyt";
* hetut.tarkista("121212-") === "Yksilöosa liian lyhyt";
* hetut.tarkista("121212-12345")=== "Hetu liian pitkä";
* hetut.tarkista("121212-222S") === "Tarkistusmerkin kuuluisi olla N";
* hetut.tarkista("121212-222N") === null;
* hetut.tarkista("121212-231Y") === null;
* hetut.tarkista("311212-2317") === null;
* </pre>
*/
public String tarkista(String hetu) {
int pituus = hetu.length();
if ( pituus < 6 ) return "Hetu liian lyhyt";
String pvm = hetu.substring(0,6);
if ( !onkoVain(pvm,NUMEROT)) return "Alkuosassa saa olla vain numeroita";
int pv = Integer.parseInt(pvm.substring(0,2));
int kk = Integer.parseInt(pvm.substring(2,4));
// int vv = Integer.parseInt(pvm.substring(4,6)); TODO vielä tarkempi pvm tarkistus
if ( kk < 1 ) return "Liian pieni kuukausi";
if ( 12 < kk ) return "Liian suuri kuukausi";
int pvmkk = KUUKAUDET[kk-1];
if ( pv < 1 ) return "Liian pieni päivämäärä";
if ( pvmkk < pv ) return "Liian suuri päivämäärä";
if ( pituus == 6 ) return null; // pelkkä syntymäaika kelpaa
if ( pituus < 11 ) return "Yksilöosa liian lyhyt";
if ( pituus > 11 ) return "Hetu liian pitkä";
String erotin = hetu.substring(6,7);
if ( !onkoVain(erotin,"+-A")) return "Väärä erotinmerkki";
String yksilo = hetu.substring(7,10);
if ( !onkoVain(yksilo,NUMEROT)) return "Yksilöosassa kirjaimia";
char merkki = hetunTarkistusMerkki(hetu);
if ( hetu.charAt(10) != merkki ) return "Tarkistusmerkin kuuluisi olla " + merkki;
return null;
}
/**
* Palauttaa mikä olisi hetun tarkistumerkki. Tuotava parametrinä
......
package kanta;
/**
* Tarkistaja joka tarkistaa että jono sisältää vain valittuja merkkejä.
* Hyväksyy tyhjän jonon.
* @author vesal
*
*/
public class SisaltaaTarkistaja {
/** Numeroita vastaavat kirjaimet */
public static final String NUMEROT = "0123456789";
/** Desimaalilukuun käyvät kirjaimet */
public static final String DESIMAALINUMEROT = "0123456789.,";
/**
* Onko jonossa vain sallittuja merkkejä
* @param jono tutkittava jono
* @param sallitut merkit joita sallitaan
* @return true jos vain sallittuja, false muuten
* @example
* <pre name="test">
* onkoVain("123","12") === false;
* onkoVain("123","1234") === true;
* onkoVain("","1234") === true;
* </pre>
*/
public static boolean onkoVain(String jono, String sallitut) {
for (int i=0; i<jono.length(); i++)
if ( sallitut.indexOf(jono.charAt(i)) < 0 ) return false;
return true;
}
private final String sallitut;
/**
* Luodaan tarkistaja joka hyväksyy sallitut merkit
* @param sallitut hyväksyttävät merkit
*/
public SisaltaaTarkistaja(String sallitut) {
this.sallitut = sallitut;
}
/**
* Tarkistaa että jono sisältää vain valittuja numeroita
* @param jono tutkittava jono
* @return null jos vain valittujan merkkejä, muuten virheilmoitus
* @example
* <pre name="test">
* SisaltaaTarkistaja tar = new SisaltaaTarkistaja("123");
* tar.tarkista("12") === null;
* tar.tarkista("14") === "Saa olla vain merkkejä: 123";
* tar.tarkista("") === null;
* </pre>
*/
public String tarkista(String jono) {
if ( onkoVain(jono, sallitut) ) return null;
return "Saa olla vain merkkejä: " + sallitut;
}
}
......@@ -3,6 +3,8 @@ package kerho;
import java.io.*;
import fi.jyu.mit.ohj2.Mjonot;
import kanta.HetuTarkistus;
import static kanta.HetuTarkistus.*;
/**
......@@ -75,10 +77,14 @@ public class Jasen implements Cloneable {
* @return jos virhe
*/
public String setHetu(String s) {
HetuTarkistus tarkistaja = new HetuTarkistus();
String virhe = tarkistaja.tarkista(s);
if (virhe != null) return virhe;
hetu = s;
return null;
}
/**
* @return jäsenen postinumero
*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment