public class Zeitschrift extends Printmedium {

    private String issn = "0000 0000";
    private int ausgabennummer = 1;
    
    public Zeitschrift() {

    }
   
    public Zeitschrift(String issn, int ausgabennummer) {
        this.issn = issn;
        this.ausgabennummer = ausgabennummer;
    }
    
    
    public int getAusgabennummer() {
        return ausgabennummer;
    }
    
    public void setAusgabennummer(int ausgabennummer) {
        this.ausgabennummer = ausgabennummer;
    }
    
    public String getISSN() {
        return issn;
    }
    
    public void setISSN(String issn) {
        if(testISSN(issn))
        this.issn = issn;
    }
    
    /*
     1. Alle Ziffern werden von rechts nach links, beginnend mit der vorletzten Ziffer (also vor der Stelle der Prüfziffer), mit ihrer Position in der Ziffernfolge gewichtet, d.h. die vorletzte Ziffer wird mit 2, die nächste mit 3, usw. multipliziert.
     2. Die Produkte werden summiert.
     3. Der volle Rest zum nächst niedrigeren Vielfachen von 11 (modulo 11) wird errechnet.
     4. Die Prüfziffer ist die Differenz des Restes zu 11.

	Ist die Differenz 10, gilt p = X
	Ist die Differenz 11, gilt p = 0

	
	Beispiel ISSN 0724-867p Nummer
	Schritt 1:
	Gewichtung	
	Schritt 2:
	Produktsummation
	0	8	 0
	7	7	49
	2	6	12
	4	5	20
	8	4	32
	6	3	18
	7	2	14
	Summe	145 
	Schritt 3: Summe modulo 11	145 ÷ 11 =
	13 Rest 2
	Schritt 4: Differenz zu 11	11 - 2
	Endergebnis Prüfziffer	9
	ISSN 0724-8679
     */
    private static boolean testISSN(String issn){
        try {
            if(issn.length() == 9){
                issn = issn.replaceAll("-","");
                issn = issn.replaceAll(" ","");
                int summand = 0;
                for (int i = 0; i < 7; i++) {
                        summand = summand + Integer.parseInt(issn.substring(i,i+1)) * (8-i);
                }
                summand = summand%11;
                int prüfziffer = 11-summand;
                if(prüfziffer == 10 & issn.substring(7,8).equalsIgnoreCase("x")){
                    return true;
                }else if(prüfziffer ==  Integer.parseInt(issn.substring(7,8))){
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            return false;
        }

    }
    
	public boolean equals(Object a)
	{
		boolean test = false;
		if(a instanceof Zeitschrift)
		{
		    Zeitschrift b = new Zeitschrift();
			b= (Zeitschrift) a;
			if(issn.equals(b.issn))
				test = true;
		}
		return test;
	}
    
    public static void main(String[] args) {
        testISSN("0724-867X");
        System.out.println(testISSN("0724-8679"));
    }
}
