C# :: Aufgabe #294
4 Lösungen
Berechnen der Prüfziffer einer EAN- Nummer
Anfänger - C#
von JKooP
- 29.03.2020 um 13:53 Uhr
Schreibe ein Programm mit dem man sowohl die Prüfziffer einer EAN- Nummer (Europäische Artikel- Nummerierung) berechnen als auch überprüfen kann.
Die EAN- Nummer besteht aus 13 Ziffern, wobei es sich bei der letzten Ziffer um die Prüfziffer handelt.
Beispiel für eine EAN: 978381582086[?]
Die Prüfziffer wird berechnet, indem man die ersten 12 Ziffern von links beginnend abwechselnd mit 1 und 3 multipliziert und anschließend die Produkte summiert.
Die Differenz zum nächsten Vielfachen von 10 ist die Prüfziffer.
Ist die Summe durch 10 teilbar, ist die Prüfziffer die Ziffer 0.
9·1 + 7·3 + 8·1 + 3·3 + 8·1 + 1·3 + 5·1 + 8·3 + 2·1 + 0·3 + 8·1 + 6·3
= 9 + 21 + 8 + 9 + 8 + 3 + 5 + 24 + 2 + 0 + 8 + 18 = 115
115 + 5 = 120 ⇒ Prüfziffer: 5
Viel Spaß
Die EAN- Nummer besteht aus 13 Ziffern, wobei es sich bei der letzten Ziffer um die Prüfziffer handelt.
Beispiel für eine EAN: 978381582086[?]
Die Prüfziffer wird berechnet, indem man die ersten 12 Ziffern von links beginnend abwechselnd mit 1 und 3 multipliziert und anschließend die Produkte summiert.
Die Differenz zum nächsten Vielfachen von 10 ist die Prüfziffer.
Ist die Summe durch 10 teilbar, ist die Prüfziffer die Ziffer 0.
9·1 + 7·3 + 8·1 + 3·3 + 8·1 + 1·3 + 5·1 + 8·3 + 2·1 + 0·3 + 8·1 + 6·3
= 9 + 21 + 8 + 9 + 8 + 3 + 5 + 24 + 2 + 0 + 8 + 18 = 115
115 + 5 = 120 ⇒ Prüfziffer: 5
Viel Spaß
Lösungen:
Hallo,
mir mein Lösungsvorschlag.
C#-Code
hier der XAML Code
C#-Code
mir mein Lösungsvorschlag.
using System;
using System.Windows;
namespace EAN_Prüfsumme
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ButtonBerechne_Click(object sender, RoutedEventArgs e)
{
int prüfsumme = 0;
string c;
int zahl = 0;
int summe = 0;
string eingabe = TextBoxEingabe.Text;
if (eingabe.Length != 12)
{
TextBoxAusgabe.Text = "Falsche Eingabe";
}
else
{
for (int i = 1; i < eingabe.Length + 1; i++)
{
if (i % 2 == 0)
{
c = eingabe[i - 1].ToString();
zahl = (Convert.ToInt32(c)) * 3;
TextBoxAusgabe.Text = c.ToString();
}
else
{
c = eingabe[i - 1].ToString();
zahl = (Convert.ToInt32(c));
TextBoxAusgabe.Text = c.ToString();
}
summe = summe + zahl;
}
if (summe % 10 == 0)
{
prüfsumme = 0;
}
else
{
while (summe % 10 != 0)
{
summe++;
prüfsumme++;
}
}
}
TextBoxAusgabe.Text = prüfsumme.ToString();
}
}
}
hier der XAML Code
<Window x:Class="EAN_Prüfsumme.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:EAN_Prüfsumme"
mc:Ignorable="d"
Title="EAN Prüfsumme" Height="321" Width="355">
<Grid>
<TextBox x:Name="TextBoxEingabe" HorizontalAlignment="Left" Height="28" Margin="39,63,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="265" />
<Button x:Name="ButtonBerechne" Content="Berechne Prüfsumme" HorizontalAlignment="Left" Height="37" Margin="39,108,0,0" VerticalAlignment="Top" Width="265" Click="ButtonBerechne_Click" />
<TextBox x:Name="TextBoxAusgabe" HorizontalAlignment="Left" Height="29" Margin="39,198,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="265" />
<Label Content="Bitte eine EAN Nummer (12-stellig) eingeben:" HorizontalAlignment="Left" Height="42" Margin="39,21,0,0" VerticalAlignment="Top" Width="529" />
<Label Content="Prufsumme" HorizontalAlignment="Left" Height="30" Margin="39,168,0,0" VerticalAlignment="Top" Width="265" />
</Grid>
</Window>
using System;
namespace EAN
{
class Program
{
static void Main(string[] args)
{
string ean = "9783815820865";
bool b = ValidateEAN(ean);
if (b)
Console.WriteLine("EAN " + ean + " ist gültig.");
else
Console.WriteLine("EAN " + ean + " ist ungültig.");
Console.ReadKey();
}
private static bool ValidateEAN(string ean)
{
string noEan = ean.Substring(0, ean.Length - 2);
short checkDigit = Convert.ToInt16(ean.ToCharArray().GetValue(ean.Length-1).ToString());
int calcDigit = CalculateCheckDigitEAN(ean);
return (calcDigit == checkDigit);
}
private static int CalculateCheckDigitEAN(string ean)
{
int checksum = 0;
for (int i = 0; i < 12; i++)
{
short number = Convert.ToInt16(ean.ToCharArray().GetValue(i).ToString());
if (i % 2 == 0)
number *= 1;
else if (i % 2 == 1)
number *= 3;
checksum += number;
}
return (10 - checksum % 10);
}
}
}
Net Core 3.x
C#-Code
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace CS_Aufgabe_294_EAN
{
class Program
{
static void Main(string[] args)
{
const string ean = "4003301018398";
var checkDigit = char.GetNumericValue(ean[^1]);
if (!new Regex(@"\b\d{13}\b").IsMatch(ean)) return;
var sum = Enumerable.Range(0, ean.Length - 1).Select(x => char.GetNumericValue(ean[x]) * Math.Pow(3, x % 2)).Sum();
var resultCheckDigit = Math.Ceiling(sum / 10) * 10 - sum;
Console.WriteLine(resultCheckDigit == checkDigit);
}
}
}
using System;
using System.Collections.Generic;
namespace ean_pruefziffer_errechnen
{
class Program
{
static void Main(string[] args)
{
double ean = 978381582086;
bool maleins = true;
double allezahlensumme = 0;
double endzahl = 0;
string eanstring = Convert.ToString(ean);
List<double> allezahlen = new List<double>();
foreach (var item in eanstring)
{
if (maleins == true)
{
allezahlen.Add(Convert.ToDouble(item.ToString()));
maleins = false;
}
else if (maleins == false)
{
allezahlen.Add(Convert.ToDouble(item.ToString()) * 3);
maleins = true;
}
}
foreach (var item in allezahlen) { allezahlensumme += item; };
eanstring = Convert.ToString(allezahlensumme);
while (!eanstring.EndsWith("0"))
{
eanstring = Convert.ToString(Convert.ToDouble(eanstring) + 1);
}
endzahl = Convert.ToDouble(eanstring) - allezahlensumme;
Console.WriteLine("Prüfziffer: " + endzahl);
}
}
}
