Programm zur Personalausweisprüfung

Status
Nicht offen für weitere Antworten.
B

BloodyKnife

Gast
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:

Code:
//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]
 
S

SlaterB

Gast
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

Bekanntes Mitglied
Code:
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.
 
B

BloodyKnife

Gast
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.
 
S

SlaterB

Gast
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
 
B

BloodyKnife

Gast
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:

Code:
//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.
 
S

SlaterB

Gast
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 ;)
 
L

lohr

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

SlaterB

Gast
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

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

BloodyKnife

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

Code:
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

Top Contributor
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?
 
B

BloodyKnife

Gast
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

Top Contributor
Hallo,

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

Code:
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! :D
[/edit]

bye Saxony
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
J Nachrichten Filter Programm Allgemeine Java-Themen 14
J Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
T Java Programm sauber beenden (Mac OS) Allgemeine Java-Themen 7
O Programm wird einfach "gekillt" Allgemeine Java-Themen 3
L TV Programm API/Web Service o.ä. Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben