# Programm zur Personalausweisprüfung



## BloodyKnife (12. Mai 2008)

Hi @ all,

wir haben in der Klasse (einjährige Berufsfachschule Informatik) die Aufgabe bekommen, ein Programm zu schreiben, welches in der Lage ist anhand der verschiedenen Nummern die unten auf dem Perso draufstehen dessen Gültigkeit zu "berechnen".

Nun das Programm habe ich soweit fertig..nur habe ich es bis heute nicht hingekriegt das er die Prüfziffer "richtig" ausrechnet...dabei habe ich mich an alle Vorgaben gehalten die wir hatten.

Unter anderem mussten wir auf unserem Eigentlichen Wissensstand in der Klasse (for- und while-schleifen & if-Anweisungen) beschränken. Bei meinem Programm habe ich NUR for-schleifen und if-anweisungen verwendet.

Kann mir vielleicht jemand sagen was genau ich in dem Programm falsch gemacht habe?

Wäre sehr Hilfreich und Dankbar...weil ich hab den Quelltext schon einige male abgeändert aber ohne Erfolg 

Hier der Quelltext:


```
//Hendrik Alexander Mennen
//Edewechter Landstraße 85
//26131 Oldenburg
//015112419182

class persopruefung
{
  public static void main(String args[])
  {
    int pruefziffer_pn=0, pruefziffer_gb=0, pruefziffer_amt=0;
    int personalausweisnummer=0, geburtsdatum=0, amtsstelle=0;
    int arbeiten=0, ergebnis=0, faktor=0, zaehler=1;
    int finale_pruefziffer = 0, letzte_ziffer = 0;

    personalausweisnummer = IO.readInt("Bitte geben Sie die ersten 9 Ziffern des ersten Blockes ein: ");
    geburtsdatum = IO.readInt("Bitte geben Sie die ersten 6 Ziffern des zweiten Blockes ein: ");
    amtsstelle = IO.readInt("Bitte geben Sie die ersten 6 Ziffern des dritten Blockes ein: ");

    //Arbeitsschritt Personalausweisnummer

    for(zaehler = 1;zaehler <=9 ;zaehler++)
    {
      arbeiten = personalausweisnummer % 10;
      if (zaehler == 1 || zaehler == 4 || zaehler == 7)
      {
        faktor = 7;
      }
      if (zaehler == 2 || zaehler == 5 || zaehler == 8)
      {
        faktor = 3;
      }
      if (zaehler == 3 || zaehler == 6 || zaehler == 9)
      {
        faktor = 1;
      }
      ergebnis = arbeiten * faktor;
      pruefziffer_pn = (ergebnis % 10) + pruefziffer_pn;
    }
    zaehler = 1;

    //Arbeitsschritt Geburtsdatum

    for (zaehler = 1; zaehler<=6; zaehler++)
    {
      arbeiten = geburtsdatum % 10;
      if (zaehler == 1 || zaehler == 4)
      {
        faktor = 7;
      }
      if (zaehler == 2 || zaehler == 5)
      {
        faktor = 3;
      }
      if (zaehler == 3 || zaehler == 6)
      {
        faktor = 1;
      }
      ergebnis = arbeiten * faktor;
      pruefziffer_gb = (ergebnis % 10) + pruefziffer_gb;
    }
    zaehler = 1;

    //Arbeitsschritt Amtskennzahl

    for (zaehler = 1; zaehler<=6; zaehler++)
    {
      arbeiten = amtsstelle % 10;
      if (zaehler == 1 || zaehler == 4)
      {
        faktor = 7;
      }
      if (zaehler == 2 || zaehler == 5)
      {
        faktor = 3;
      }
      if (zaehler == 3 || zaehler == 6)
      {
        faktor = 1;
      }
      ergebnis = arbeiten * faktor;
      pruefziffer_amt = (ergebnis % 10) + pruefziffer_amt;
    }
    System.out.println("Personalausweisnummer: " + personalausweisnummer + " und Pruefziffer: " + pruefziffer_pn);
    System.out.println("Geburtsdatum: " + geburtsdatum + " und Pruefziffer: " + pruefziffer_gb);
    System.out.println("Amtskennzahl: " + amtsstelle + " und Pruefziffer: " + pruefziffer_amt);
    zaehler = 1;
    
    //Arbeitsschritt 24-Ziffern-Rechnung
    
    for (zaehler = 1; zaehler<=24; zaehler++)
    {

      if (zaehler == 1 || zaehler == 4 || zaehler == 7)
      {
        faktor = 7;
        arbeiten = personalausweisnummer % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 2 || zaehler == 5 || zaehler == 8)
      {
        faktor = 3;
        arbeiten = personalausweisnummer % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 3 || zaehler == 6 || zaehler == 9)
      {
        faktor = 1;
        arbeiten = personalausweisnummer % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }

      if (zaehler == 10)
      {
        faktor = 7;
        finale_pruefziffer = finale_pruefziffer + (pruefziffer_pn * faktor) % 10;
      }
      if (zaehler == 11 || zaehler == 14)
      {
        faktor = 3;
        arbeiten = geburtsdatum % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 12 || zaehler == 15)
      {
        faktor = 1;
        arbeiten = geburtsdatum % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 13 || zaehler == 16)
      {
        faktor = 7;
        arbeiten = geburtsdatum % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }

      if (zaehler == 17)
      {
        faktor = 3;
        finale_pruefziffer = finale_pruefziffer + (pruefziffer_gb * faktor) % 10;
      }
      if (zaehler == 18 || zaehler == 21)
      {
        faktor = 1;
        arbeiten = amtsstelle % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 19 || zaehler == 22)
      {
        faktor = 7;
        arbeiten = amtsstelle % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 20 || zaehler == 23)
      {
        faktor = 3;
        arbeiten = amtsstelle % 10;
        ergebnis = (arbeiten * faktor) % 10;
      }

      if (zaehler == 24)
      {
        faktor = 1;
        finale_pruefziffer = finale_pruefziffer + (pruefziffer_amt * faktor) % 10;
      }
      
      finale_pruefziffer = finale_pruefziffer + ergebnis;

      
    }
    letzte_ziffer = finale_pruefziffer % 10;
    System.out.println("Finale Pruefziffer: " + letzte_ziffer);
  }
}
```
[/code]


----------



## SlaterB (12. Mai 2008)

du musst schon sagen, was in deinem Programm falsch sein soll,
z.B. nach welchen Regeln es theoretisch arbeiten müsste,
welche Prüfzifffer bei welcher Eingabe kommen soll usw.


----------



## Janus (12. Mai 2008)

```
arbeiten = personalausweisnummer % 10;
```
deine variable arbeiten beinhaltet in jedem schleifendurchlauf exakt denselben wer, das sieht falsch aus.

und eine kleine anmerkung zum stil: man sollte abstand davon nehmen, sich am anfang des programms erstmal eine tonne variablen du deklarieren, die dann an diversen stellen in unterschiedlichen kontexten verwendet werden. man sieht sowas häufig noch bei alten c-programmierern, aber es ist eine sehr beliebte fehlerquelle. in modernen sprachen wie java sollte man variablen immer so lokal (und damit kurzlebig) wie möglich halten.


----------



## BloodyKnife (12. Mai 2008)

also das mit der Variable Arbeiten ist schon richtig, da er die Nummer in ihre einzelnen Bestandteile (also jede Zahl einzeln) zerlegen muss.

Als Beispiel: Auf meinem eigenen Perso (1515419727D<<9008261<1108280<<<<<<<8) müsste er bei einer richtigen Rechnung die Prüfziffer 8 erhalten. Aber bei dem obigen Programm erhalte ich immer nur eine 6. Und ich glaube kaum  das mein eigener Perso ungültig ist ^^

Der Algorithmus sieht auf jeden Fall vor, das bei den ersten drei Berechnungen jeweils in der Reihenfolge 7-3-1 erfolgen. (7, 3 & 1 sind hierbei die Faktoren für die Multiplikation).

In der letzten Berechnungsschleife sind alle Zahlen, auch die Ergebnisse der Prüfziffern der ersten drei Berechnungen einzubeziehen. Wobei hier jedoch weiterhin die Faktorenreihenfolge 7-3-1 vorgeschrieben ist.

Also wenn ihr als Beispiel eure Ausweisnummer(n) in dieses Programm eingibt, müsste er normalerweise die letzte Ziffer eures Persos als Ergebnis anzeigen. Bei mir hierbei die 8.


----------



## SlaterB (12. Mai 2008)

mann oh meter ist das schlecht, selbst auf Nachfrage immer noch nicht die Aufgabe erklärt, man darf es sich im Internet zusammensuchen:
http://www.pruefziffernberechnung.de/P/Personalausweis-DE.shtml

und mit
> arbeiten = personalausweisnummer % 10;
wurde der entscheidene Fehler schon genannt, das aber als 'stimmt schon' abgetan,

hier noch mal der gleiche Tipp:
schaue dir mit
System.out.println(arbeiten + ", " + faktor + " -> " + "erg: " + ergebnis);
am Ende der ersten Schleife an, wie das das Ergebnis zusammengerechnet wird, und vergleiche das mit einer Rechnung auf dem Papier

------

was ist eigentlich, wenn die erste Ziffer eine 0 ist, z.B. beim Geburtsdatum-Abschnitt kann das doch wohl passieren?
arbeite lieber direkt mit einem String, da werden die Nullen nicht rausgekürzt,
und dann charAt(), dann muss du dein % 10 nicht weiter verfolgen


----------



## BloodyKnife (14. Mai 2008)

Also erstmal: Danke für die hilfreichen Tipps  *smile*

Habe das Programm jetzt soweit umgeändert...bekomme allerdings Fehlermeldungen wie z.B. 
Compiliere C:\persopruefung.java mit Java-Compiler
persopruefung.java:32:50: incompatible types
found   : char
required: java.lang.String
          arbeiten = personalausweisnummer.charAt(0);

Hier nochmal der neue Quellcode:


```
//Hendrik Alexander Mennen
//Edewechter Landstraße 85
//26131 Oldenburg
//015112419182

class persopruefung
{
  public static void main(String args[])
  {
    int pruefziffer_pn=0, pruefziffer_gb=0, pruefziffer_amt=0;
    String personalausweisnummer, geburtsdatum, amtsstelle, ergebnis;
    String arbeiten;
    int zaehler =0, faktor=0;
    int finale_pruefziffer, letzte_ziffer;
    int pfz_pn=0, pfz_gb=0, pfz_amt=0;

    personalausweisnummer = IO.readString("Bitte geben Sie die ersten 10 Ziffern des ersten Blockes ein: ");
    geburtsdatum = IO.readString("Bitte geben Sie die ersten 7 Ziffern des zweiten Blockes ein: ");
    amtsstelle = IO.readString("Bitte geben Sie die ersten 7 Ziffern des dritten Blockes ein: ");

    //Arbeitsschritt Personalausweisnummer

    for(zaehler = 1;zaehler <=10 ;zaehler++)
    {


      if (zaehler == 1 || zaehler == 4 || zaehler == 7)
      {
        faktor = 7;
        if (zaehler == 1)
        {
          arbeiten = personalausweisnummer.charAt(0);
        }
        else
            if (zaehler == 4)
            {
              arbeiten = personalausweisnummer.charAt(3);
            }
            else
                if (zaehler == 7)
                {
                  arbeiten = personalausweisnummer.charAt(6);
                }
      }
      if (zaehler == 2 || zaehler == 5 || zaehler == 8)
      {
        faktor = 3;
        if (zaehler == 2)
        {
          arbeiten = personalausweisnummer.charAt(1);
        }
        else
            if (zaehler == 5)
            {
              arbeiten = personalausweisnummer.charAt(4);
            }
            else
                if (zaehler == 8)
                {
                  arbeiten = personalausweisnummer.charAt(7);
                }
      }
      if (zaehler == 3 || zaehler == 6 || zaehler == 9)
      {
        faktor = 1;
        if (zaehler == 3)
        {
          arbeiten = personalausweisnummer.charAt(2);
        }
        else
            if (zaehler == 6)
            {
              arbeiten = personalausweisnummer.charAt(5);
            }
            else
                if (zaehler == 9)
                {
                  arbeiten = personalausweisnummer.charAt(8);
                }
      }
      if (zaehler == 10)
      {
        pfz_pn = personalausweisnummer.charAt(9);
      }
      else
      {
        ergebnis = arbeiten * faktor;
        pruefziffer_pn = (ergebnis.charAt(1)) + pruefziffer_pn;
        
      }   
      System.out.println("Arbeitsziffer Personummer: " + arbeiten);
      
    }
    
    zaehler = 1;

    //Arbeitsschritt Geburtsdatum

    for (zaehler = 1; zaehler<=7; zaehler++)
    {


      if (zaehler == 1 || zaehler == 4)
      {
        faktor = 7;
        if (zaehler == 1)
        {
          arbeiten = geburtsdatum.charAt(0);
        }
        else
            if (zaehler == 4)
            {
              arbeiten = geburtsdatum.charAt(3);
            }
      }
      if (zaehler == 2 || zaehler == 5)
      {
        faktor = 3;
        if (zaehler == 2)
        {
          arbeiten = geburtsdatum.charAt(1);
        }
        else
            if (zaehler == 5)
            {
              arbeiten = geburtsdatum.charAt(4);
            }
      }
      if (zaehler == 3 || zaehler == 6)
      {
        faktor = 1;
        if (zaehler == 3)
        {
          arbeiten = geburtsdatum.charAt(2);
        }
        else
            if (zaehler == 6)
            {
              arbeiten = geburtsdatum.charAt(5);
            }
      }
      if (zaehler == 7)
      {
        pfz_gb = arbeiten;
      }
      else
      {
        ergebnis = arbeiten * faktor;
        pruefziffer_gb = (ergebnis.charAt(1)) + pruefziffer_gb;
      }
      System.out.println("Arbeitsziffer GB: " + arbeiten);
    }
    
    zaehler = 1;

    //Arbeitsschritt Amtskennzahl

    for (zaehler = 1; zaehler<=7; zaehler++)
    {

      System.out.println("Arbeitsziffer Amt: " + arbeiten);
      if (zaehler == 1 || zaehler == 4)
      {
        faktor = 7;
        if (zaehler == 1)
        {
          arbeiten = amtsstelle.charAt(0);
        }
        else
            if (zaehler == 4)
            {
              arbeiten = amtsstelle.charAt(3);
            }
      }
      if (zaehler == 2 || zaehler == 5)
      {
        faktor = 3;
        if (zaehler == 2)
        {
          arbeiten = amtsstelle.charAt(1);
        }
        else
            if (zaehler == 5)
            {
              arbeiten = amtsstelle.charAt(4);
            }
      }
      if (zaehler == 3 || zaehler == 6)
      {
        faktor = 1;
        if (zaehler == 3)
        {
          arbeiten = amtsstelle.charAt(2);
        }
        else
            if (zaehler == 6)
            {
              arbeiten = amtsstelle.charAt(5);
            }
      }
      if (zaehler == 7)
      {
        pfz_amt = arbeiten;
      }
      else
      {
        ergebnis = arbeiten * faktor;
        pruefziffer_amt = (ergebnis.charAt(1)) + pruefziffer_amt;
      }
      ergebnis = arbeiten * faktor;
      
      
    }
    
    System.out.println("Personalausweisnummer: " + personalausweisnummer + " und Pruefziffer: " + pruefziffer_pn);
    System.out.println("Geburtsdatum: " + geburtsdatum + " und Pruefziffer: " + pruefziffer_gb);
    System.out.println("Amtskennzahl: " + amtsstelle + " und Pruefziffer: " + pruefziffer_amt);
    zaehler = 1;
    
    //Arbeitsschritt 24-Ziffern-Rechnung
    
    for (zaehler = 1; zaehler<=24; zaehler++)
    {
   
      if (zaehler == 1 || zaehler == 4 || zaehler == 7)
      {
        faktor = 7;
        arbeiten = personalausweisnummer.charAt(zaehler);
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 2 || zaehler == 5 || zaehler == 8)
      {
        faktor = 3;
        arbeiten = personalausweisnummer.charAt(zaehler);
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 3 || zaehler == 6 || zaehler == 9)
      {
        faktor = 1;
        arbeiten = personalausweisnummer.charAt(zaehler);
        ergebnis = (arbeiten * faktor) % 10;
      }

      if (zaehler == 10)
      {
        faktor = 7;
        finale_pruefziffer = finale_pruefziffer + (pruefziffer_pn * faktor) % 10;
      }
      if (zaehler == 11 || zaehler == 14)
      {
        faktor = 3;
        if (zaehler == 11)
        {
          arbeiten = geburtsdatum.charAt(0);
        }
        else
            if (zaehler == 14)
            {
              arbeiten = geburtsdatum.charAt(3);
            }
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 12 || zaehler == 15)
      {
        faktor = 1;
        if (zaehler == 12)
        {
          arbeiten = geburtsdatum.charAt(1);
        }
        else
            if (zaehler == 15)
            {
              arbeiten = geburtsdatum.charAt(4);
            }
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 13 || zaehler == 16)
      {
        faktor = 7;
        if (zaehler == 13)
        {
          arbeiten = geburtsdatum.charAt(2);
        }
        else
            if (zaehler == 16)
            {
              arbeiten = geburtsdatum.charAt(5);
            }
        ergebnis = (arbeiten * faktor) % 10;
      }

      if (zaehler == 17)
      {
        faktor = 3;
        finale_pruefziffer = finale_pruefziffer + (pruefziffer_gb * faktor) % 10;
      }
      if (zaehler == 18 || zaehler == 21)
      {
        faktor = 1;
        if (zaehler == 18)
        {
          arbeiten = amtsstelle.charAt(0);
        }
        else
            if (zaehler == 21)
            {
              arbeiten = amtsstelle.charAt(3);
            }
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 19 || zaehler == 22)
      {
        faktor = 7;
        if (zaehler == 19)
        {
          arbeiten = amtsstelle.charAt(1);
        }
        else
            if (zaehler == 22)
            {
              arbeiten = amtsstelle.charAt(4);
            }
        ergebnis = (arbeiten * faktor) % 10;
      }
      if (zaehler == 20 || zaehler == 23)
      {
        faktor = 3;
        if (zaehler == 20)
        {
          arbeiten = amtsstelle.charAt(2);
        }
        else
            if (zaehler == 23)
            {
              arbeiten = amtsstelle.charAt(5);
            }
        ergebnis = (arbeiten * faktor) % 10;
      }

      if (zaehler == 24)
      {
        faktor = 1;
        finale_pruefziffer = finale_pruefziffer + (pruefziffer_amt * faktor) % 10;
      }
      
      finale_pruefziffer = finale_pruefziffer + ergebnis;

      
    }
    letzte_ziffer = finale_pruefziffer % 10;
    System.out.println("Finale Pruefziffer: " + letzte_ziffer);
  }
}
```

Wie ihr warhscheinlich bei den verbleibenden Mudolos lest, habe ich noch nicht alles abgeändert...weil ich schrittweise auf die funktionalität der einzelnen Tags prüfe.

Wie genau kann ich jetzt diese Zahlen einzeln in die Variable "arbeiten" einlesen?

Denn da hat er anscheinend Probleme mit.


----------



## SlaterB (15. Mai 2008)

also ich bin nach wie vor entsetzt,

versuche doch erstmal in einem 10-Zeilen Testprogramm,
aus einem String einen char auszulesen,
diesen dann mit 7 zu multiplizieren usw.

warum musst du das mit 350 Zeilen machen, wieso mit 10 Stellen des Personalausweises und 3 verschiedenen Faktoren und auch noch mit IO einlesen usw. usf.

wenn dein Programm so gut wie fertig ist, ok, 
aber dir fehlen ja viele Grundoperationen wie charAt(),

also versuche bitte ein Mini-Testprogramm mit
String test = "1";
und dann charAt() usw.
wenn da die gleichen Fragen kommen, dann ist wenigstens nicht das Forum zugespammt mit 350 Zeilen Programm


----------



## lohr (15. Mai 2008)

noch ein tipp fürs leben ^^
ich würde meine anschrift + telefonnumer nicht in ein öffentliches forum posten indem jeder gast zumindest lesen kann...


