C# :: Aufgabe #350 :: Lösung #1
2 Lösungen
#350
Seriennummer Euro- Banknoten überprüfen (bis 2013)
Anfänger - C#
von JKooP
- 26.01.2021 um 10:26 Uhr
Jede Banknote enthält eine eindeutige Seriennummer, bestehend aus 12 Zeichen
mit folgender alphanumerischer Signatur (ab 2013 abweichend):
LNNNNNNNNNNJ (z.B. X17291528696)
L: Ländercode als Buchstabe von A bis Z (z.B. X für Deutschland, N für Österreich…)
N: 10 Ziffern von 0 bis 9
J: Prüfziffer von 1 bis 9
Berechnung der Prüfziffer:
Der Ländercode muss in eine Zahl umgewandelt werden.
Diese ergibt sich aus der Position des Buchstabens im Alphabet. (A = 1, B = 2; … X = 24)
Dann wird die Quersumme aus der entstandenen Zahl des Ländercodes und den 10 folgenden Ziffern ohne Prüfziffer gebildet.
241729152869 => 2+4+1+7+2+9+1+5+2+8+6+9 = 56
Es wird der Rest (R) der Division durch 9 ermittelt
R = 56 Modulo 9 = 2
und dann der Prüfwert (P).
P = 8 – R => 8 – 2 = 6
Wenn P = 0, dann ist J = 9, ansonsten ist J = P.
X17291528696 => gültige Banknote!
Aufgabe:
Schreibe ein Programm, welches folgende Ergebnisse liefert:
1. Prüfen, ob es sich bei der eingegebenen Seriennummer um die richtige Signatur handelt.
2. Generieren der Prüfziffer J aus dem Ländercode und den folgenden 10 Ziffern.
3. Prüfen, ob es sich bei Eingabe einer Seriennummer um eine Euro- Banknote handelt.
4. Ausgabe des zugehörigen Landes der Euro- Banknote (siehe NZB-Kennung)
Viel Spaß
mit folgender alphanumerischer Signatur (ab 2013 abweichend):
LNNNNNNNNNNJ (z.B. X17291528696)
L: Ländercode als Buchstabe von A bis Z (z.B. X für Deutschland, N für Österreich…)
N: 10 Ziffern von 0 bis 9
J: Prüfziffer von 1 bis 9
Berechnung der Prüfziffer:
Der Ländercode muss in eine Zahl umgewandelt werden.
Diese ergibt sich aus der Position des Buchstabens im Alphabet. (A = 1, B = 2; … X = 24)
Dann wird die Quersumme aus der entstandenen Zahl des Ländercodes und den 10 folgenden Ziffern ohne Prüfziffer gebildet.
241729152869 => 2+4+1+7+2+9+1+5+2+8+6+9 = 56
Es wird der Rest (R) der Division durch 9 ermittelt
R = 56 Modulo 9 = 2
und dann der Prüfwert (P).
P = 8 – R => 8 – 2 = 6
Wenn P = 0, dann ist J = 9, ansonsten ist J = P.
X17291528696 => gültige Banknote!
Aufgabe:
Schreibe ein Programm, welches folgende Ergebnisse liefert:
1. Prüfen, ob es sich bei der eingegebenen Seriennummer um die richtige Signatur handelt.
2. Generieren der Prüfziffer J aus dem Ländercode und den folgenden 10 Ziffern.
3. Prüfen, ob es sich bei Eingabe einer Seriennummer um eine Euro- Banknote handelt.
4. Ausgabe des zugehörigen Landes der Euro- Banknote (siehe NZB-Kennung)
Viel Spaß
#1
von dany_mue (240 Punkte)
- 15.02.2021 um 22:13 Uhr
using System;
namespace TJP350_Banknoten
{
enum Code
{
Litauen = 2,
Lettland,
Estland,
Slowakei,
Malta,
Zypern,
Slowenien,
Vereinigtes_Königreich = 10,
Schweden,
Finnland,
Portugal,
Österreich,
Niederlande = 16,
Luxemburg = 18,
Italien,
Irland,
Frankreich,
Spanien,
Dänemark,
Deutschland,
Griechenland,
Belgien
}
class Program
{
// members
static int[] serialNumber;
static Code countryCode = new Code();
/// <summary>
/// Main
/// </summary>
static void Main(string[] args)
{
do
{
Console.Clear();
if (CheckUserInput())
{
if (CheckSerialNumber(serialNumber))
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Die eingegebene Seriennummer ist gültig und stammt aus dem Land {0}!", countryCode);
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Die eingegebene Seriennummer ist ungültig, du kleiner Fälscher!");
}
Console.ForegroundColor = ConsoleColor.White;
}
else
{
Console.WriteLine("Das Format der eingegebenen Seriennummer ist nicht gültig!");
Console.WriteLine("(Format: LNNNNNNNNNNN z.B. A12345678901)");
}
// do a new test?
Console.WriteLine("\r\nWeitere Eingabe (ENTER) - Abbrechen mit beliebiger Taste");
} while (Console.ReadKey().Key == ConsoleKey.Enter);
}
/// <summary>
/// check user input
/// </summary>
private static bool CheckUserInput()
{
// user input
Console.Write("Bitte Seriennummer eingeben: ");
string input = Console.ReadLine().ToUpper();
// check length
if (input.Length != 12)
return false;
// check first element (country code)
if (Char.IsDigit(input[0]))
return false;
else
input = GetCountryCode(input[0], out countryCode) + input.Substring(1);
// check all elements
if (!long.TryParse(input, out long result))
return false;
// convert string to array
serialNumber = new int[input.Length];
for (int i=0; i<input.Length; i++)
{
serialNumber[i] = int.Parse(input[i].ToString());
}
// input pattern is correct
return true;
}
/// <summary>
/// get country code
/// </summary>
private static string GetCountryCode(char code, out Code countryCode)
{
countryCode = (Code)code - 64;
return ((int)code - 64).ToString();
}
/// <summary>
/// check serial number
/// </summary>
private static bool CheckSerialNumber(int[] serialNumber)
{
// calculate the checksum
int sum = 0;
for (int i=0; i<serialNumber.Length - 1; i++)
{
sum += serialNumber[i];
}
// validate the checksum
int validationNumber = sum % 9 == 0 ? 9 : 8 - sum % 9;
if (validationNumber == serialNumber[serialNumber.Length - 1])
return true;
return false;
}
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
