Prüfziffer erstellen

steffal996

Mitglied
Hallo ihr Lieben!
Ich habe ein kleines Problem wo ich nicht weiter komme.

Ich habe einen String, bei diesem soll jeder Buchstabe einen Wert bekommen, also A = 1, B = 2, usw.
Diese werden zusammenaddiert und der ganzzahlige Rest einer Division der Summe durch 16 wird als Prüfziffer angehängt. Da hierbei Werte von 0 bis 15 auftreten können, wird anstelle einer Dezimalziffer die entsprechende Hexziffer angehängt.

Mein Gedanke war aus dem String ein char-Array zu machen und anschließend in einer for schleife das Alphabet hochzuzählen...aber an der Ausführung scheitere ich noch.

Über hilfe wäre ich sehr dankbar!
 

stg

Top Contributor
Das String-Objekt beinhaltet schon ein solches char-Array, wie du es suchst. Auf einzelne chars des Strings kannst du mit charAt zugreifen
 

steffal996

Mitglied
Ich habe jetzt versucht es auf diese art zu lösen, aber leider läuft dann gar nichts.. wo ist der fehler?

Java:
String kurzbartnr = s + String.format("%04d", nummer%10000);

        int summe = 0;
        int summe1 = 0;
        int summe2 = 0;
        int zahl1 = 0;
        int zahl2 = 0;
       
        for(int i = 0; i <=kurzbartnr.length(); i++){
            if(Character.isDigit(kurzbartnr.charAt(i))){
                zahl1 = kurzbartnr.charAt(i)- '0';
                summe1 = summe1 + zahl1;
            }
            else {
            zahl2 = kurzbartnr.charAt(i)-'A' + 1;
            summe2 = summe2 + zahl2;
        }
        summe = summe1 + summe2;
        }
       
        int rest = summe % 16;

        String pruefziffer = Integer.toHexString(rest);
       
        String kurzbezeichnung = kurzbartnr + pruefziffer.toUpperCase();
       
        return kurzbezeichnung;
    }
 

steffal996

Mitglied
Sorry hier die komplette Methode zur erzeugung einer Kurzbezeichnung die aus einer Bezeichnung erzeugt werden sollte, aus dieser Bezeichnung 8 stellen nimmt, anschließend 4 stellen aus der Artikelbezeichnung und 1 Prüfziffer die sich wie oben geschildert aus der Kurzbezeichnung und den vier Stellen der Artikelbezeichnung bilden soll.
Java:
public static String erzeugeKurzbezeichnung(int nummer, String bezeichnung) {

        String s = bezeichnung.replaceAll("ß", "s").toUpperCase();
        s = s.replaceAll("[aeouiAEOUIöäüÖÄÜ-]", "");
        s = s.replaceAll("\\s+", "");
        s = s.replaceAll("\\W", "");

        if(s.length() > 8){
            s = s.substring(0, 8);
        }

        String kurzbartnr = s + String.format("%04d", nummer%10000);

        int summe = 0;
        int summe1 = 0;
        int summe2 = 0;
        int zahl1 = 0;
        int zahl2 = 0;
      
        for(int i = 0; i <=kurzbartnr.length(); i++){
            if(Character.isDigit(kurzbartnr.charAt(i))){
                zahl1 = kurzbartnr.charAt(i)- '0';
                summe1 = summe1 + zahl1;
            }
            else {
            zahl2 = kurzbartnr.charAt(i)-'A' + 1;
            summe2 = summe2 + zahl2;
        }
        summe = summe1 + summe2;
        }
      
        int rest = summe % 16;

        String pruefziffer = Integer.toHexString(rest);
      
        String kurzbezeichnung = kurzbartnr + pruefziffer.toUpperCase();
      
        return kurzbezeichnung;
    }
Und das ist seine Fehlermeldung:
Code:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 12
    at java.lang.String.charAt(String.java:658)
    at Artikel.erzeugeKurzbezeichnung(Artikel.java:67)
    at Artikel.getKurzbezeichnung(Artikel.java:29)
    at Artikel.toString(Artikel.java:89)
    at java.lang.String.valueOf(String.java:2994)
    at java.io.PrintStream.println(PrintStream.java:821)
    at Artikel.main(Artikel.java:97)
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

nutze bitte die Code-tags, so bekommt man ja Augenkrebs :confused:

Der Fehler liegt hier: at java.lang.String.charAt(String.java:658), allerdings weiß keiner, was genau Zeile 658 ist!

Eventuell aber dies hier:
for(int i = 0; i <=kurzbartnr.length(); i++){
Du solltest hier nur bis "< länge" durch laufen !!

Gruß Klaus
 

Neue Themen


Oben