----------



## SlaterB (15. Mai 2008)

die komplette Persoalausweisnummer stört dich nicht? 

@BloodyKnife:
da ich inzwischen Zweifel habe, dass du die einzelnen Buchstaben des Strings dann auch noch in Zahlen umwandeln kannst
solltest du vielleicht doch besser bei deinem ersten Ansatz bleiben,

da bekommst du also mit % 10 die Einerziffer,
von 27 also 7,
nun musst du überlegen, wie du zur 2 kommst, ohne Programmierfähigkeiten natürlich auch nicht leicht,
hat was mit +, -, * oder / zu tun,
am besten auch wieder in einem kleinen Testprogramm testen, alles was dir einfällt ausprobieren


----------



## NTB (16. Mai 2008)

Kann mal bitte ein Admin zum Schutze des Delinquenten die persönlichen Daten löschen? Auch wenn es quasi schon zu spät ist...


----------



## BloodyKnife (12. Jun 2008)

So...nach langer versuchszeit hab ichs nun endlich geschafft^^ sind 192 Codezeilen geworden 


```
class AB11_zusatz
{
  public static void main(String args[])
  {
    int [] personum = new int [10], gebdatum = new int[7], ablauf = new int[7];
    //Eingabebereich
                    //Eingabe des ersten Blocks
                    for (int i=0;i<=9;i++)
                    {
                     personum[i] = IO.readInt("Bitte die " + (i+1) + ". Ziffer des ersten Blocks eingeben: ");
                    }

                    //Eingabe des zweiten Blocks
                    for (int i=0;i<=6;i++)
                    {
                     gebdatum[i] = IO.readInt("Bitte die " + (i+1) + ". Ziffer des zweiten Blocks eingeben: ");
                    }

                    //Eingabe des dritten Blocks
                    for (int i=0;i<=6;i++)
                    {
                     ablauf[i] = IO.readInt("Bitte die " + (i+1) + ". Ziffer des dritten Blocks eingeben: ");
                    }
                    //Ende des Eingabebereiches
//Beginn der Verabeitung
//Verarbeitung - Personalausweisnummer
    int perso_pruef=0, perso_sum=0;
    for (int i=0;i<=9;i++)
    {
      if (i == 0 || i == 3 || i == 6)
      {
        perso_sum = perso_sum + personum[i] * 7 % 10;
      }
      else
          if (i == 1 || i == 4 || i == 7)
          {
           perso_sum = perso_sum + personum[i] * 3 % 10;
          }
          else
              if (i == 2 || i == 5 || i == 8)
              {
                perso_sum = perso_sum + personum[i] * 1 % 10;
              }
              else
                  if (i == 9)
                  {
                    perso_pruef = personum[i];
                  }
    }
    perso_sum = perso_sum % 10;
    //Verarbeitung - Geburtsdatum
    int gebdatum_sum = 0, gebdatum_pruef = 0;
    for (int i=0;i<=6;i++)
    {
      if (i == 0 || i == 3)
      {
        gebdatum_sum = gebdatum_sum + gebdatum[i] * 7 % 10;
      }
      else
          if (i == 1 || i == 4)
          {
           gebdatum_sum = gebdatum_sum + gebdatum[i] * 3 % 10;
          }
          else
              if (i == 2 || i == 5)
              {
                gebdatum_sum = gebdatum_sum + gebdatum[i] * 1 % 10;
              }
              else
                  if (i == 6)
                  {
                    gebdatum_pruef = gebdatum[i];
                  }
    }
    gebdatum_sum = gebdatum_sum % 10;
    //Verarbeitung - Ablaufdatum
    int ablauf_sum = 0, ablauf_pruef = 0;
    for (int i=0;i<=6;i++)
    {
      if (i == 0 || i == 3)
      {
        ablauf_sum = ablauf_sum + ablauf[i] * 7 % 10;
      }
      else
          if (i == 1 || i == 4)
          {
           ablauf_sum = ablauf_sum + ablauf[i] * 3 % 10;
          }
          else
              if (i == 2 || i == 5)
              {
                ablauf_sum = ablauf_sum + ablauf[i] * 1 % 10;
              }
              else
                  if (i == 6)
                  {
                    ablauf_pruef = ablauf[i];
                  }
    }
    ablauf_sum = ablauf_sum % 10;
    //Ausgabe der ersten Überprüfungsergebnisse
    if (perso_sum == perso_pruef)
    {
      System.out.println("Die erste Pruefziffer ist Korrekt");
    }
    else
    {
      System.out.println("Die erste Pruefziffer ist Inkorrekt");
    }
    if (gebdatum_sum == gebdatum_pruef)
    {
      System.out.println("Die zweite Pruefziffer ist Korrekt");
    }
    else
    {
      System.out.println("Die zweite Pruefziffer ist Inkorrekt");
    }
    if (ablauf_sum == ablauf_pruef)
    {
      System.out.println("Die dritte Pruefziffer ist Korrekt");
    }
    else
    {
    System.out.println("Die dritte Pruefziffer ist Inkorrekt");
    }
    //Ende der Ausgabe
    //Beginn der großen Rechnung - Finale Überprüfung
    int gesamt_pruefziffer = 0, gesamt_berechnung = 0;
    gesamt_pruefziffer = IO.readInt("Bitte geben Sie die letzte Ziffer auf Ihrem Personalausweis ein: ");
    for (int i=0;i<=23;i++)
    {
      //I 0 bis 9 - Personalsausweisnummer inkl. Prüfziffer
      if (i == 0 || i == 3 || i == 6 || i == 9)
      {
        gesamt_berechnung = gesamt_berechnung + personum[i] * 7 % 10;
      }
      else
          if (i == 1 || i == 4 || i == 7)
          {
           gesamt_berechnung = gesamt_berechnung + personum[i] * 3 % 10;
          }
          else
              if (i == 2 || i == 5 || i == 8)
              {
                gesamt_berechnung = gesamt_berechnung + personum[i] * 1 % 10;
              }
      //I 10 bis 16 - Geburtsdatum inkl. Prüfziffer
      if (i == 10 || i == 13 || i == 16)
      {
        if (i == 10)
        {
        gesamt_berechnung = gesamt_berechnung + gebdatum[0] * 3 % 10;
        }
        else
            if (i == 13)
            {
              gesamt_berechnung = gesamt_berechnung + gebdatum[3] * 3 % 10;
            }
            else
                if (i == 16)
                {
                  gesamt_berechnung = gesamt_berechnung + gebdatum[6] * 3 % 10;
                }
      }
      else
          if (i == 11 || i == 14)
          {
            if ( i == 11)
            {
              gesamt_berechnung = gesamt_berechnung + gebdatum[1] * 1 % 10;
            }
            else
                if (i == 14)
                {
                  gesamt_berechnung = gesamt_berechnung + gebdatum[4] * 1 % 10;
                }
          }
          else
              if (i == 12 || i == 15)
              {
                if (i == 12)
                {
                  gesamt_berechnung = gesamt_berechnung + gebdatum[2] * 7 % 10;
                }
                else
                    if (i == 15)
                    {
                      gesamt_berechnung = gesamt_berechnung + gebdatum[5] * 7 % 10;
                    }
              }
      // I 17 bis 23 - Ablaufdatum inkl. Prüfziffer
      if (i == 17 || i ==20 || i == 23)
      {
        if (i == 17)
        {
          gesamt_berechnung = gesamt_berechnung + ablauf[0] * 1 % 10;
        }
        else
            if (i == 20)
            {
              gesamt_berechnung = gesamt_berechnung + ablauf[3] * 1 % 10;
            }
            else
                if (i == 23)
                {
                  gesamt_berechnung = gesamt_berechnung + ablauf[6] * 1 % 10;
                }
      }
      else
          if (i == 18 || i == 21)
          {
            if (i == 18)
            {
              gesamt_berechnung = gesamt_berechnung + ablauf[1] * 7 % 10;
            }
            else
                if (i == 21)
                {
                  gesamt_berechnung = gesamt_berechnung + ablauf[4] * 7 % 10;
                }
          }
          else
              if (i == 19 || i == 22)
              {
                if (i == 19)
                {
                  gesamt_berechnung = gesamt_berechnung + ablauf[2] * 3 % 10;
                }
                else
                    if (i == 22)
                    {
                     gesamt_berechnung = gesamt_berechnung + ablauf[5] * 3 % 10;
                    }
              }


    }
    gesamt_berechnung = gesamt_berechnung % 10;
    if (gesamt_berechnung == gesamt_pruefziffer)
    {
      System.out.println("Der Personalausweis ist Gültig");
    }
    else
    {
      System.out.println("Der Personalausweis ist Ungültig");
    }
  }
}
```


