IBAN-Rechner Modulo Probleme
-
Hallo,
ich bin hänge beim Entwickeln eines IBAN-Rechners etwas fest.
Die Eingabe der BLZ und Kontonr. mit anschliesender Umwandlung in ein
char array nIban[25] = BLZ + Iban + Ländercode funktioniert.
Danach kommt die folgende berechnug der Prüfziffer.char modulo[10]; strncpy(modulo, nIban, 9); modulo[9] = '\0'; char *succ; //Modulo Rechnung von der 24-Stelligen Zahl int rest = strtol(modulo, &succ, 10); rest = rest % 97; sprintf(modulo,"%i",rest); memcpy(modulo + 2, nIban + 9, 7); rest = strtol(modulo, &succ, 10); rest = rest % 97; sprintf(modulo,"%i",rest); memcpy(modulo + 2, nIban + 16, 7); rest = strtol(modulo, &succ, 10); rest = rest % 97; sprintf(modulo,"%i",rest); modulo[2] = '0'; modulo[3] = '\0'; rest = strtol(modulo, &succ, 10); sprintf(modulo,"%i",rest); //Pruefzifferberechnung int pruefziffer = 98 - rest;
Aber irgendwie wird die Prüfziffer immer negativ.
Probiere mich schon seit Tagen an diesem Problem und komme nicht weiter.
Habt ihr ne Idee oder nen Ansatz?
-
hast du das mal mit einem debugger durchlaufen bzw. die zwischenergebnisse ausgeben lassen?
also ab zeile 1 kopierst du 9 stellen ab 0 ins array, wandelst das in einen long um und berechnest den ein- oder zweistelligen rest, den du dann wieder ins array schiebst.
ab zeile 12 bzw. zeile 17 hängst du 7 weitere ziffern an das array ab stelle 2 an. frage: was passiert, wenn der rest nur einstellig ist?
achja und probiers ma mit unsigned-variablen.
-
Falls in Zeile 19 ein zweistelliges Ergebnis herauskommt (... % 97 kann schließlich 0 bis 96 ergeben), wird das zweistellige Ergebnis in Zeile 20 nach modulo geschrieben, und in Zeile 22 und 23 dreistellig gemacht; naja und 98 - dreistellige Zahl ist halt negativ ...
-
Danke für eure Hilfe hab den Fehler jetzt behoben.
Bin noch neu hier... muss ich den Thread jetzt löschen oder darf er bestehen bleiben?
-
@ccoder94 sagte in IBAN-Rechner Modulo Probleme:
Bin noch neu hier... muss ich den Thread jetzt löschen oder darf er bestehen bleiben?
Bitte einfach gar nichts tun.
-
ccoder94
Wenn du neu bist erstmal ein: Willkommen!Lass den Thread stehen und mach einfach nichts. Der Grund ist das andere aus deinen Fehlern lernen können und auch dein Code-Snippet benutzen können, um auch einen IBAN-Rechner zu bauen oder damit zu lernen.
Das ist nun mal der Sinn eines Forums/Community, dass man Wissen austauschen kann
Wäre doch schade, wenn das nicht möglich ist