C :: Aufgabe #60 :: Lösung #2
2 Lösungen

#60
IBAN Checksumme prüfen
Anfänger - C
von pocki
- 26.11.2014 um 12:27 Uhr
Schreibe eine Funktion, welche einen IBAN als Zeichenfolge entgegen nimmt.
Bei diese Zeichenfolge soll überprüft werden, ob die Checksumme/Prüfsumme für eine gültige IBAN stimmt.
Die unterschiedliche Schreibweisen (mit und ohne Freiraum) sowie die unterschiedlichen Längen je nach Land sind ebenfalls zu berücksichtigen.
Beispiele der Schreibweisen:
DE19 1234 1234 1234 1234 12
DE19-1234-1234-1234-1234-12
DE19123412341234123412
AT19 1234 1234 1234 1234
CH19 1234 1234 1234 1234 1
Bei diese Zeichenfolge soll überprüft werden, ob die Checksumme/Prüfsumme für eine gültige IBAN stimmt.
Die unterschiedliche Schreibweisen (mit und ohne Freiraum) sowie die unterschiedlichen Längen je nach Land sind ebenfalls zu berücksichtigen.
Beispiele der Schreibweisen:
DE19 1234 1234 1234 1234 12
DE19-1234-1234-1234-1234-12
DE19123412341234123412
AT19 1234 1234 1234 1234
CH19 1234 1234 1234 1234 1
#2

von Jordan (210 Punkte)
- 13.03.2015 um 14:21 Uhr

// IBAN prüfsumme.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "string.h" #include "stdlib.h" #include "stdint.h" #include "math.h" char *deletespace(char iban[]) { //char iban_ohne_Füllzeichen[50]=""; char* iban_ohne_Füllzeichen = (char*)malloc(sizeof(char)*50); //leerzeichen löschen int j = 0; for(int i = 0; i<=strlen(iban); i++) { if(iban[i] != ' ' && iban[i] != '-') { iban_ohne_Füllzeichen[j] = iban[i]; j++; } if(iban[i] == ' ' && iban[i] == '-') { i++; iban_ohne_Füllzeichen[j] = iban[i]; j++; } } return iban_ohne_Füllzeichen; } char *p_summe(char *iban_ohne_Füllzeichen) { //char number[50]=""; char* number = (char*)malloc(sizeof(char)*50); *number = NULL; //ersten vier chars nach hinten setzen strcpy(number, &iban_ohne_Füllzeichen[4]); int size = strlen(number); for(int i = 0; i<=2; i++) { int z = iban_ohne_Füllzeichen[i]-55; //zeichen im ascii 55 abziehen bedeutet a = 10, b = 11 usw. char a[3]; itoa(z,a,10); //umwandlung in char strcat(number,a); //der Zeichenkette anfügen } number[strlen(number)-2] = '0'; number[strlen(number)-1] = '0'; return number; } char *v_summe(char *iban_ohne_Füllzeichen) { //char number[50]=""; char* number = (char*)malloc(sizeof(char)*50); *number = NULL; //ersten vier chars nach hinten setzen strcpy(number, &iban_ohne_Füllzeichen[4]); int size = strlen(number); for(int i = 0; i<=3; i++) { int z = 0; if(i == 0 || i == 1) { z = iban_ohne_Füllzeichen[i]-55; //zeichen im ascii 55 abziehen bedeutet a = 10, b = 11 usw. } else { z = iban_ohne_Füllzeichen[i]-48; } char a[3]; itoa(z,a,10); //umwandlung in char strcat(number,a); //der Zeichenkette anfügen } return number; } int modulo(char number[], int div) { const int teil_length = 6; int string_length= strlen(number); int cuts = (string_length / teil_length) + 1; int mo_div = div; int teil_cut; int rest = 0; if(string_length < 6) { char temp[10] = ""; rest = atoi(number) % mo_div; } for(int i = 0; i<cuts; i++) { if(i <cuts-1) { rest = rest*pow(10.0,teil_length); } char temp[10] = ""; strncpy(temp,&number[i*6],6); teil_cut = rest + atoi(temp); rest = teil_cut % mo_div; } return rest; } void validierung_pruefen(char iban[]) { char *v_number = v_summe(deletespace(iban)); int rest = modulo(v_number,97); if(rest == 1) { printf("Die validierung ist OK\n"); } else { printf("Die validierung ist nicht inordnung!!!!\n"); } } void pruefsummenCheck(char iban[]) { char *p_number = p_summe(deletespace(iban)); int rest = modulo(p_number,97); int pruefSumme = 98 -rest; char p_zeichen[2] =""; p_zeichen[0] = iban[2]; p_zeichen[1] = iban[3]; int PSUMME = atoi(p_zeichen); if(pruefSumme == PSUMME) { printf("Die Pruefsumme stimmt ueberein\nDie Iban ist correct\n\n\n"); } else { printf("Die Pruefsumme stimmt nicht ueberein\nDie Iban ist fehlerhaft\n\n\n"); } } int main() { char iban[50]= "DE68 2105 0170 0012 3456 78"; printf("iban: %s\n",iban); validierung_pruefen(iban); pruefsummenCheck(iban); char iban2[50]= "DE19 1234 1234 1234 1234 12"; printf("iban: %s\n",iban2); validierung_pruefen(iban2); pruefsummenCheck(iban2); getchar(); return 0; }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1