----------



## y0dA (12. Jun 2008)

Solltet ihr das wirklich in Java machen, sieht mir eher nach C aus was du da so schreibst 

Oder habt ihr noch nicht viel mit Java gemacht ausser IF- und FOR - Schleife?


----------



## BloodyKnife (18. Jun 2008)

Also in meiner alten Schule in Syke haben wir C++ gelernt....

In Java sollte ich auf meiner neuen Schule dieses Problem lösen..

mehr als if-for- und while-schleifen hatten wir noch nicht


----------



## Saxony (19. Jun 2008)

Hallo,

falls das Thema noch interessant sein sollte, hab ich mal eine etwas schlankere Überprüfung zusammen gebaut:


```
public static void main(String[] args) {
	
		System.out.println(Perso.checkID("2406055684<6810203<0705109<6"));
		System.out.println(Perso.checkID("1515419727<9008261<1108280<8"));
		System.out.println(Perso.checkID("2406055684<6810203<0715109<6"));
		System.out.println(Perso.checkID("1515419727<9009261<1108280<8"));
	}
	
	public static boolean checkID(String aID) {
		
		String[] subs = aID.split("<");
		int[] wgt = {7,3,1};
		int tmp = 0, com = 0, pos = 0;
				
		for(int a = 0; a < subs.length-1; a++, tmp = 0) {
			
			for(int i = 0; i < subs[a].length()-1; i++) {
				
				tmp += ((subs[a].charAt(i) - 48) * wgt[i%3]) % 10;
				com += ((subs[a].charAt(i) - 48) * wgt[pos++%3]) % 10;
			}
			if (tmp % 10 != subs[a].charAt(subs[a].length()-1)-48) return false;
			com += ((tmp % 10) * wgt[pos++ % 3]) % 10;
		}
		if (com % 10 != subs[subs.length-1].charAt(subs[subs.length-1].length()-1)-48) return false;
		
		return true;
	}
```

Insgesamt also 2xfor und 2xif! 

[edit]
Für alle die sich wundern, wieso das vielleicht so kryptisch aussieht! Hier die Erklärung:
*Malen Sie das zu Ihrer Lösung gehörige Struktogramm!* 
[/edit]

bye Saxony


----------

